Decision Making Under Uncertainty: Lessons from Practice
The following is excerpted and adapted from my private notes during my time at Predikto (2014-2018), exploring how to make complex decisions under uncertainty in technical startups.
The Nature of Uncertain Decisions
Decision-making is a game of compromise. In simple cases, where information about a decision and its various outcomes is complete and available, finding the optimal path is straightforward. But these cases are boring. Let’s explore the more interesting cases where outcomes are uncertain or completely unknown, and the best choice cannot be known upfront.
Expected Values and Their Limitations
Consider a simple binary choice:
- Do a thing
- Do not do that thing
Let’s say doing the thing gives us an 80% chance of receiving $100, and a 20% chance of losing $40. If we don’t do it, we gain and lose nothing. This is “uncertain” because while we don’t know the exact outcome, we have a model to describe it.
The traditional probabilistic approach (Pascal’s) would calculate the expected value:
E[x] = 0.80 * 100 - 0.20 * 40 = 72
Over many iterations, this suggests we should “do the thing” since $72 > $0. But real-world decisions are rarely this simple.
The St. Petersburg Paradox
To understand why expected value alone is insufficient, let’s examine the famous St. Petersburg Paradox, proposed by Daniel Bernoulli in 1738. Imagine a casino game:
- A fair coin is tossed repeatedly
- The pot starts at $2 and doubles every time heads appears
- When tails appears, the game ends and you get the pot
- Question: What’s a fair price to play?
Using pure expected value:
E = (1/2 * 2) + (1/4 * 4) + (1/8 * 8) + (1/16 * 16) + ...
= 1 + 1 + 1 + 1 + ...
= ∞
This suggests you should pay any finite amount to play - clearly absurd! The paradox reveals that we need to consider:
- Finite resources
- Risk tolerance
- Utility (the same dollar amount means different things to different people)
Real-World Decision Trees
Real decisions are rarely binary and always have associated costs. Let’s examine a practical example: buying milk.
You have two options:
- Drive 10 minutes to a store you know has milk (100% certainty)
- Walk 5 minutes to a closer store that might have milk (80% certainty)
If the small store doesn’t have milk, you’d need to:
- Walk back home (5 minutes)
- Then drive to the certain store (10 minutes)
This creates expected costs:
E[Drive Direct] = 20 minutes (certain)
E[Try Small Store] = 14 minutes (expected)
min[Small Store] = 10 minutes
max[Small Store] = 30 minutes
But wait! What if you have a deadline? What if time has non-linear value? These factors create complex decision spaces where the “obvious” choice might not be optimal.
The Cost of Exploration in Startups
This framework has profound implications for technical startups in nascent markets. Consider the choice between:
- Building product in-house
- Using third-party tools/services
The uncertainty differs in each path:
- In-house: Higher certainty in control/flexibility, paid for in time/cost
- Third-party: Faster iteration but risk of having to revert
The key insight is that reversion cost increases with project maturity. A mature product is much more expensive to refactor than a prototype.
Making Decisions with Incomplete Information
Through simulation and tinkering, we can understand how different parameters affect outcomes:
If 50% of work can be salvaged when reverting from third-party:
- Stay in-house if probability of failure > 30%
If only 10% can be salvaged:
- In-house is better for all but the most certain third-party cases
If 90% can be salvaged:
- Third-party is better regardless of other factors
The relationship between these factors is highly non-linear and often counterintuitive.
A Better Way to Think About Uncertainty
Instead of starting with assumptions and projecting outcomes, work backwards:
- Start with desired outcomes
- Determine what assumptions would need to be true
- Evaluate the validity of those assumptions
For example, instead of asking:
“What’s the probability the third-party vendor will fail?”
Ask:
“Can we reuse more than 50% of their work if they do fail?”
Or better yet:
“How much of the work would need to be re-usable for this to still make sense?”
The Startup Context
Technical startups in nascent markets face unique challenges:
- Customer desires are uncertain
- Technical feasibility is uncertain
- Task scoping is uncertain
- Each option has non-zero exploration cost
The real key here is to change your mindset from trying to eliminte uncertainty, or predict the future, to instead understanding the sttructure of the problems you’re working through, and back into what the certainty would have to be to move forward. This is a much easier position to decide from.
At some point, you have to make a bet. The goal isn’t to eliminate uncertainty - that’s impossible. The goal is to understand the bet you’re making and structure your organization to be resilient to different outcomes.
Note: This post adapts mathematical concepts and decision trees into a more accessible format. The original analysis included some cool graphs and simulations using a project called petersburg I had released on github. I don’t have the images from this handy, but will try to dig them up and add them here if I can.