Mental models for Software engineer
Take simple Ideas seriously
Lot of complex systems have very simple idea behind them. Many scientific breakthrough are just about finding these simple idea in such complex systems. Our understanding increases leaps and bounds if we dwell deep enough in these seemingly simple things.
Often we only do this when we struggle with a problem. This struggle forces you to think hard and go to the basic. Why can’t we do this every time, why do we depend on these your-life-depends-on-it situation to get a nuanced understanding of basics.
It is not easy to seperate clutter from simplicity. An example, In my initial year of functional programming I was applying domain driven design pattern in functional programming just as they were implemented in Object oriented language. As a result, nothing novel came out. So I decided to go back to Eric Evan’s book on DDD — trying to understand the essence and not get caught up in language specific implementation details. This forced me to understand the core ideas, get the essence of it. From that point on I was able to come up with many novel functional patterns in domain driven design.
So next time, take some time to understand Queueing theory or to understand internals of JVM or just so read code from one of your favorite library.
Seek Disconfirming evidences
Avoid seeking evidences that confirm your thinking. Instead, if you have a hypothesis, think about the things that could disapprove it.
I use this technique very often while hunting for a bug or trying to understand a root cause of an issue. My flow goes like this:
First, do a divergent thinking, collect ideas or all possible causes that you think of.
Problem: Thing A is not working.
Hypothesis 1: A is not working because of X
Hypothesis 2: A is not working because Y
Hypothesis 3: A is not working because of Z
Next, seek out disconfirming evidences
In this step, I look for evidences that proves the each hypothesis wrong.This approach takes some time to getting used to. Because it is human tendency to seek confirming evidences.
Avoid stupidity than seeking brilliance
Most of the people loose in amateur tennis not because opponent is brilliant but because they themself make a lot of error.
If you are an amateur in a field, rather than copying the professional, it is a better strategy to avoid obvious mistakes.
This principle also facilitates learning from failure. Because when you are looking for ways to avoid stupidity, you would definitely look for past records of failure.
One way of implementing it is to walk backward from the inverse final state. For example, in order to live a good life, ask yourself what are the things you could do to have a miserable life and than avoid those things.
Focus on important problems instead of interesting ones
Any problem, no matter how insignificant will turn out to be interesting when analysed deep enough. Do not fall for this trap. If looking for a problem to solve, look for important ones.
Outthink the Consensus
If you are looking for simple formulas and easy answer, you are first level thinker. And all first level thinkers think in the same way and reach to same consensus. Second level thinker are different, they always think about second and subsequent order impact of their decision, they always ask “and then what”.
Embrace long feedback loop
Any practice with long feedback loop feels like a grunt. If you seek pleasure in doing things, this strongly indicates that you are addicted to short feedback loop.
With long feedback loop, changes are subtle and day-to-day progress is not discernible. But these small changes compounds over time.
Better decisions with Probabilistic thinking
Always assign a confidence score to your beliefs.
We take decision based on what we beliefs. Our beliefs may hold true in a certain context. Or, they might only be true to a certain degree. Or worse, they might be outright false.
We seldom check our believes. How many times have you asked yourself. Why do I believe so ? What is the source of information ? Is that source credible ? Is the information up to date ?
Questioning our beliefs also makes us open to other point of views. Knowing that other sides exists is not enough for us to change our beliefs. In fact, it makes us stick to our guns more. We seek or interpret information which conforms to our existing beliefs.
When we think in advance about the chances of alternative outcomes and make a decision based on those chances, it doesn’t automatically make us wrong when things don’t work out. It just means that one event in a set of possible futures occurred
- Thinking in bets
If you believe in something always attach a confidence score to it. If you think something is true, say to what degree. Measure “Truthiness” of things.
“Truthiness” of a believe is a moving target. For example, if you believe in “X” and you received new information which proves “X” to be less true. Then lower your confidence score. Conversely, if you received information which strengths the truthiness of X, you increase the confidence score.
If you are constantly updating the confidence score of your believe with new information, you are more likely to take a better, rational and objective decision. There are actually people who predicts future events with this technique.