Five Whys for engineers, done right

How to run a 5 Whys analysis for production incidents without stopping too early or descending into infinite regress. Includes a worked engineering example.

5 Whys comes from Toyota's manufacturing floor: ask "why" iteratively until you reach a process defect rather than a symptom. For software incidents it's the most common root-cause framework on earth โ€” and also the most commonly botched.

The mechanics

Start from the customer-visible failure, then chase contributing conditions, not single points of guilt:

# SEV-2: checkout latency spike

Why 1? Checkout API timed out under peak load.
Why 2? Connection pool exhausted by a slow downstream call.
Why 3? v41 removed an explicit HTTP timeout.
Why 4? Config schema allowed deploying a client without timeouts.
Why 5? No CI check validates timeout presence โ€” no systemic guardrail exists.

Stop condition: when the answer describes something the system lets happen repeatedly. If a chain ends at "the engineer forgot", you've stopped early โ€” add one more why: what made forgetting easy, silent, and cheap?

Three failure modes

From whys to actions

Each terminal "why" maps to typed action items โ€” CI validation (prevent), pool-saturation alerting (detect), a rollback runbook (mitigate). If your five whys don't naturally spawn at least three distinct guardrails, the chains were probably symptoms of each other rather than branches.

Generating these chains mechanically keeps meetings shorter and documents consistent โ€” see how our generator drafts hedged 5-Whys sections directly from timelines.

Skip the blank page

Paste your incident timeline and get this exact structure filled out in ~90 seconds.

Generate a postmortem โ€” free โ†’

Related reading