<![CDATA[acmConsulting]]>https://www.acmconsulting.eu/https://www.acmconsulting.eu/favicon.pngacmConsultinghttps://www.acmconsulting.eu/Ghost 4.22Tue, 09 Nov 2021 13:16:28 GMT60<![CDATA[A Pratchett Gateway Book]]>https://www.acmconsulting.eu/post/a-pratchet-gateway-book/618a5779ef9f507939106fe3Tue, 09 Nov 2021 12:11:43 GMT

I want you to try a book by Terry Pratchett (Sir Terry, technically). He is one of my favourite authors. I think his wit, take on the world and the human condition is amazingly insightful while deeply funny. The quotes littered though this post will give you an idea of what to expect when you read his books.

“Steal five dollars and you're a common thief. Steal thousands and you're either the government or a hero.”
― Terry Pratchett, Going Postal

A hugely prolific author (394 distinct works according to good reads), Pratchett grew up in my home town, his first book was published in 1983 and his last in 2015. His books are very popular and has been dramatized for TV a few times.

The TV dramatization you may have heard of is Good Omens, his most high-profile work which comes from a book collaboration with Neil Gamen, and was turned into a mini series, produced by in 2019 by Amazon and the BBC.

Good Omens (TV Series 2019) - IMDb
Good Omens: Created by Neil Gaiman, Terry Pratchett. With David Tennant, Michael Sheen, Frances McDormand, Sam Taylor Buck. A tale of the bungling of Armageddon features an angel, a demon, an eleven-year-old Antichrist, and a doom-saying witch.
A Pratchett Gateway Book

But, that’s not where I want you to start. Skip Good Omens for now, and the other TV shows - dive into the books!

“In the beginning there was nothing, which exploded.”
 ―     Terry Pratchett, Lords and Ladies

Pratchett has crafted an entire world, the discworld. Spanning 47 books, inter-weaved storylines and character arcs it’s a huge corpus and one I wish I could read again for the first time, I’m envious of those who are discovering him for the first time. I'm currently re-reading the books with my daughter, who is enchanted by his turn of phrase.

“The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.”
 ―     Terry Pratchett, Diggers

The Discworld books are not a linear series, more like a complex web, so reading them in published order isn't the best way to enjoy them. Luckily people have drawn a map, a reading guide, to let you follow the threads of stories in a much more satisfying way.

A Pratchett Gateway Book

So, where to start? If you are a programmer (or have a technical/logical mind), start with Going Postal - I’ve hooked many a developer on the Pratchett drug with this book. It's the first book in the Moist Von Lipwig series and so much fun.

“It's not worth doing something unless someone, somewhere, would much rather you weren't doing it.”
 ―     Terry Pratchett

Once you've finished the Lipwig thread, go back and do all the Industrial Revolution. Then I really like the Witches thread (which is where I've started with my daughter) and after that, go to the Watch! I hope my excitement for your future enjoyment comes across - I'm deeply envious of your road ahead.

“Coming back to where you started is not the same as never leaving.”
 ―     Terry Pratchett,  A Hat Full of Sky

OK, back to Going Postal.

A Pratchett Gateway Book
"Moist von Lipwig was a con artist, a fraud and a man faced with a life choice: be hanged, or put Ankh-Morpork's ailing postal service back on its feet."

It’s a story of a con-man, trying to rebuild the postal service in the biggest city on the disc. But it’s so much more, redemption, injustice, stamp collecting, open source, politics, love and so so so much cutting and hilarious observation. You will find yourself laughing out loud.

Go read it. (amazon link here)

“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.”
 ―     Terry Pratchett, Thief of Time

Actually, I want you to enjoy this book so much, I want to buy you a copy. The first 5 people to ask, I will buy and send them a copy, under the agreement:

  1. You read it
  2. You let me know what you thought
  3. (If you liked it) You pass the book on to at least 2 more people.
“Stories of imagination tend to upset those without one.”
 ―     Terry Pratchett

Deal?

“If you kept changing the way people saw the world, you ended up changing the way you saw yourself.”
 ―     Terry Pratchett,  Going Postal
]]>
<![CDATA[The best router you've never heard of]]>https://www.acmconsulting.eu/post/the-best-router-youve-never-heard-of/61600cd3f15d4a8c1a751b97Fri, 08 Oct 2021 09:50:49 GMT

Obligatory Amazon (affiliate) link: https://amzn.to/3oJkgsA

GL.iNet say they are WiFi for Things. And, they just get so many things right with this little box, who's official title is : GL-MT300N-V2 (Mango) and is billed as "Wireless Mini Portable VPN Travel Router, Mobile Hotspot in Pocket, WiFi Repeater Bridge, Range Extender, OpenVPN Client, 300Mbps High Performance, 128MB RAM".  Quite the mouthful, so why do I like it so much?

✔️ Cheap - the router is £25
✔️ Open Source - its firmware is based on OpenWRT
✔️ User friendly - they put an easy-to-use layer on top of OpenWRT
✔️ Power user friendly - Its still OpenWRT under the hood (with access)
✔️ Powerful - more bars for longer than my much bigger brand name router
✔️ Featureful - VPN, TOR, QOS etc

So many clever little additions and quality of life tweaks, they just get it (or me?). For example, it has just one button, and one switch and a USB slot.

The button, a reset, but a smart one. Hold for 4 seconds, and it switches the router back into "router" mode, instead of WiFi extender or repeater modes, making it easy to get back into the router in cases where you make a mistake in setup. Of course, a 30 second hold is a factory reset.

The switch, as hardware toggle which is software configurable, to switch all traffic to use TOR or the VPN and back again. It's a small thing, but is such a nice, thoughtful and well executed solution.

The USB slot, can be used as a disk, to enable file hosting/sharing, or plug in a modem, and you have a portable hotspot!!

Because it's based on OpenWRT out of the box, you get 32 pages of plug-ins you can install. It supports USB tethering/modems, captive portals, guest networks (which I use for my IOT devices), file sharing (from the USB slot), custom firewall rules etc etc.

This is not a paid post. I was just moved to recommend a product which I've use and performed better than my (admittedly low) expectations and really outperforms all others of that type I've used.

I've not tried any of their more expensive/advanced product, but I'm very tempted to get another little yellow box for when I travel.

]]>
<![CDATA[Privacy vs Personalisation]]>https://www.acmconsulting.eu/post/privacy-vs-personalization/615ad7b44f5ba8851164b34bWed, 06 Oct 2021 14:53:16 GMT

