root-cause-frameworks
Structured root-cause analysis for resolved incidents and recurring bugs.
Sibling of systematic-debugging (live
reproduction loop) and bug-analyzer (static
call-site analysis) — this skill takes the post-resolution "why did this
happen and how do we stop it recurring?" view.
When to use
- A resolved incident needs a structured cause investigation before
writing the post-mortem.
- A bug recurs and the team needs to understand the underlying system
condition, not just the symptom.
- Invoked directly or by
blameless-post-mortem
to populate the cause section.
Do NOT use when:
Procedure
Work through the three methods in order; return the best-supported result.
1. 5-Whys chain
Ask "Why did X happen?" iteratively, attaching evidence to each
link. Continue until the link is unfalsifiable, evidence runs out, or
you reach a systemic condition outside the team's control.
Rules:
- Each link must cite at least one piece of evidence (log line, metric,
test failure, code path, human observation). Label unverified links
explicitly as
[speculative].
- If a link branches into two independent causes, follow both — a
branching chain is common and valid.
- Stop a branch when: (a) the next Why has no available evidence, or
(b) the answer is outside the system boundary (e.g. "the cloud
provider had an outage").
2. Fishbone / Ishikawa (if chain stalls or branches widely)
When the 5-whys chain stalls before reaching a systemic cause, or
branches into more than three independent paths, map contributing
factors across six categories:
| Category |
Sample questions |
| People |
Knowledge gap, on-call fatigue, ambiguous ownership? |
| Process |
Missing review step, deploy gate skipped, alert threshold wrong? |
| Technology |
Library version, configuration drift, race condition, hardware limit? |
| Data |
Unexpected input shape, stale cache, missing validation, schema mismatch? |
| Environment |
Infra difference between environments, dependency version skew? |
| Communication |
Unclear spec, siloed knowledge, delayed escalation? |
List each identified factor as a bullet under its category. A factor
may appear in more than one category — that is evidence of a systemic
coupling worth naming.
3. Contributing-factors split
Classify every cause surfaced in steps 1–2 into exactly one bucket:
| Bucket |
Definition |
root |
The condition that, if absent, the incident would not have occurred. |
contributing |
A condition that increased likelihood or severity, but not sufficient alone. |
amplifying |
A condition that made recovery slower or harder once the incident started. |
coincidence |
Present at the time but causally unrelated. |
A well-formed analysis typically has one root cause and two to
four contributing causes. Multiple root entries indicate the chain
has not been traced far enough, or that the incident was a genuine
compound failure — label it explicitly.
Output
The output has three ordered sections:
- Why-chain — numbered chain, each link with evidence (or
[speculative] flag) and any branch markers.
- Cause taxonomy — each identified cause labelled
root / contributing / amplifying / coincidence, with a
one-sentence justification.
- Evidence gaps — explicit list of claims that could not be
verified and what evidence would resolve them. An empty list is
fine; omitting the section is not.
May invoke systematic-debugging or
bug-analyzer mid-procedure to gather
evidence for a specific hypothesis, then continue the analysis.
Do NOT
- Do NOT present a
[speculative] link as confirmed cause.
- Do NOT collapse multiple contributing factors into a single root
cause to produce a cleaner narrative.
- Do NOT invent evidence — if a log line is needed but unavailable,
name the gap.
- Do NOT reproduce the systematic-debugging reproduce → isolate → fix
loop; this skill assumes the bug is already understood or resolved.
Gotchas
- Single "root cause" is often an oversimplification — a compound
failure with one root and several contributing causes is the norm,
not an edge case.
- An unfalsifiable why-link (e.g. "we don't know") is a stop signal
for that branch; do not guess past it.
- Correlation ≠ causation — require a causal mechanism for every link,
not just temporal proximity.
See also
1---2name: root-cause-frameworks3description: Use when tracing the root cause of a resolved incident or recurring bug — 5-whys chain, fishbone categorisation, contributing-factors split — even if the user says 'why does this keep breaking?'.4---56# root-cause-frameworks78> Structured root-cause analysis for resolved incidents and recurring bugs.9> Sibling of [`systematic-debugging`](../systematic-debugging/SKILL.md) (live10> reproduction loop) and [`bug-analyzer`](../bug-analyzer/SKILL.md) (static11> call-site analysis) — this skill takes the post-resolution "why did this12> happen and how do we stop it recurring?" view.1314## When to use1516- A resolved incident needs a structured cause investigation before17 writing the post-mortem.18- A bug recurs and the team needs to understand the underlying system19 condition, not just the symptom.20- Invoked directly or by [`blameless-post-mortem`](../blameless-post-mortem/SKILL.md)21 to populate the cause section.2223Do NOT use when:2425- Actively debugging a failing test or unresolved crash — use26 [`systematic-debugging`](../systematic-debugging/SKILL.md) instead.27- The goal is to enumerate call-site impact of a change — use28 [`blast-radius-analyzer`](../blast-radius-analyzer/SKILL.md) instead.2930## Procedure3132Work through the three methods in order; return the best-supported result.3334### 1. 5-Whys chain3536Ask "Why did X happen?" iteratively, attaching **evidence** to each37link. Continue until the link is unfalsifiable, evidence runs out, or38you reach a systemic condition outside the team's control.3940Rules:4142- Each link must cite at least one piece of evidence (log line, metric,43 test failure, code path, human observation). Label unverified links44 explicitly as `[speculative]`.45- If a link branches into two independent causes, follow both — a46 branching chain is common and valid.47- Stop a branch when: (a) the next Why has no available evidence, or48 (b) the answer is outside the system boundary (e.g. "the cloud49 provider had an outage").5051### 2. Fishbone / Ishikawa (if chain stalls or branches widely)5253When the 5-whys chain stalls before reaching a systemic cause, or54branches into more than three independent paths, map contributing55factors across six categories:5657| Category | Sample questions |58|---|---|59| People | Knowledge gap, on-call fatigue, ambiguous ownership? |60| Process | Missing review step, deploy gate skipped, alert threshold wrong? |61| Technology | Library version, configuration drift, race condition, hardware limit? |62| Data | Unexpected input shape, stale cache, missing validation, schema mismatch? |63| Environment | Infra difference between environments, dependency version skew? |64| Communication | Unclear spec, siloed knowledge, delayed escalation? |6566List each identified factor as a bullet under its category. A factor67may appear in more than one category — that is evidence of a systemic68coupling worth naming.6970### 3. Contributing-factors split7172Classify every cause surfaced in steps 1–2 into exactly one bucket:7374| Bucket | Definition |75|---|---|76| `root` | The condition that, if absent, the incident would not have occurred. |77| `contributing` | A condition that increased likelihood or severity, but not sufficient alone. |78| `amplifying` | A condition that made recovery slower or harder once the incident started. |79| `coincidence` | Present at the time but causally unrelated. |8081A well-formed analysis typically has **one** root cause and two to82four contributing causes. Multiple `root` entries indicate the chain83has not been traced far enough, or that the incident was a genuine84compound failure — label it explicitly.8586## Output8788The output has three ordered sections:89901. **Why-chain** — numbered chain, each link with evidence (or91 `[speculative]` flag) and any branch markers.922. **Cause taxonomy** — each identified cause labelled93 `root` / `contributing` / `amplifying` / `coincidence`, with a94 one-sentence justification.953. **Evidence gaps** — explicit list of claims that could not be96 verified and what evidence would resolve them. An empty list is97 fine; omitting the section is not.9899May invoke [`systematic-debugging`](../systematic-debugging/SKILL.md) or100[`bug-analyzer`](../bug-analyzer/SKILL.md) mid-procedure to gather101evidence for a specific hypothesis, then continue the analysis.102103## Do NOT104105- Do NOT present a `[speculative]` link as confirmed cause.106- Do NOT collapse multiple contributing factors into a single root107 cause to produce a cleaner narrative.108- Do NOT invent evidence — if a log line is needed but unavailable,109 name the gap.110- Do NOT reproduce the systematic-debugging reproduce → isolate → fix111 loop; this skill assumes the bug is already understood or resolved.112113## Gotchas114115- Single "root cause" is often an oversimplification — a compound116 failure with one root and several contributing causes is the norm,117 not an edge case.118- An unfalsifiable why-link (e.g. "we don't know") is a stop signal119 for that branch; do not guess past it.120- Correlation ≠ causation — require a causal mechanism for every link,121 not just temporal proximity.122123## See also124125- [`blameless-post-mortem`](../blameless-post-mortem/SKILL.md) — invokes126 this skill for the cause section.127- [`systematic-debugging`](../systematic-debugging/SKILL.md) — live128 reproduction and fix loop.129- [`bug-analyzer`](../bug-analyzer/SKILL.md) — static call-site analysis.130- [`risk-officer`](../risk-officer/SKILL.md) — mitigation framing for131 corrective actions after the cause is established.