How to avoid premature optimization

TL;DR;

Premature optimization is a pitfall that concerns everyone.
It comes from a pattern of ignoring unknown unknowns. This is often reinforced by the insecurities we have that "not knowing means we're not good".
The practical recommendation: pause before you think of scaling things. Courageously ask yourself/others how much unknowns is left on the topic you want to scale.

Everybody knows about premature optimization...


We've heard it again and again:
Engineering: we spent time discussing "throttling", "response time", "endpoint pattern" even though the API we built ended up not being used because customers asked for something very different from what was expected.
Marketing: we launched a brand new website after spending 3 months of work to realize the messaging does not work and need to be redone.
Sales: we've hired 10 enterprise sales rep to realize none of them can sell the current product to enterprise customers.

Yup, we've seen it and probably fell for it one or multiple times!

Why do we fall for it again and again?


We're not falling for it because we don't know the concept of premature scaling.
We're falling for it because we fail to ask ourself an important blindspot in the way we attack problems.

The universal human blindspot: unknown unknowns


We're all very good at making plans about what to do. We're doing poorly at questioning our own ideas and asking ourselves what are the "unknown unknowns".
Getting back to the cause of the pre-mature scaling stories above:
Engineering did not ask "what level of confidence do we have that this feature is going to be used by many users? Is this just a test or are we planning to have 1m users tomorrow on that feature?"
Marketing: "How confident are we that the current messaging is something that works today?"
Sales: "Have we sold our product successfully to enterprise customers before?"

Why this blindspot?



#1: because we feel uncomfortable questioning ourself and others

For whatever reason, we tend to believe that "unknown" means that we're not good at our job.
Engineers: we're afraid to ask our product manager "Are you sure this feature is going to be useful?". It's because in our mind they suck at product management if they're not sure.
Marketing: we're afraid to question ourselves on whether or not our messaging is right. Because we assume that if we're not sure, it means we haven't done our job right.
Sales: we're afraid to raise the doubt that we might have difficulties selling. Because it might signal we're not confident in our sales skills. Or that we don't believe in the product.



#2: because we don't like working with uncertainty

Yup, it is more fun to discuss performance, design options and sales playbook than asking ourselves where the big unknowns are and what we can do to reduce those. This is natural.

What to practice

Before you work on anything, pause.
Ask yourself if there are unknowns or unknown unknowns in what you want to scale. If you do, courageously ask others the uncomfortable of questions of how sure they are about their assumptions.
Then deliberately decide whether you're in "learning mode" or "execution mode".