I was invited to be part of a panel at The AI summit London 2021 where we discussed "Bridging the Gap Between Personalisation and Privacy – Can AI Help?". It is a fascinating topic with some true experts in the field (and me) on the panel:

Unfortunately, the panel wasn't recorded, but I still wanted to share the debate and a few notes, as others may find it useful or thought provoking.

The core questions raised in the debate

When it comes to personalisation, there is often a trade off with concerns of user privacy. Consumers are more likely to pass on their personal information if they are getting truly valuable returns. Can AI help resolve the personalisation and privacy paradox? What are the right approaches?

The conversation flowed between two main areas, privacy and how AI/Tech can help - both interlinked, and expertly navigated by Tim.

After a quick intro,  where we discussed examples in our own lives of personalisation gone well (or badly) we dove into the question of privacy:

  • Do consumers really care about privacy?
  • Is personalisation possible without raising concerns over data privacy?
  • How can brands explain the benefits of data sharing? (For both them and the customer)

Then we moved onto how can technology help:

  • Can AI help resolve this seeming conflict between personalisation and privacy?
  • Is there a risk that consumers are even more concerned by the ‘black boxes’? (Processing they can’t even see)
  • What are the right approaches to bring AI into a business to help? Are there any examples you can share/are aware of?

We finished on some advice, answering the question: What should the organisations watching today go away and do?

Notes

Instead of trying to replicate the debate, I'm going to include some ideas shared (likely poorly paraphrased/misremembered - sorry). I hope, however, they are useful or at least thought provoking:

  • John Wanamaker (1838-1922) a pioneer in marketing said - “Half the money I spend on advertising is wasted; the trouble is I don't know which half.”
  • Personalisation, can be a double edged sword - "personal service" or a "personal recommendation" can be a big positive for the consumer, but if you "get personal", it can become creepy ("is my phone listening to me?", "how do they know this?"). Especially when the ad/suggestion is outside the expected context or far too specific.
  • If users are given control over their data, they will be more deliberate with it - making sure it's accurate. Deal them into the process.
  • When done well, with the consumer's needs and privacy in mind, personalisation results in better outcomes for everyone; less wasted time/attention of consumers and less wasted dollars from the brand and money to make even better content for the creators. AI can help with all three, as we saw at BEN with Philo.
  • Low conversion rates make already expensive customer views even more expensive - optimizing for conversion often results in a better ROI than trying to maximize for views at the top of the funnel.
  • Black boxes of decision-making already existed before technology/AI. Human based processes can often be harder to audit and check - the increased attention to the output data is allowing better systems to be built in the future.
  • Governments and industry have roles to play, and we've seen great steps  forward with things like GDPR and CCPA, but we need to be thinking past what it's possible to do technologically, or even legally and to what's the right thing to do, ethically.
  • PET (Privacy Enhancing Technology) can help a lot, by offering systems to help improve the privacy of the data though AI or cryptographic means. Differential privacy is very interesting.

My closing comment to the question : What should the organisations watching today go away and do?

Brands should start by aiming to empower and engage with your audience, by understanding them as a group and in context - be respectful. You don't need to stalk individuals and invade privacy to get results.

Further reading / watching

BEN’s custom, collaborative AI improves Philo’s CTR by 172% and conversion efficiency by 10x. - BEN
Over the course of the campaign our proprietary neural networks improved Philo’s CTRs by 172%. The result was an increased conversion efficiency of 10x.
Privacy vs Personalisation
Evolv Talks Digital Transformation and AI in CX
CX Today reports on the latest customer experience technology news from around the globe. Read similar Contact Centre news here
Privacy vs Personalisation
Top 10 Privacy Enhancing Technologies (PETs) & Use Cases
Privacy vs Personalisation

(thank you to Alexandru Badiu for the headline photo)

]]>
<![CDATA[Beyond the golden rule]]>https://www.acmconsulting.eu/post/beyond-the-golden-rule/6128fe9b91c9d550240631caFri, 03 Sep 2021 10:25:37 GMT
Golden Rule - Wikipedia
Beyond the golden rule
Beyond the golden rule

Wikipedia (of course) explains the golden rule nicely, from its first appearance in Egypt in c. 2040–1650 BCE through to its adoption/re-emergence in almost all ethical traditions.

Like many people, I was taught the golden rule as a principle of good behaviour at school and by my parents. The rule is second nature to me and I consider it to be a near universal truth. I would expect almost everyone I come across to have heard of it and understand it. But, came across a fascinating evolution of the idea in a Science Fiction series The Bobivere (which is GREAT, please do go read it), which takes it a step further.

Bobiverse Series by Dennis E. Taylor
We Are Legion (We Are Bob) (Bobiverse, #1), For We Are Many (Bobiverse, #2), All These Worlds (Bobiverse, #3), Heaven’s River (Bobiverse, #4), and The B...
Beyond the golden rule

(Warning, minor spoiler ahead)

In one of the books, an alien who is undercover on a planet is somewhat revealed  because they didn't know the planets' version of the golden rule - which like our golden rule is so engrained in the culture, that someone not knowing it was a hint they may not be native. They had 3 levels to the rule:

  1. The Iron Rule: Treat those below you as you want
  2. The Silver Rule: Treat others as you want to be treated
  3. The Golden Rule: Treat others how they want to be treated

(A more detailed Reddit thread on this is here)

The Golden rule, as outlined above, is also referred to as the platinum rule (like in this book of the same name, published in 1996), and I really like this version. It focuses on the person (or people) you are dealing with instead of yourself. It's a layer deeper.

Expecting everyone to have the same needs and wants as you is expecting and reinforces a ME/mono culture and can take us to places where we don't empower or respect diversity. It's this diversity of thought and needs which leads us to better outcomes, and so I have been thinking a lot about how I can use the platinum rule in my day-to-day work and life.  

Below are two great posts on the Platinum rule, both are well worth reading as they offer an analysis of the rule as well as ways it could be applied to your work.

The Platinum Rule: All You Need to Know in 3 Drawings
If you want to improve your relationships, use the Platinum Rule (not the Golden Rule). Here’s all you need to know to get started!
Beyond the golden rule
What is The Platinum Rule and Why it Matters More Than Ever | Career Contessa
Maybe you rolled your eyes at your parents when they constantly told you to treat others as you would like to be treated. But it’s true. Here’s how to make sure you’re communicating how you want to be treated.
Beyond the golden rule

Happy Friday.

]]>
<![CDATA[GDPR / Cookie shortcut]]>https://www.acmconsulting.eu/post/gdpr-cookie-side-step/61289d3805e08a13201338a3Fri, 27 Aug 2021 08:18:24 GMT

