5 Mental Models for Software Engineers

I'm an avid reader. For a long time now, my primary source of information has come in the form of newsletters. The main advantage of the newsletter format for me is that I can surround myself with information sources I trust. This approach makes it easy to organize the content I'm interested in. Of course, my interests are always evolving depending on what's happening at any given moment in my life. I try not to replace the types of information I expose myself to, but am always trying to find the best sources. It's great because on any given day I can find an article about the latest release of a JS library alongside one about Engineering leadership and management.

A while ago I started noticing that most of my newsletters would share an article or two on mental models. I loved the name but didn't really engage with the idea initially. One day, I made the decision to bookmark this article and promised myself that I would read it someday. I suppose I was tired of seeing headlines about the concept (and remaining uninformed about it).

The day I decided to dive into the topic, I immediately found myself wishing that I'd taken it up sooner. Being the CTO at Codelitt, I spend a considerable chunk of my energy on decision making. Logically, this means that any improvement in this area would mean a big return in time and effort which could then be applied elsewhere in the company.

The following is an excerpt from Julian's blog where he provides an awesome explanation on the subject.

Mental models do two things: they help you assess how systems work and they help you make better decisions. These two concepts underlie everything you do.

For example, how does a rocket engine work? And which type of rocket fuel should you use?

The rocket engine is a system for you to assess. It has many parts that depend on each other, and you want to understand how. As for which type of fuel to use, that's a decision you make.

Below we have a few mental models that I find myself using on a daily basis when making software engineering decisions. Each concept has a summary that is pulled directly from one source - Shane Parrish's Farnam Street blog - which I highly recommend.

Redundancy

A good engineer never assumes the perfect reliability of the components of the system. He or she builds in redundancy to protect the integrity of the total system. Without the application of this robustness principle, tangible and intangible systems tend to fail over time.

Bottlenecks

A bottleneck describes the place at which a flow (of a tangible or intangible) is stopped, thus holding it back from continuous movement. As with a clogged artery or a blocked drain, a bottleneck in production of any good or service can be small but have a disproportionate impact if it is in the critical path.

Emergence

Higher-level behavior tends to emerge from the interaction of lower-order components. The result is frequently not linear – not a matter of simple addition – but rather non-linear, or exponential. An important resulting property of emergent behavior is that it cannot be predicted from simply studying the component parts.

First Principles Thinking

First principles thinking is one of the best ways to reverse-engineer complicated situations and unleash creative possibility. Sometimes called reasoning from first principles, it’s a tool to help clarify complicated problems by separating the underlying ideas or facts from any assumptions based on them. What remains are the essentials. If you know the first principles of something, you can build the rest of your knowledge around them to produce something new.

First-Conclusion Bias

As Charlie Munger famously pointed out, the mind works a bit like a sperm and egg: the first idea gets in and then the mind shuts. Like many other tendencies, this is probably an energy-saving device. Our tendency to settle on first conclusions leads us to accept many erroneous results and cease asking questions; it can be countered with some simple and useful mental routines.

If you would like to see more on mental models, check out the Farnan Street blog.


Want to read more about how Kaio thinks?