Based in South Africa, Simon's content explores product development, software design and artificial intelligence.

If it's not a tradeoff it's a mistake

Whenever I need to make a decision I use a model because in software, every decision has a tradeoff. I find that using a model is extremely valuable as it helps put polarising views into perspective. For kicks, let’s discuss choosing a javascript framework (yikes).

Gabriel Fortuna (@gee_forr on Twitter) once said something to me along the lines of “if you don’t consider the alternative, you’re not making a tradeoff, you’re making a mistake”. This has stuck with me, and as I introspect on pending decisions in my life, I noticed that many of my past decisions were not based on a tradeoff of the alternative but rather on my feelings at the time. Knights of Columbus! I’ve made so many decisions based on bias and personal preference instead of considering the spectrum of alternatives!

Software is weird

The world of software is strange to say the least. It’s a world where the answer “it depends” is simultaneously the best and most disappointing answer. In a world where there are, ironically, a million opinions but little authoritative data and where little is starkly black and white, I need to be rational and consider my options. In order to do this I use a mental model.

What is a mental model exactly? Without making this an academic exercise, a mental model is simply a thought process or framework to help one better understand something in the world. It’s quite a popular technique in productivity circles, but the one I am going to share today is particularly useful when discussing contrasting points of view.

The (invisible) Spectrum of Tradeoffs

Whenever I consider a polarizing decision or contrasting concept, I imagine an invisible spectrum. On this spectrum lies the opposites or extremes of whatever I am considering. In software it is often a belief that a specific methodology or coding style is the most effective. As a painfully relatable example, I will decide on what Javascript framework to use for a fictitious side project:


Use toys included framework, Ember.js

Write my own language that compiles to Javascript

I’m being intentionally naive here. There are obviously many factors to consider in this decision, but a spectrum affords me the freedom to accept that there is more than one choice right off the bat. Furthermore, my choices are almost infinite. On the one side I want a very heavy framework and want to write the least amount of wiring code and the most amount of domain specific code, and on the other side of the spectrum I’m going to invent a new language and write a framework from scratch so I know every line of code intimately.

Somewhere along this spectrum exists a pragmatic solution that addresses all the requirements of my problem.

Every model is wrong, and every model is useful

Like all models, the spectrum model is only partially correct, yet it is incredibly useful. It’s useful because it exposes two opposite extremes to a decision between a group of people which facilitates shared understanding. It’s useful because it helps you understand not just the extremes but also all the options in between. It’s useful because it’s very simple and supporting instead of distracting from the conversation.

In my experience, it’s often a hybrid solution that wins out over solution A or B. If you’re interested in some other mental models, I cannot recommend The Spine Model enough, it’s had a massive impact on how I think.

Have questions? I’d be humbled and would love to help.

Developers, play is a validated activity for learning

Software estimation in hours with Scrum