Cookie pop-ups are a pain and I don't use them on this blog. I do understand they are needed, but feel they defeat the point of the law and all the dark patterns some pop-up solutions employ to trick/tire you into agreeing to share your data are so boring.

But. There is a very simple shortcut, to avoid the pain of the pop-up. Modern browsers already have it installed, it's not even a plugin.

Just one click, gets you to the content, instead of the 5+ you normally need to only accept the "necessary cookies", avoiding the "legitimate interest" or "illegitimate interest" cookies via the pop-up.

GDPR / Cookie shortcut
This button is magic, click it.

Reader view mode, shows you just the content, none of the fluff (cookie banners, ads etc). For websites where you are only visiting to read and likely won't come back to, it's an extremely handy shortcut which avoids you agreeing to anything!

GDPR / Cookie shortcut

Happy Friday.

]]>
<![CDATA[Scaling is hard]]>https://www.acmconsulting.eu/post/scaling-is-hard/60ef065be7e7f66f6b7d9eb7Thu, 15 Jul 2021 09:40:01 GMTStep 1. You made or did something
Step 2. People liked it and asked for more
Step 3. ???Scaling is hard

I spend a lot of time thinking and reading about how you can/should structure being able to provide "more".

In the Loon Shots book, Safi Bahcall tells us "More is different", and he is right, scaling is hard in part because of this.

Here are two posts, 10 years apart, both discussing the challenge of more.

The unfortunate math behind consulting companies

In 2011, I read this great post about how to scale a consulting company, it hit home and reminded me of my time trying to do the same. It's an old post, but as relevant today (perhaps more so) than it was then.

The unfortunate math behind consulting companies
Consulting can be a great way to earn a living and a smart way to self-finance a startup, but the business model isn’t as good you might think, and there are pitfalls everywhere. Learn them, …
Scaling is hard

The TL:DR; is hiring a dev and billing them out at x2 their salary sounds like it should work and be easy money - it doesn't. According to ASmartBear, you need to be more like x3-x4 to make a profit.

Lots of service based businesses work this out as they try to grow - so try to pivot and instead sell a product (often a tech product) as a way out of directly trading time for money.

But, building and scaling a tech product isn't easy either, and recently I've read a post which takes an interesting look at why. Why, when even if you get everything right, tech, product-market fit, funding, it can still be very hard.

Money makes the world go round

And it can also dictate how decisions are made about the way a product is built, how its teams are structured and ultimately if the whole thing is going to succeed or fail.

In a post which went live this week, zwischenzugs shows us why "Money Flows Rule Everything Around Me" and the wide reaching impact that flow of money can have, even down to the level of the codebase. Zwischenzugs discusses stages of a product companies growth and why later stages can end up being so problematic:

If You Want To Transform IT, Start With Finance
tl;dr – ‘Money Flows Rule Everything Around Me’ When talking about IT transformation, we often we often talk about ‘culture’ being the problem in making change, but wh…
Scaling is hard

There is also a good discussion around this on Hacker News. The TL:DR; for this is best expressed in comic form, and it is brilliant. It turns out (as many things to do with software development tend to), it comes down to Conways Law.

Scaling is hard
https://www.comicagile.net/comic/conways-law/

If this rings true, or you are interested in how you can use  Conways Law to your advantage, I highly recommend reading Team Topologies or even just watching the video in the post below.

Insightful videos/books
What books or videos have you watched which were aha moments or step changes inyour thinking?I’m specifically interested in software/management topic, but would loverecommendations from across the spectrum. For me, in the last year, one of my key aha moments came from this video: And then the b…
Scaling is hard
]]>
<![CDATA[What makes something better is connection]]>https://www.acmconsulting.eu/post/what-makes-something-better-is-connection/60a7828806f39b41a8364473Fri, 21 May 2021 10:40:53 GMTThe QuoteWhat makes something better is connection

The title is the second half:

The truth is, rarely can a response make something better.
What makes something better, is connection. – Brené Brown

The quote comes as the final thought in this excellent RSA short:

The Source

I came across this as part of a presentation given by Didi Hirsch Mental Health Services about preventing suicide. Heavy. I know. But hard things are worth doing, and uncomfortable conversations about mental health and even suicide need to happen. We have to make the conversations about mental health and suicide safe to have, so if someone needs it, they can feel they are able to have it - the alternative is never having the chance to have the conversation.

The presentation by Didi Hirch was given with care, compassion, and it was surprisingly uplifting. I whole heartedly encourage people to explore getting training in suicide prevention, and/or to encourage awareness and discussion in your peer and professional groups. It's important. Didi Hirch offer sessions,  but I suspect there will be similar organizations locally to you - check them out.

It was an extremely thought provoking presentation. Both around the topic of suicide, which is one we need to talk more about. The quote stuck with me.

The wider application?

The quote is broad, it is presented in the context of empathy and mental health - but I wondered, does this apply more widely? Can it apply to problem-solving in general, to software development to business processes? Is this a general rule to live by? Perhaps.

As an optimistic and enthusiastic technologist, I find myself frequently slipping into "solution mode", sometimes earlier than I should, be that at work or in my personal life. This quote reminded me of that tendency, but also posed a radical alternative - that a response is actually not what you need. A solution isn't what you need. You need to empathize, to connect. That is the basis of any future solution.

