Michele on Software

My opinions about software product development

When it comes to models it's not about truth

Understanding models and lenses, their applicability, and their limitations.

The philosophical bits

Life is about luck and decision-making. Luck has tremendous impact, but we don’t control it, which leaves us with decisions.

A good decision is a decision that produces good outcomes, according to the decision-maker. Given the situation, the problem, and the constraints, your job is to make good decisions to produce good outcomes. So why is it so hard? Because of complexity, a long time horizon, and limited information.

Reality is complex: everything is interconnected and interdependent, systems are recursively part of larger systems. Tiny changes can have unexpected and non-linear effects, which might manifest themselves after a long time. Throw in the fact that we humans can’t cope well with delays in feedback, and that we pretty much never have complete information about the state, the problem, the options, and the constraints, and it’s no wonder that consistently making good decisions is so hard.

Which is unfortunate news, because consistently making good decisions is what allows to achieve great outcomes, leaving aside luck. One bad decision can put us in an unsavoury position, and could make it hard or impossible to recover.

Mind that doing the right thing is way more important than doing the thing right. Identifying the best course of action triumphs over executing well a wrong approach. If you want to reach a destination, direction matters way more than speed. Indeed, doing the wrong thing righter makes you wronger, like Ackoff used to say and teach. If you’re moving in the wrong direction, the faster you go the further you’re getting from where you wanted to be.

So how do we make decisions? Well, we end up doing what we believe is best. This is never objective, and objectiveness and truth don’t even matter in this sense, what matters is making the right decision. Our belief system, which is our collective set of mental models, is what determines how we see a problem and what course of action we deem the most appropriate, given the circumstances.

2 people with a different way of thinking and seeing the world would make different decisions if put in the same situation.

Some people think that maths, physics, medicine and so on are true and universal, but this isn’t the case. They attempt to model and explain reality and, like every model, they omit details and have local validity. And yet they are tremendously useful: remember, the point isn’t being true, but allowing us to make good decisions.

So in order to make good decisions, we need to leverage useful mental models, given the problem and the circumstances. This consists of 2 parts:

  1. Forming a wide range of mental models.
  2. Adopting the right lens and mental models for the problem and the circumstances.

Like building a toolbox and choosing the right tool for the job at hand.

The implications for software product development

So what then? Why all this abstract reasoning? Most companies employ plenty of educated, hard-working, smart, and well-meaning people, and yet often they fail to achieve the outcomes they desire.

And I argue that this is due to ineffective mental models at play, which inevitably lead to bad outcomes. In terms of what kinds of mental models I’m talking about, I categorise them as follows:

  1. Organizational: nature and purpose of a company, interdependencies between processes, people, and teams, incentives, collaboration.
  2. Context-specific: factory vs lab metaphor, business model, quantity vs quality, delivery vs development.

What has your experience been? Does any of this resonate? have you ever seen a company putting a lot of effort into something without achieving much?