Skip to content
Latticework
Esc
Try
No. 008Ways of Thinking

Probabilistic Thinking

Reason in likelihoods and distributions, not certainties and averages.

The average can look fine while the tail of the distribution, where the worst cases live, is far slower.

To an executive

Averages hide the rare bad days that upset customers and cost money. Thinking in likelihoods gives a truer sense of risk than a single reassuring number.

To an engineer

Look at percentiles and tail behaviour, not averages. Remember that a request fanning out to many servers feels the slowest one, so rare slowness becomes common.

The idea

The world rarely gives binary answers. Probabilistic thinking means estimating likelihoods, updating them as evidence arrives, and paying close attention to the shape of a distribution, not just its middle.

Systems live in the tails: the 99th-percentile latency, the rare race condition, the correlated failure of two zones at once. Averages hide exactly the behaviour that pages you at night.

Jeffrey Dean and Luiz André Barroso showed why this matters more at scale. When one user request fans out to many servers, it is only as fast as the slowest of them, so occasional slowness on each server becomes common slowness for users.

Why it works

Averages hide what users feel. A mean latency of 120ms can sit alongside a long tail of requests that take seconds. The users in the tail are real, and often the ones doing the most.

Rare events become certain at volume. A one-in-a-million failure happens many times a day in a system serving millions of requests.

Ranges are more honest than points. Estimates expressed as ranges with a confidence level carry their uncertainty with them, so decisions can allow for it.

Where it applies

  • Service level objectives, which should be set on percentiles, not averages.
  • Capacity planning, which must allow for peaks and variance, not mean load.
  • Risk assessment, expressed as likelihood and impact rather than "safe" or "unsafe".
  • Estimates and plans, given as ranges with stated confidence.

How to apply

  1. Look at the distribution. Plot latency, load or duration as a histogram or percentiles before quoting a single number.
  2. Set targets on percentiles (p95, p99) that reflect what the slowest meaningful users experience.
  3. Express risks as likelihood and impact, and update them as incidents and tests provide evidence.
  4. Give estimates as ranges with a confidence level, and say what would change them.

Example scenario

Average checkout latency was 120ms, so the team declared performance fine. When the architect asked for percentiles, the p99 was nearly five seconds. Slicing by basket size showed the slow requests clustered on large baskets, which made more calls to pricing and stock services.

The team set its objective on p99 rather than the mean, added timeouts and parallel calls to the slowest dependencies, and tracked the tail on the main dashboard. The average barely moved, but the slowest checkouts became several times faster.

Questions to ask

  • What does the tail look like, not just the average?
  • How confident are we, and what evidence would change our minds?
  • What are the likelihood and the impact of the worst realistic case?

When not to use it

  • Hard limits and invariants, such as "balances must never go negative", which need guarantees, not probabilities.
  • Small, one-off choices, where the effort of estimating distributions outweighs the decision.

How it misleads you

False precision: attaching exact probabilities to genuine unknowns makes guesses look like measurements. Use ranges and be honest about uncertainty. Be wary too of models that assume failures are independent; in real systems they often happen together, which fattens the tail you were trying to measure.

Further reading

Last reviewed · Suggest an improvement