When I find myself slipping into solutions mode, I catch myself, I pause, I listen, I ask questions, I give space - but the end goal is still the same, the solution. The quote offers an alternative, the goal isn't to find a solution, the goal is to find the connection. The solution is a by-product.

Empathy and connection should be the root of good problem-solving, perhaps that's what Bill Gates meant:

Techo fixes are not sufficient, but they are necessary
> Techo fixes are not sufficient, but they are necessary * Bill Gates, How To Avoid A Climate Disaster I love this. Quotes like this I find extremely useful way of keeping yourself ontrack - do you have any sayings or quotes that support or direct your day today? Bill made this statement in t…
What makes something better is connection
]]>
<![CDATA[Mental Commuting]]>https://www.acmconsulting.eu/post/mental-commuting/609baf8bfa5280c12372fa7fWed, 12 May 2021 10:52:32 GMT

Pre-Covid, many people had a commute, time taken to move your physical location from home to work, and back. Lots of people hate the wasted time spent on this daily grind, but some cherished elements of it - it's me time, listening to pod casts, reading, etc.

This separation of work and home, of mental states is something which, I think, deserves more attention and something we've lost when we lost our physical commute. For me at least, being able to compartmentalize those worlds has been a critical part of maintaining a health work/life balance and perspective.

How can you mentally commute?

Or to say it another way, how do you move headspace without moving physical space?

I think it's actually really simple, for me, it's and comes down to 2 things.

  1. Time
  2. Context

Both are about enabling a smooth and predictable transition, to let your brain, emotions and thoughts move from one state to another.

Time

Most people (myself included), need time to adjust. There are some among us who have a superpower, they are able to compartmentalize and switch extremely quickly - for everyone else, there is time.

How much time you need to settle after a day can depend on you and your day, but not spending time on this transition, risks the stresses or excitement from one area bleeding into the next. Turning the transition into a habit can also help reduce the time needed, in my experience.

Context

You work at work, and are at home at home. But when you work at home, things get tricky. So to help with separation, build context.

I'm lucky, in that I have a room I use as my home office, this means I can leave that room and "leave work" in that room too. But even without a room, you can tie your work context to something, a device (a work laptop), a position/chair dedicated to work or even the clothes you are wearing. Moving out of that context is a signal to you, your brain, those around you that you're not working any more.

Give yourself something to latch onto, as "work mode" and so an ability to deliberately switch out of it. Without it, you are always potentially "at work".

My routine

I use both time and context to keep my work and home life separated. I plan my day and schedule around these transitions has had a HUGE impact on my ability to focus at work and unwind after.

In my morning, I will take my kids to school, walking. When I get back to the house after dropping them, I enter my "office" and my day begins (with the bonus of a little exercise too).

At the end of my day, I schedule a 15 minute "decompression" time, it's in my calendar, as a meeting - I don't leave work (my room) till it's done. I use this time to take stock of the day, look at tomorrow and meditate. Its worth every second.

Experience Calm
Relax with Calm, a simple mindfulness meditation app that brings clarity and peace of mind into your life
Mental Commuting

To help me meditate I use the Calm app. I am fortune that my employer (BEN Group) who takes mental health seriously and offer a free calm subscription to all employees! If you are new to meditation (like me) I highly recommend the How to Meditate series, followed by Daily Trip (both by Jeff Warren). Each episode is about 10 minutes, perfect for the end of day decompression.

Meditation gives my brain permission (and time) to reset and re-calibrate before I leave my office, closing the door behind me, till the next day.

It's not perfect

Do I sometimes miss the decompression meeting - of course.
Have a sneaked back into the "office" later to do more work - yes.
Does it always work - no.

But its helped, a LOT. It might work for you, or it might not, but I'm sharing this as its helped me, and I want to help others - I hope it does.

]]>
<![CDATA[Microdosing wellness?]]>https://www.acmconsulting.eu/post/micro-dosing-wellness/60925bb49642b7475cd2fc20Wed, 05 May 2021 09:01:19 GMT

I've been reading quite a lot around team structure, growth and diversity, as a result I think the frequency illusion may have been kicking in - but its lead met to interesting places.

One place I found something interesting was in a blog post titled The Growth Equation: Stress + Rest = Growth where they quoted Matt Dixon a world-class triathlete and coach who said:

“Anyone can work their asses off,” ... “But it takes real courage to rest."
- Matt Dixon

This seems especially important as May is Mental Health Month in the US, and the next week (May 10th - 16th) is Mental Health Awareness Week in the UK.

This got me to thinking about a miss quoted idea from Gandhi:

Be the change you want to see in the world
- Not Gandhi

So what can I do? Be public about taking time off - absolutely. Remind my teams to do the same - yes. But what about others who are not in my teams, or what about situations where you just need a pause, a moment to collect yourself?

One area of stress, especially in a COVID world has been meetings, endless back to back calls. In a physical world, you have time between meetings even if it's just walking from meeting room A to B - you get time to switch context, grab a drink etc. With all meetings happening from your desk, that's no longer there. Back to back calls can mean not even getting up from the desk for hours.

Enter #firstfiveminutes

Microdosing wellness?
The idea is simple. When you start your meeting, give the first 5 minutes back.
First Five Minutes .club
Give the first 5 minutes back.
Microdosing wellness?

There are (of course) already tools to help with this, Outlook has a feature to start meetings late/end them early but only on Windows. Also, if there is a 10-minute gap in your calendar, someone could just schedule another meeting into that slot!

You could also try to end your meeting early - but, lets be realistic that is much harder than it seems, especially if the conversation is flowing. Fewer meetings, meeting free days/afternoons etc are all great options too - but sometimes or for some teams/people, that's just not an option.

I have decided to take matters into my own hands, to give people a microdose of calm, a moment to get water, stretch or take a bathroom break - seems silly, but the response so far has been extremely positive. I wonder if it's like giving thanks to make you happier, if giving wellness/mental health can make you healthier?

Can't hurt to try - right?

]]>
<![CDATA[Hate cookie banners? Want more privacy? Me too!]]>https://www.acmconsulting.eu/post/hate-cookie-banners-me-too/6086f5e4c8b58c9007b9dc4dTue, 27 Apr 2021 10:54:58 GMTRemember the good old days?Hate cookie banners? Want more privacy? Me too!

