Mental models for Software engineer

Photo by Charl Folscher on Unsplash

Take simple Ideas seriously

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

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

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

Outthink the Consensus

Embrace long feedback loop

Better decisions with Probabilistic thinking

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.



Programmer, Samkhya canonist, ThoughtWorker

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store