Erik Bernhardsson
CTO at Better Mortgage Inc.
28 May 2020

Never attribute to stupidity that which is adequately explained by opportunity cost

Originally published at erikbern.com

Hanlon’s razor is a classic aphorism I’m sure you have heard before: Never attribute to malice that which can be adequately explained by stupidity.

I’ve found that neither malice nor stupidity is the most common reason when you don’t understand why something is in a certain way. Instead, the root cause is probably just that they didn’t have time yet. This happens all the time at startups (maybe a bit less at big companies, for reasons I’ll get back to).

Some examples of things I hear all the time:

  • I don’t understand why team X isn’t working on feature idea Y. It’s such an obvious thing to do!
  • Why is bug Z still present? Hasn’t it been known for a really long time? I don’t understand why they aren’t fixing it?
  • I don’t get why HR team still doesn’t offer perk W. So many other companies have that!
  • I’ve told my manager that we need a process for thing V but it still hasn’t happened!

Of course, why these things never happened is that something else was more important. Quoting Wikipedia on Opportunity cost:

When an option is chosen from alternatives, the opportunity cost is the “cost” incurred by not enjoying the benefit associated with the best alternative choice. The New Oxford American Dictionary defines it as “the loss of potential gain from other alternatives when one alternative is chosen.” In simple terms, opportunity cost is the benefit not received as a result of not selecting the next best option.

Thus I’ve started telling people: Never attribute to stupidity that which is adequately explained by opportunity cost.

Your friends aren’t stupid, just busy

It might seem obvious the way I put it that opportunity cost is the thing to blame. But it’s not. Human psychology works in weird ways. People love to conclude that something wasn’t done because they are stupid, or possibly lazy.

This happens about 95% of the time when you don’t know a certain person/team. The team that works on the CI/CD system is just a faceless blob in a different office and they must be completely stupid for never fixing the super annoying button in the interface. What are they doing all day! When you know a certain team/person, the percentage drops a bit: maybe stupidity is the first thought only 40% of the time. I’m obviously just making up these numbers, but you get the point.

who wants to be a millionaire

I spent many years working in a satellite office. A lot of the time when I had some deep technical disagreement about something, I’d fly to the main HQ, and go out for dinner with the other team. I wouldn’t even talk about technology, just about random stuff. Once they knew me, and realize I was a human (and not a faceless blob), most technical disagreements tended to go away. People are more likely to assume positive intent and not malice/stupidity/laziness.

Ruthless prioritization

Erring on the side of assuming opportunity cost as cause precludes any evil/stupid/lazy narrative: the team/person probably actually just had other more important priorities. But how did they pick those?

I’m not going to offer any smart advice on how to estimate effort and impact in your JIRA board. There’s a trillion methods and tools and processes for doing that. But what I have come to believe is that: prioritization is the most value creating activity in any company. Generating ideas and executing things is of course also important! But what I’ve seen to set apart great teams from good is a brutal focus on prioritization. This means generating an absurd amount of ideas and throwing 99% of them out of the window, to focus on the 1% that have the highest impact.

indiana jones

Ideas will be generated much faster than there’s bandwidth to execute on them, so you’re doing something right if your backlog is growing indefinitely. A negative person on a mediocre team will complain that there’s never time to work on their favorite pet project X. I’ve often heard things like “our backlog of features keeps growing so fast, how are we ever going to have time to invest in paying down tech debt?”.

To me this reflects a misunderstanding of how product development should work. Backlogs should be growing indefinitely. What a good team will do is to accept that, and establish a good relationship between product and tech, and make sure you constantly keep reprioritizing. Maybe today it’s shipping a bunch of features the business needs. Maybe tomorrow it’s paying down some tech debt. If you have a shared framework for how to think about value and prioritization, it usually works out.

Opportunity cost matters a lot less at bigcos

I mentioned in passing that opportunity cost is a likely cause at startups, but maybe less often at big companies. Why? Because a startup is often playing catch up building things that are mostly “obvious”. When you get to a very late stage, and you have a lot of money and a lot of developers, things get a lot more tricky. You can’t do X because it will cannibalize metric Y and upset advertisers. You can’t do Z because that would be inconsistent with how Q works. And so on.

why doesnt screenshot

Ultra-scientific study of company priorities.

Final statement

We started with one seemingly innocuous statement, but it quickly led to many corollaries: how to trust people, how to manage the backlog, how prioritization can generate tremendous value. Fun!

I often keep quoting the paraphrased quote to people, but people have no clue what I’m talking about. Hopefully going forward, there’s this blog post to refer people to!

This post was on the front page of Hacker News and generated some comments.