Back when the internet was young, you had hit counters, animated flames, under construction notices and so many GIFs and tables. Good times.

Hate cookie banners? Want more privacy? Me too!

You can revisit those good times via http://www.oocities.org or even download it from Bit Torrent.

But now we have GDPR pop-ups, CCPA, data leaks, scary big brother and all sorts of nasty hackers etc. Oh, how we pine for the simpler times.

Or not. It turns out being able to measure your audience, A/B test, segment and otherwise understand and how your app/website/tool is being used is extremely useful.

But, can you get all the wonderful measurement without impacting privacy and setting yourself up as a juicy hacking target? And most importantly, can you rid the internet of another cookie banner.

YES. YES YOU CAN!

Google Analytics without cookies?

Google Analytics is great, it's free, it works, and its extremely powerful - which is why so many people (me included) use it. But it has a cookie from one of the (if not THE) largest advertiser in the world, Google - but does it have to?

I don't want to track people around the Internet, I just want to know if people read my blog. Ideally, what pages, how long they read for etc. But can you do this without cookies?

Surprisingly, yes, you can make Google Analytics work without the cookies, and the implementation is actually really easy, as outline in the excellent blog post: https://helgeklein.com/blog/2020/06/google-analytics-cookieless-tracking-without-gdpr-consent/#other-platforms

<script>
const cyrb53 = function(str, seed = 0) {
   let h1 = 0xdeadbeef ^ seed,
      h2 = 0x41c6ce57 ^ seed;
   for (let i = 0, ch; i < str.length; i++) {
      ch = str.charCodeAt(i);
      h1 = Math.imul(h1 ^ ch, 2654435761);
      h2 = Math.imul(h2 ^ ch, 1597334677);
   }
   h1 = Math.imul(h1 ^ h1 >>> 16, 2246822507) ^ Math.imul(h2 ^ h2 >>> 13, 3266489909);
   h2 = Math.imul(h2 ^ h2 >>> 16, 2246822507) ^ Math.imul(h1 ^ h1 >>> 13, 3266489909);
   return 4294967296 * (2097151 & h2) + (h1 >>> 0);
};

let clientIP = "{$_SERVER['REMOTE_ADDR']}";
let validityInterval = Math.round (new Date() / 1000 / 3600 / 24 / 4);
let clientIDSource = clientIP + ";" + window.location.host + ";" + navigator.userAgent + ";" + navigator.language + ";" + validityInterval;
let clientIDHashed = cyrb53(clientIDSource).toString(16);

