"Magic is just science that we don't understand yet" — Arthur C. Clarke


Should I wear this set of jeans and turtle neck, or that set? To be or not to be, that is the question. The average person makes an astonishing 35 000 decisions per day1, that’s 2 000 decisions per hour, or one decision per second. This equates to nearly 13 MILLION decisions per year. Now, obviously some decisions are automatic, unconscious, or reflexive. Many of these decisions are truly unimportant in your every day life. In fact, what you choose to wear today, what you eat for lunch, or if you showered, has little impact in the span of your life.

However, buildup of these tiny decisions can and does impact your ability to make crucial decisions that do have an impact on your life and work. This is called decision fatigue2. It is why people like Barack Obama, Mark Zuckerberg, and Steve Jobs are all well known for having a single “uniform”, so that they’re not faced with the tiny decision of what to wear on any given day. This frees up space in their brains for making important decisions for their country or business. I’m sure for many people, like me; choosing what to eat for dinner can seem like a nation state decision. We often just debate choices until ultimately deciding to eat potato chips and spray cheese. Or maybe we flip a coin, maybe we push the responsibility onto our spouse, maybe we just go with our gut. The decision is relatively low risk, regardless of what you choose for dinner tonight, be it healthy or unhealthy, delicious or horrible, has minimal impact on your life in the long run. However, what you choose as a diet (how you make overall meal decisions); has a significant impact on your longevity. As you can see we make many small unimportant decisions daily, these often have little impact on long-term outcomes. However, we also are faced with decisions that do have an impact on long term outcomes. And when faced with those decisions what do you do?

The de facto standard for decision making seems to be the “Pros vs. Cons” list. Whereby you reflect upon the different choices you could make for a given scenario and you think of pros and cons for each. Obviously, the choice with the most pros and fewest cons is the clear winner, right? wrong. Humans are incredibly biased, and by the time you’re making a pros and cons list for the decision, you’ve already made up your mind3. If you don’t believe me do an experiment. Next time you have to make a critical decision, write down “my gut decisions is: <decision>”. Then do your pros and cons list. You’ll see that your gut decision has the most pros and least cons. This happens for a myriad of psychological reasons, loss aversion, path of least resistance, and fear of the unknown, to name a few. For large life decisions, Annie Duke former professional poker player, and author of How to Decide, suggests that instead of a pros and cons list we use a decision tree. A decision tree is basically a tree of outcomes that would stem from a given decision, your preference for each outcome, and the probability of each outcome. This gives us a better framework to compare and contrast the decision based on how it makes us feel, and the likelihood of that outcome to come true.

Let’s pause — this is a software blog after all. So what does any of this have to do with software? I’m confident if you’ve spent any years in the industry, and you’ve seen any software design or architecture decisions, you’ve seen a pros and cons list along with it. It goes something like this:

Manager: “Bob I need you to design the architecture for our new Foo Feature. We want to evaluate the choice between Bingo vs. Bongo framework. Please make sure you state why you’ve made this decision.”

Bob, who has been working with Bongo framework for the past 5 years, and doesn’t really know much about the new-fangled Bingo framework, goes off to research the 2.

Bob: “Manager – I am done. The clear winner is Bongo framework. Here’s the list of pros and cons:”

Bongo Pros:

  • Great framework for development speed and flexibility (because I’ve used it before)
  • Good documentation (and I’ve read it before)
  • Developers choices fit good patterns and practices (and line up with my style, because I’ve worked on it for years and adopted the style)
  • Mature framework, with good support (and I’ve used it for half a decade)

Bongo Cons:

  • Older framework (developers lost interest so there’s 0 work being done)
  • A few bugs here and there (they’re really insidious and haven’t been patched in 3 years)

Bingo Pros:

  • Open source (lots of developers, and support)

Bingo Cons:

  • Hard to pick up (because I’ve worked with Bongo for so long)
  • Immature (and I’ve never used it)
  • Lots of strange patterns and practices (that I’ve never seen before)

It’s obviously a clear decision to choose Bongo framework, right? Well, if you read the italicized text you might be questioning that decision. The text was meant to be Bob’s unconscious biases being called out. The point is this happens all the time. In this situation, Bob’s Manager is trusting his decision making abilities, so whatever pros and cons list Bob comes up with, his manager, and other’s on the team will largely agree with. Why is this? All of the items in the lists above, save two, are subjective. It means they’re extremely prone to bias. Therein lies the problem. The choice anyone reviewing this decision now has to make, is are they willing to argue the definition of “Older”, “Good”, or “A few”? They won’t, because ain’t nobody got time for that. The other problem with this decision framework is that each choice is evaluated against a different set of criteria. Insofar that the comparison is like comparing Apples to Oranges. Then, we all march ahead choosing a technology based on Bob’s subjective biased opinion; and then Bob decides to leave the company or change teams. Now everyone else on the team is stuck supporting Bob’s biased choices, and not really understanding or having a concrete reason why. Just that Bob wanted to do it that way.

Then how can we make better software decisions?

Unfortunately, Annie Duke’s decision tree model doesn’t fit software well. In software it is extremely difficult to predict outcomes, our feelings about how something should turn out has little to do with engineering decisions, and probability of outcomes requires a crystal ball. Then how can we do better? Well first and foremost, we need to remove bias from our decisions. To do this stop using subjective language, and start using objective measures. “Good” is not objective. What’s “Good” for me, might not be “Good” for you. For example, instead of “Great framework for development speed and flexibility”, we could say “This framework has 20 examples of various use cases, and is used across 15 projects in 5 different industries”. You can’t argue that, in fact there’s no need to argue it. It is fact, and facts are supported by data. Maybe I don’t think 20 examples makes for ease of use and development speed. It doesn’t matter, because 20 is 20.

Next, hold all the choices to the same criteria. If you’re going to judge a choice by how many examples it has, then judge all the choices by how many examples they have. Choosing the right metrics is hard, and yes, a little subjective; but it is much easier for peer evaluation than a scattered set of pros and cons. Once you’ve chosen a set of criteria to evaluate your choices against, the exercise is simple. Get the values of each criteria for each choice, and use those to determine a winner of each criteria. Then, sum the wins, the choice with the highest amount of “wins”, is the best decision. This is called a decision matrix.

# of examples# projects usingMaturity# of open bugsIs open source?# of maintainers
Bingo5351050yes10
Bongo20153150no0
BongoBingoBongoBingoBingoBingo

In this example, it’s clear to see that Bingo is the winner, since of the 6 objective metrics, it has higher values. Sometimes objective measures just are not available. If this is the case, you can compare the choices against each other for the criteria and rank them. Maybe “ease of development” is the criteria, and there’s no exact measure. So, you can compare the options, using the same estimate for each. It could be LOC, or dev days, etc. This will then give an objective rank. These can then be peer reviewed, “Why is X easier than Y?”, you can then debate the pseudo-objective metric. Regardless, a move in this direction will help to objectify the choice, and remove individual bias.

To summarize, we can all benefit from better decisions. Whether that’s personal or professional, finance or software. To do better, we have to know better, and we need better tools. So next time your manager asks you for ye olde Pros vs. Cons list, try something different. Try a decision matrix. Objectify your decision criteria, and simply try to be more aware of your biases.

As always — until next time, happy decision making!

“Good decisions don’t make life easy, but they do make it easier.” — Gary Cole

References

  1. How Many Decisions Do We Make Each Day?
  2. Decision Fatigue
  3. To Make Good Decisions, Don’t Use a Pros and Cons List
  4. Coaching for Leaders – How to Decide

Leave a comment