On Decision Making
Context
Four inspirations for this blog post (first three come from Clojure world, last one is coming from HN):
- Design in Practice by Rich Hickey
- Design in Practice in Practice Alex Miller
- Hammock Driven Development by Rich Hickey
- How to Write an Effective Software Design Document by Michael Lynch
Life/project is a sequence of decisions. Where you are now is the outcome of decisions you and other people made in the past. Affected by randomness of course - it’s never wise to underestimate power of randomness in life!
However, if we pretend for a second that randomness/luck/call-it-whatever-you-want doesn’t exist, it would be beneficial to try thinking on how you make decisions and how you could start making better decisions.
However, even if you know how to make quality decision - it’s only one part of equation. It’s also super important (not always) how fast you’re making the decisions.
The last dimension worth including is: “how important is the issue about which you are making the decision”.
In this 3 dimensional space you usually want to make great decisions fast - prioritizing decision making on the most important issues first. It’s not that hard to come up with such conclusion, right? However, if you look around, probably it’s not what you’re observing.
Situations where it goes wrong
Making tragic decisions
Very often people make a decision without having enough context, without considering alternatives and thinking too much about consequences. It’s not that bad if issue they are deciding on is “what I will eat for dinner?“. It’s much worse if they make such decision on issue like “who will I marry?” or “how to represent this complex business requirement in the codebase? (without even asking if I should in the first place!)“.
Inspirations I listed at the beginning of this blog post focus exactly on that - how to make good decisions. I’ll elaborate on that in next section.
Making no decisions at all
When you make a decision you should take responsibility of it. People are reluctant of taking responsibility of things that they don’t need to. That sucks when you’re in environment when nobody doesn’t want to make any decision. Everything stagnates. Nothing is happening. I even heard “any decision is better than no decision at all”. I strongly disagree (I saw too many bad decisions already), but “no decisions” situations suck. The most common sitaution for that is a work environment, where everyone has “it’s not my responsibility” attitude - not a fun place to be.
Making slow decisions
It depends on context a lot. I had tendency to make decisions too fast and forcing others to make decisions faster. Especially at work I couldn’t stand when people were discussing some edge cases and color of buttons. I wanted to just have SOMETHING working. Often it was the right approach and everybody was happy when SOMETHING landed very fast on production.
Over time I’ve came to few conclusions:
- The harder/more-painful/more-expensive decision is to revert - the more time is worth to spend on making this decision
- The higher risk of something going wrong - the more time is worth to spend on making this decision
- In lot of cases it doesn’t make it a lot better if you decide faster on something
However, there are times were you suffer when you don’t make decision fast:
- It’s obvious that you would start reaping benefits of making decision and it’s very low risk one
- Decision is easy to revert and not making it blocks another decisions to be made
Focusing on not important decisions (pointless discussions)
That’s an interesting phenomenon! The easier and lower-impact decision is - the more people are willing to talk about it and they become very verbose!
Trying to have everyone on board when making decision
Some decisions are so small that they shouldn’t take lot of people to agree on. Usually you don’t need to ask whole family if it’ll be OK if you take a shower now or how you name some method in code. Being overloaded by decision making means that you make decisions slower and even may create some friction that will discourage talking about bigger issues as well.
Finding the right balance
How to make right decisions?
I think that Rich Hickey found a great answer for that. I just recommend you to go and watch his talks. I’m just doing very short parahprase (simplified a lot):
- Make a problem statement clear - it’s not always obvious. Very often we see / hear the symptomps - you need to do some digging to find out what’s the real problem
- List criteria across which you will be comparing possible solutions
- List all solutions that come to your mind and assess them
- If you’re in team - talk with people and encourage them to challenge you and propose other solutions
- Make tradeoffs clear, list consuequences each solution brings
- Give yourself time (at least sleep one night with the problem)
It’s incredible for me how good this framework is. I’ve been trying it for some time already and it can make wonder, especially the last step is surprising for me. It still amazes me how good can be taking break, not thinking about the problem and then coming back to it after some time! Or how it sometimes just click when you think about decision matrix you have somewhere in back of your mind.
How to prioritize the most important decisions?
First of all - it’s useful to have a backlog of decisions to be made and with defined potential benefits and risks for each - this way it’s easier to prioritize them. Also it’s worth keeping track of already made decision.
In software project I find it super useful to have log of ADRs. Recently I joined a team which does ADRs sessions for pretty long time. Thanks to having this history I can get lot of context why things are the way they are but also I can learn what “size” of issue is worth discussing on such session and what is not.
When people are proposing things to be discussed - items are sorted by importance - and it makes lot of sense. It’s not trivial and sometimes it’s hard to say which issue is more important, but trying to assess importance (if it’s not too overcomplicated process!) works than random in my experience.
Important bit: it’s the best if decisions of little importance aren’t even proposed to be discussed - but that’s of course hard to achieve. Everyone may have different perspective. However, being direct and honest can improve situation of what’s being proposed and what’s not.
How to make fast enough decisions?
- Eliminate not important decisions out of the sight (pointless discussions)
- Think of what does it mean to be fast enough (i.e. if you’re loosing lot of money every minute due to some decision not being made - ASAP may be reasonable)
- Calibrate issues so everyone is on the same page which decisions are worth discussing more and which are not
Don’t underestimate life randomness
No matter how good decisions you make - the outcome stil may be terrible:
- some drunk driver will hit you when you’re passing the street
- project you’re working won’t land because of bad timing which you didn’t understand at the time of starting work
- one day your coworkers decide to blindly pump slop into the codebase resigning from understanding it (and you can influence them only only within the limits of their own willingness to listen)
However, it’s not a reason to give up. Quite the opposite! It’s a reason to try even harder to make right decisions so you can uplift the outcome even if life throws at you terrible circumstances.
I wish you great decisions on the issues that matter, made deliberately but never slower than they need to be. Cheers!