I was originally introduced to the idea of mental models by the folks over at Farnam Street, who have been writing for some time about the subject. Inspired by Charlie Munger's multidisciplinary pursuit of knowledge and his insights on business and life, Shane Parrish and the Farnam Street team developed a large encyclopedia of mental models available online and in book form.
What is a mental model? As described in the link above:
A mental model is a simplified explanation of how something works.
Any idea, belief, or concept can be boiled down to its essence. Like a map, mental models highlight key information while ignoring irrelevant details. They're tools for compressing complexity into manageable chunks.
I like to think of mental models as simplified, specialized lenses through which we can make sense of the world - they don't show us everything at once; rather, they allow us to focus in on one aspect of the world at a time so we can derive insight.
In writing these notes, another source of inspiration I will borrow from is the book Art of Agile Development by James Shore. This book is a sort of 'opinionated encyclopedia' of agile software development approaches. For those who are unfamiliar, agile software development is not a single framework or even a singular set of practices, but rather a loosely aligned group of approaches that has coalesced over the past 20+ years thanks to the insights and experimentation of many different practitioners. One of the things I love about Art of Agile is that Shore will often start a chapter by listing out direct references to the sources he has pulled from to describe his ideal sets of practices.
I will try to follow his example and develop a source list at the beginning of every note, tying each mental model to its various sources.
Over the course of my career, I've found the following mental models to be useful when describing different approaches to software engineering.
View notes by tag to explore by topic.
Or, see the full list here:
More coming soon...