(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');

ga('create', 'YOUR-GA-TRACKING-CODE', {
   'storage': 'none',
   'clientId': clientIDHashed
});
ga('set', 'anonymizeIp', true);
ga('send', 'pageview');
</script>

I've implemented it on this site already and so far, it seems to work exactly as you would hope/expect.

What about not using google at all?

Good question, at the end of https://helgeklein.com/blog/2020/06/google-analytics-cookieless-tracking-without-gdpr-consent they talk about a few solutions, some SaaS some self hosted and some really clever, like https://adwise.ch/blog/minimal-cookieless-web-analytics/ where you use serverless azure functions.

As a personal blog, I didn't want to spend money on analytics - but I did still want them. I also didn't want to spend much time/effort setting it up, so while interesting (and likely free) the azure server-less functions just seemed like more effort than I wanted to invest right now.

What about your CDN?

I use Cloudflare,  (I detail how I set things up here: https://www.acmconsulting.eu/post/hello-world/) mostly to provide an SSL certificate https://shyr.io/blog/free-ssl-for-github-pages-with-custom-domains - but it turns out they also offer free web analytics (https://www.cloudflare.com/en-gb/web-analytics/) which is privacy first.

Hate cookie banners? Want more privacy? Me too!

CDN based analytics is nice, as it doesn't need to drop a cookie -  But the free version is only at the site level, to get more you have to pay. Hence, why am still using Google Analytics.

A battle is won, what about the war?

No cookie banner on this website, excellent! One down, countless to go.

The bigger picture is considering why GDPR and rules like it exist in the first place:

This (...GDPR) should make it easier for EU citizens to understand how their data is being used, and also raise any complaints, even if they are not in the country where its located
https://www.privacytrust.com/gdpr/whats-the-real-purpose-of-the-gdpr.html

This sound reasonable to me.

May people (myself included) are concerned about what data is collected about me and how that data is used/stored. While GDPR and laws like it may have helped, I don't think they have won the war.

Sometimes, I accept I am providing data and attention as payment for a product, most often when using advertising funded platforms - and I'm OK with that trade, assuming it's done with respect and not misused. But that's not always the case.

Good adverts, like good content recommendations are actually better for me and enhance my experience while also offering the best results for everyone in the consensus triangle. Bad adverts are a waste of time, money and energy for everyone.

Targeting, tracking, measurement are all tools, if used well, for good, they can result in better outcomes for everyone - but it has to be done right.

A promising next step

If we do want to track, target and measure, we need to do so in a way the insures the rights, security and privacy of the people providing the data. Thankfully, some very clever people are working on a system to do exactly that - it's called differential privacy:

Differential privacy is a system for publicly sharing information about a dataset by describing the patterns of groups within the dataset while withholding information about individuals in the dataset.
Differential privacy - Wikipedia
Hate cookie banners? Want more privacy? Me too!

This is really clever, and it could (perhaps should) be the gold standard for metrics and measurement. It may end up doing what GDPR could not. Proving a way for business to collect data and understand their customers as trends while preserving the privacy of the individual.

A good explainer which goes into more detail is available here:

Explainer: what is differential privacy and how can it protect your data?
How should privacy be protected in a world where data is gathered and shared with increasing speed and ingenuity? Differential privacy, a new model of cyber security, provides a potential solution.
Hate cookie banners? Want more privacy? Me too!

For me, the most exciting part of this, is that differential privacy looks like it should work with AI/Machine Learning.

Ai Differential Privacy And Federated Learning
(Source: https://ai.googleblog.com/2017/04/federated-learning-collaborative.html)
Hate cookie banners? Want more privacy? Me too!

Microsoft with LinkedIn is leading the way on implementing differential privacy and I follow their progress with interest.

LinkedIn’s Audience Engagements API: A Privacy Preserving Data Analytics System at Scale
We present a privacy system that leverages differential privacy to protectLinkedIn members’ data while also providing audience engagement insights toenable marketing analytics related applications. We detail the differentiallyprivate algorithms and other privacy safeguards used to provide results…
Hate cookie banners? Want more privacy? Me too!

A better future is possible, and if you are reading this, its likely you are in a position to promote solutions like this, pushing for their implementation and delivery.

Be the change you want to see in your industry.

]]>
<![CDATA[API testing in the browser?]]>https://www.acmconsulting.eu/post/api-testing-in-the-browser/6082b7c4c8b58c9007b9dbdcFri, 23 Apr 2021 12:55:50 GMTYuk, why would you want to do that?API testing in the browser?

I know it sounds like a bad idea, but hear me out.

After trying many tools for integration testing of our web apps, we've found https://www.cypress.io, a great testing framework designed to be:

Fast, easy and reliable testing for anything that runs in a browser.

We liked it, and have adopted it for various needs. Its open source, developer friendly and generally a very useful tool. Its killer feature is being able to time travel, visually; to see actions as they take place and when a test fails, but also to move about in time, to the steps before a failure, which passed.

Being able to see the lead up to a failure really helps in identifying root causes, especially in the context of integration tests. It even records videos and takes screen shots if you run it headlessly (via the command line).

API testing in the browser?

We were sold!

But, the UI can be slow

Even something as basic as logging in, when done via the UI, is a multi step process, requiring quite a number of clicks, page loads, characters to be typed etc. The net result of all this is a request to an API login endpoint to get a bearer token.

As suggested in the cypress tutorials, you can speed up slow multi-step UI processes by using cy.request directly, skipping all the slow UI parts.

const options = {
  method: 'POST',
  url: 'http://auth.corp.com:7075/login',
  qs: {
	// use qs to set query string to the url that creates
	// http://auth.corp.com:8080?redirectTo=http://localhost:7074/set_token
	redirectTo: 'http://localhost:7074/set_token',
  },
  form: true, // we are submitting a regular form body
  body: {
	username: 'jane.lane',
	password: 'password123',
  },
}

// allow us to override defaults with passed in overrides
_.extend(options, overrides)

cy.request(options)

This works great.

It's a technique you can re-use in other areas, beyond login, as a way to speed up parts of a test which you are not actually testing. But, sometimes things fail - we are testing after all.

Using request like this is detailed well in the official documentation: https://docs.cypress.io/api/commands/request#Timeouts

API testing in the browser?

However, API requests are 2nd class citizens in cypress. You will see what failed (the expect), as shown above, but if it fails, you won't know why/see the data.

To see the data, you need to open the console, as shown below - which is fine when working interactively, but when headless, you miss out on all this information.

API testing in the browser?

Enter cypress-rest-graphql!

Inspired by cy-api we built cypress-rest-graphql to make working with REST and GraphQL end points easier and importantly, to display the data even in headless mode!

The cy-api module was good, but its focus was a little different and looked for tighter API integration / logging. We wanted something simpler, which didn't assume any API level integration. So we built cypress-rest-graphql. (We also created a test repository, so you can see it in action).

cypress-rest-graphql focuses on providing a few key commands:

/**
 * Helper to perform GraphQL queries on the API
 * Will display the query and response in the pane, for easy review.
 * Automatically uses cy.env('accessToken') for auth
 * @param  {graphQL} query - Query or Mutation graphQL
 * @param  {Object} variables - Key value pairs/object used as parameters to the query
 */
cy.graphql();

/**
 * Helper to periodically perform a graphQL query, checking the response against a condition.
 * 
 * @param  {graphQL} query - Query or Mutation graphQL
 * @param  {Object} variables - Key value pairs/object used as parameters to the query
 * @param  {Function} condition - Response data passed to this function, failed expects will trigger a loop. 
 * @param  {Number} wait=100 - Millisecond delay between polling
 * @param  {Number} maxTries=5 - Maximum number of retries before failing totally.
 */
cy.graphQLPolling()

/**
 * Wrapper to perform REST based API queries. Improved logging and review.
 * @param  {String} method='GET' - REST method to use
 * @param  {String} url - relative or absolute URL to hit
 * @param  {Object} postBody - Post body
 */
cy.rest()

/**
 * Helper to periodically perform a rest request, checking the response against a condition.
 * 
 * @param  {String} method='GET' - REST method to use
 * @param  {String} url - relative or absolute URL to hit
 * @param  {Object} postBody - Post body
 * @param  {Function} condition - Response data passed to this function, failed expects will trigger a loop. 
 * @param  {Number} wait=100 - Millisecond delay between polling
 * @param  {Number} maxTries=5 - Maximum number of retries before failing totally.
 */
cy.restPolling()

When these commands are called, as well as performing the request, the output is rendered to the UI, allowing you to see what may have caused an error/issue. Because it's rendered into the DOM, the time travel aspects also work really well

API testing in the browser?

Please check it out, me know what you think, PRs are encouraged.

I hope you find it useful.

]]>
<![CDATA[How do you structure status update meetings / emails?]]>With so much detail and so many moving parts, it can be hard to get the balance right between high level strategies / direction with low level tactics / details.

I find it depends a lot on the audience, but one thing I've found works at all levels is a

]]>
https://www.acmconsulting.eu/post/how-do-you-update-your-status/607ea1a075e3833129f0c1c3Tue, 20 Apr 2021 09:48:33 GMT

With so much detail and so many moving parts, it can be hard to get the balance right between high level strategies / direction with low level tactics / details.

I find it depends a lot on the audience, but one thing I've found works at all levels is a consistent pattern. By using the same questions/metrics/structure everyone knows what to expect which lets them focus on the change, not the structure.

