TL;DR Hindsight bias is fascinating - it comes easier & easier to fool ourselves the more time passes by. We make things appear easier than they were (& are), ignore the changes of the context on the way (by judging everything from today's perspective), in some cases we even undervalue our past achievements, because time has cured our wounds & we've forgotten how hard it was to obtain them. I've identified 3 particular cases I keep seeing in Software Engineering industry - hopefully speaking openly about them (hence realizing them) is the 1st step to prevent their effects.


Just to make sure we're on the same page, here's the definition of Hindsight bias (HB):

Hindsight bias, also known as the knew-it-all-along effect or creeping determinism, is the inclination, after an event has occurred, to see the event as having been predictable, despite there having been little or no objective basis for predicting it.

Wikipedia (https://en.wikipedia.org/wiki/Hindsight_bias)

It's cool to find out that another phenomenon you observe in your life has a scientific name, isn't it? :) Anyway, I'm not going to dive into HB, it's not a goal & there are plenty of articles (& even whole books) on that (written by actual experts on the topic).

I have some specific (to Software Engineering) scenarios that have either direct or indirect connection to HB - hopefully presenting them in this context will help with dispelling some popular myths ... Let's find out.

Scenario #1: Chosen One(s) & Us

Someone's reading a series of blog posts or watching a tech conference session.

"OMG, this guy is brilliant! He made it appear that easy & obvious, and he did it so fast while I was struggling with a similar problem for three weeks and the final effect ... well, don't even mention the outcome."

I keep hearing/reading such comments every now & then. And each time I see this awe & admiration in (usually) young peoples' eyes. There's nothing wrong (yet) about that, but it is frequently followed by a statement like that:

"I wish I knew as much as this guy, I wish there were options here (in my work environment) to learn all that, projects/products developed in such way, ... But no, our daily work is shit, we do shit, our bosses know only the shit way, nothing could be done sadly.

I wish I lived in a shiny, colourful world where unicorns drink rainbow-coloured water, engineers are kings of the world & all the bug-less code is perfectly DDD-ed, BDD-ed, DevOps-ed, CD-ed, SSR-ed, ... And it has no side effects ..."

Mmmkay.
So, basically - NO. This is NOT how it works.

We all did shit in the past (& may be still doing it). Even people who appear to look super-smart & super-wise (on-stage, in publications, etc.) they are all made with scars, endless scars made by learning the craft the hard way. Those without scars are most likely bullshitters & imposters. In this industry theory is 5% (at max) of success, all the rest is practice, ability to execute, assessing outputs & building loop of actionable continuous feedback.

Some went so far in their path that they've forgotten (hereby enters HB) the painful beginnings and present it as they were not there, but believe me - they (even the most successful ones) were (and may occasionally still be) in the same point you may have been (or still be): clueless, struggling with everything, trying to figure out how to delivery better products in the better way while getting better as an engineer.

Scenario #2: Scoffing is easy

Engineers jump into some pre-made context that was not known to them previously - already existing codebase, working product, crafted blue-print, whatever.

  • "OMG! Have you seen that?! This is not how you do XXX, ffs!"
  • "What. A. Mess. What were there even thinking when they were writing this code?"
  • "Seriously, someone should have forced him to read YYY book, before they let him write any code ..."

Don't pretend you were not in a situation like that ;>

But it was that obvious, right? Actually, there's a big chance it wasn't - we, engineers, keep forgetting the fact that it's many times easier to criticise (& be right in our critic) than to do something properly in the first place. Flow of time changes everything - conditions, expectations, requirements, perceived effects of previous decisions: all of these can't be predicted & the decision questioned may have been made in completely different context. Well, TBH it may have in fact been objectively the most proper / safe / reasonable one - this observation is based on my own, practically validated experiences.

But our HB frequently doesn't let notice this simple fact. Because we would know how to do that properly since the beginning, right? We would not make such stupid mistakes, we would use the most proper pattern, we would react properly and in time. Suuuure.

So my advice is - don't criticise. Just don't. Instead, focus on building your systems in a way so they are the least fragile & the easiest to modify. And teaching others, how to craft stuff that way.

Scenario #3: World is in my head

This one is so loosely related to HB that it may even have a separate name (I haven't heard of). Anyway, it occasionally applies to me & I'm struggling to get rid out of it.

"Well, yes, this is something I've been working on (& continuously thinking about) for past 6 months ... I could talk about it, I could share it, but ... everyone knows that already, in the end it has appeared to be so obvious, so natural. I don't want to bore people to death with >obviosities<, I'll need to think about something else maybe ..."

This stuff seems so easy right now that everyone else most likely have figured it out by now. I'm not sure why it took me few months, most likely just because I had all these distractions & context switching. And there was already a blog post or two that covered this topic - everyone in the community has probably read through them already. Totally.

Needless to say, reality proves otherwise. The more time you spend on something, the more you think about it, the more you tinker / try / toy with it, the more you get convinced that this knowledge & experience you've got is a common one. You're already behind the learning curve hump, so you've forgotten the effort and the challenge. You actually may even feel embarrassed that it took you so much time, so maybe it's better to avoid getting too public with that, just to avoid the shame.

And then you (by accident, chance, on a whim) share this stuff & find everyone observing you in silence, with a full attention, some maybe even truly mind-blown. Or in some cases (in a less satisfactory scenario) they observe you stunned because they have no clue what the hell you're speaking about - the baseline level of abstraction you've started with is already higher than the top level of their considerations on the topic.

Too obvious, huh?