An example of this is the 5:15 report (https://www.theglobeandmail.com/report-on-business/careers/management/cut-down-on-reports-with-the-5-15-method/article4106997/). The idea of this report is to create a status update which takes no more than 15 minutes to write, and no more than 5 minutes to read/understand. Repeatable format, easy to use.

I use 5:15 reports with my directs and manager as a way to get on the same page before a 1:1, so we can spend more time talking about things that need to be discussed.

I customized the 5:15 template, to work for me/my team. This the 1:1 template i use:

1. What personal accomplishments were made in the last week?
2. What are your personal priorities for the next week?
3. What blockers do you have, were overcome, do you see coming?
4. What would you like advice/guidance/help/more time to think about?
5. How are you feeling about work in general? Where is your head at?
6. What interesting/funny/clever thing caught your eye recently (can be non-work related)?

I really like the last 2 questions, as they can give a great jumping off point for the 1:1 and insight into how things are going.

I've also tried to use this format for group/team updates, but with less success.

Very interested to learn about other patterns or templates, especially for group / department or company wide levels. Please drop me a note on the usual channels if you have found things that work.

]]>
<![CDATA[Hello 👻 World]]>https://www.acmconsulting.eu/post/hello-world/6065a283a39bd264341534b2Tue, 06 Apr 2021 09:09:00 GMTBye bye TumblrHello 👻 World

I'm finally off Tumblr! I've moved to Ghost, a NodeJS based CMS/Blogging platform.

An interesting coincidence, just as I was doing my First Post to Tumblr, 8 years ago, Ghost was just starting out via a Kickstarter campaign - now, 8 years on they released a new version https://ghost.org/changelog/4/.

Why 👻?

The editor experience is really nice in Ghost, a what you see is what you mean style, with a very Markdown feeling editor. I liked it.

They have clearly been thinking about the publishing and editing experience, with a lot of nice features, without much bloat.

It supports scheduling, large number of integrations etc. A very polished first impression for sure.

I did consider other systems Gatsby.js+Contentful or Hugo, basically anything from the JAM stack trend. I was trying to avoid hosted solutions or massive PHP systems (WordPress/Drupal), no time for keeping up with patches.

Really, it came down to the editor experience in JAM style systems and Ghost won.

Moving

I had 8 years of post in Tumblr, over 110 posts, which I wanted to keep. Thankfully Tumblr has a great API, and I was able to extract the old posts out using a slightly modified version of Tumblr-to-ghost. I found the tags made things messy when re-importing to ghost, so modified the script to just assign a single tag (Tumblr) when importing.

I also found a few other tools, for getting data out, including a great post by Pollymath.net, and Tumblr2Markdown was really nice, but in the end the simple approach worked well for me.

Theme

I took a stock base theme called Edition, removed the membership features (which as of Ghost 4 are forced on you, somewhat controversially) and added a few other minor tweaks. It's on GitHub - https://github.com/a-c-m/Edition

I like it for now.

Issues

It has not been pain free, or even easy. I very nearly gave up at a few points. Many Yaks were shaved.

Problems I ran into:

1. Importing Markdown to Ghost is hard

  • I write a lot in Markdown, so wanted an easy way to import. Turns out there isn't a good one. Which is puzzling.
  • Copy/Paste into the MobileDoc based editor, works fine, but importing files as posts wasn't an option.
  • I explored various options, even starting to write my own converted. In the end I gave up and have legacy posts as embedded HTML

2. Routing / Custom URLs in Ghost is non-obvious https://ghost.org/docs/themes/routing/

3. Static hosting?

  • Given Ghost's history/pedigree from Gatsby, seems like a simple option for static hosting would have been a no-brainer. But it's not.
  • I really don't want to spend over $100 per year on hosting. Nor do I want to support/maintain a NodeJS server exposed to the internet. A static site seemed like the best solution.
  • Many options, most of them partial/not great.
  • Netlify perhaps? https://forum.ghost.org/t/how-do-i-create-a-free-ghost-blog-on-netlify/15662/2 - No, still got to host a public-ish node server.
  • Ghost Static Site Generator - https://github.com/Fried-Chicken/ghost-static-site-generator is what I went with - but really would have hoped something similar was built into Ghost from the start.

4. Redirects

  • So far, due to the static hosting and way I'm exporting/saving the site - I've not managed to get them to work, so will likely lose some SEO juice. But that's OK for now.

My solution

That's it. No ongoing server costs, I control the code, HTTPS, nice editor experience in Ghost. Works so far.

]]>
<![CDATA[Next Gen Note-taking / PKM]]>https://www.acmconsulting.eu/post/next-gen-note-taking/606594d5a39bd264341533fcThu, 18 Mar 2021 10:41:00 GMT

Anyone else using Roam Research or similar to take notes and create a Personal Knowledge Management system (PKM)?

I've recently discovered this way of taking notes, having been maintaining my own Markdown based notes for quite some time.

Roam seems to be the dominant player in the space, but their model of expensive SaaS and lack of data possession were big turn offs.

Because of this I've gravitated towards Obsidian.md, which seems great. I'm still in the early days however.

Really interested to learn from people who have adopted a Roam like system, then abandoned it.

Likely a fuller blog post will follow in a few days/weeks.

]]>
<![CDATA[#NoEstimates?]]>https://www.acmconsulting.eu/post/no-estimates/606596cda39bd26434153432Thu, 11 Mar 2021 11:00:00 GMTINDEX
  • TL;DR
  • Late to the party
  • Guilty by association
  • Inputs vs Outcomes
  • There is no cake
  • Are you OK?
  • How big is small?
  • Be Precise?
  • Do you trust me?

TL;DR

#NoEstimates?

Just my 0.02 units of currency - but :

  • Don't confuse estimation with setting a final project delivery date
  • Consider estimates as an input into a process, not an outcome/performance
  • Estimates can help the team plan their work and spot bottle necks/problems before they happen
  • Estimates can confirm and communicate a shared understanding
  • Velocity could be the answer - I'm not sure
  • Don't use estimates to measure output
  • Trust the team is working hard and the stakeholder isn't out to get you

LATE TO THE PARTY

Yup. But it does look like it's going on all night. The debate still rages, and who doesn't love a heated debate. https://twitter.com/search?q=%23NoEstimates

There are very smart people advocating for no estimates at all. There is a nice post by Malcom Isaacs, called "The #NoEstimate debate", which seems to hit a lot of the high notes and key players.

As I have come to understand it, the origin of this debate was trigged by a 2012 blog post titled No Estimate Programming Series by Woody Zuill, where he outlined the case for #NoEstimates.

No point me rehashing the debate, it's better if you read the debate summary and origin post above. Then I can dive into my own 0.02 units of currency on the topic.

Why am I sharing? Because I want to test my hypnosis. By sharing my thoughts and take on this, I am actively seeking contrary/other/agreeing points of view, so I can be better informed and make the right choices for my self and my team.

GUILTY BY ASSOCIATION

Some criticism of estimation, to me, seem to be linked to other processes people associate with estimation.

Using estimate to set hard delivery deadlines at the start of a project is very unpopular (rightly). Estimation is being associated with that bad practice, but it's not the process of estimation at fault - its how the estimate is being used.

Waterfall vs Scrum vs Kanban vs ?? It is another debate entirely, while making estimates can be a critical component of wider project management frameworks, I think its important we look at estimates on their own merits (or failures) and not taint estimation with our feeling of related (and/or dependent) processes.

INPUT VS OUTCOMES

I consider an estimates to be part of the input, not the output.

Accelerate Metrics have give us excellent ways to measure software development teams performance/Code Metrics, backed by some impressive research. They measure outcomes and there are a bunch of tools to help make this easy. None of the accelerate metrics, measure input, the book does talk a lot about the inputs - but they don't measure them.

If you start using inputs, as a measure of outcomes, you can get into an ugly place, fast. It sets up (and rewards) all sorts of bad behaviour, like padding estimates and/or you see Parkinson's Law kick in.

THERE IS NO CAKE

I admit, the idea of not doing an estimate is appealing.

Its less work, one less thing to do, before we get to the fun part of creating. It is easy to revert to #NoEstimate in times of stress or urgency - we don't have time, it doesn't add value, just get it done. Right?

But. From the Original Post that started it all:

Ask Boss to select one “small” thing that she felt was very important.

Quite a bit to unpack here:

  • "Small" is an estimate.
  • So now we are talking about degrees of estimation, not #NoEstimation. Right?
  • How does the team/pm/dev know what "small" is? Relative to other tasks? Relative to total time of the project?
  • Why pick a small thing? Why not just the very important thing?

Even in #NoEstimate, we still expect estimates.

Even if you remove the word "Small" and used any story without some kind of understanding of size, then there is the question of what's the right size for a story? How do you know when to break a story down more or leave it alone? What becomes our unit of work?

So we do estimate, the question is more about WHAT we do with the estimates.

ARE YOU OK?

If we do have estimates (and we do), what should they be used for? I would argue, as in input, they should be used to make sure the team members are OK.

By that I mean:

  • Is the team member stuck on their current task?
  • Does the team/team member have too much work?
  • Does the team/team member have enough work to be happy/busy?

It's hard to answer the above, without some metric or measure of input.

  • Looks like Mike has been on the same task for a week - is that OK?
  • Task was expected to be completed quickly = No, he may need help. We also may need to re-assess similar work in the future, what did we miss?
  • Task was expected to take a whole = OK, keep going, don't interrupt.
  • 5 tasks, no estimates, is that enough work for Jane for the next 2 weeks?
  • All tasks are small, expected to be completed quickly = Probably not, may need more - by why does she only have small tasks?
  • A mix of small/large = Yes, probably
  • All tasks are huge and complex = More than enough, perhaps we need to see about sharing out the work better?

If we use estimates as a way to keep teams happy and productive (not as a measure of output/outcomes), I think we can keep a lot of the value from estimation, its when estimates are used as a tool to measure output and/or fix deadlines, that we get into trouble.

HOW BIG IS SMALL?

"It depends" → "It doesn't matter"

But then why bother at all?

Because, I would argue, the value is in coming from an agreed group understanding on complexity/likely time to deliver. Doesn't really matter how you measure it: hours, story points or story count - it doesn't matter. The value here is in (as a team) exploring and communicating what needs to be done and how hard it might be to do it, before you start doing it.

The process of estimation is high value. Estimating work means dedicating time to understand it, agreeing on that understanding and then communicating that understanding in a standardized way.

That act of discussing, and then estimating can tease out unexpected or overlooked complexity, miss-understandings and gaps in understanding. If 3 devs agree, but one other has a very different estimate, that is something to be discussed.

Small? I've found that once a single task gets over a few days, all bets are off, so we should break it down and/or get more context. For me, an upper bound on tickets should be a few days.

What metric you use is much less important than the act of discussing and agreeing. And, once you have that agreement, that metric can be communicated to others, who can take it into consideration when deciding on the importance of any give task or group of tasks to achieve an outcome.

BE PRECISE?

Precise estimates and other logical fallacies.

Another key criticism of estimates is they are not accurate, and so they are not worth the time. As I discussed above, I don't think this is true. The value is in the process, as much as the output. Refining the accuracy of the estimates is useful in as much as it helps the team communicate and coordinate and better manage their own time/and input, not output.

They get even less precise if they are used as a measure of output, as they are easy to game, pad or otherwise manipulate.

WHY NOT VELOCITY?

In many #NoEstimate posts, they point to looking at velocity (tasks/stories completed) as an alternative to estimating.

Velocity is not without its drawbacks, it can be manipulated and may incentivize the wrong behaviour depending on how the metric is used.

But, even if you skip estimation and use velocity, you are still actually estimating on the front, to slice up the work into "small" story units to work on. But you lose resolution, A 1 line type-o fix in a field label vs adding a new database abstraction layer - both could be a single story, but with very different estimates and are not equal.

It feels like trying to measure an input, with an outcome. And you are going to miss out on the other benefits of estimation, if you skip the process. But perhaps its fine - I'm not sure.

DO YOU TRUST ME?

The final key criticism of estimates I want to consider, is fear. Fear that the estimate they create, will be used as a tool to punish or pressure them to do things that are unsustainable, unreasonable or unachievable and which then cause undue stress and disappointment.

Yes. This can (and does) happen. It shouldn't, but it does. Will abandoning estimations fix this? I don't think so. It might move the conversation from quantitative, to qualitative - which may buy time or give the louder voices a chance to control the narrative a bit. But, if the manager/business/client etc already doesn't trust a team, a number (or lack of one) isn't going to change that.

]]>