A chronological reconstruction of the event with timestamps, signals, decisions and reactions is available.
Root Cause Analysis
Prerequisite
What needs to be finished first
A culture and format of blameless review are established so systemic causes instead of people are addressed.
Preparation
What needs to be ready before start
Whiteboard or digital board with RCA template (Problem, Symptoms, Hypotheses, Data, Causes, Actions); logs, metrics, configuration states; postmortem template; method tools such as 5 Whys, Fishbone, Fault Tree for selection.
One facilitator with postmortem experience; 4-8 people with direct system contact from development, ops, support; one scribe; for larger incidents additionally one neutral investigator.
Incident timeline; relevant logs and metrics; available postmortems of similar incidents; symptom description as 1-2 sentence statement; affected customers or systems.
2-4 h for initial RCA, then follow-up sessions depending on complexity
Symptom at top of board as one sentence. List available methods (5 Whys for linear causality, Fishbone for broad hypothesis branching, Fault Tree for safety-critical systems). Postmortem template with sections Problem, Impact, Timeline, Root Cause, Countermeasures, Lessons Learned.
Core question
The one question this method answers
Which systemic causes caused or enabled the problem, and which countermeasures prevent recurrence instead of only treating symptoms?
Flow
Marker: Phase
| Step | Duration | Action | Hint |
|---|---|---|---|
1Phase 1: Specify problem | 20-30 min | Describe symptom concretely: what, when, where, how often, which effect. Quantify impact (users, revenue, data integrity). Delimit against similar problems. | If problem statement already contains causes ("because X did not work"), that belongs in hypothesis phase. Clean symptom is basis for unbiased search. |
2Phase 2: Hypothesis fan | 30-45 min | Brainstorm possible causes across relevant categories (for example code, configuration, infrastructure, data, process, human). Fishbone or mind map as structure. Separate assumptions and evidenced causes. | If only two or three hypotheses appear, search is too narrow. Force at least one hypothesis per category, even if unlikely. Avoid confirmation bias. |
3Phase 3: Test hypotheses | 45-90 min | Find data per hypothesis: logs, metrics, config diffs, witnesses. Verify or falsify. Remaining plausible hypotheses are candidates for Root Cause. | If no data source can be named per hypothesis, it is speculative. Hypothesis test is core of method. "Sounds plausible" is no verification. |
4Phase 4: Set Root Cause(s) | 30-45 min | Identify Root Cause(s) from verified hypotheses. Often multiple causes plus triggering factor. For every cause check: controllable, systemic or individual case. | A single Root Cause is suspicious. Complex systems usually have multiple interacting causes. Common endpoints "human error" are not Root Cause, but indicator of missing safety net. |
5Phase 5: Countermeasures and Lessons Learned | 30-45 min | Countermeasure per Root Cause with owner and date. Separate symptom fix (hotfix), recurrence prevention (structural), detection (monitoring). Document Lessons Learned. | If all countermeasures are monitoring or training, structural change is missing. Per Root Cause at least one action that prevents recurrence, not only improves visibility. |
Artifact
What comes out at the end
Postmortem document with sections Problem, Impact, Timeline, Hypotheses, checked data, Root Cause(s), countermeasures with owner and date, Lessons Learned. Reference logs, metrics and optional supplementary methods (5 Whys, Fishbone) as appendix.
Date, incident ID, author and decider in header. Append later findings as update section at end, do not overwrite. If Root Cause later proves false, status to `revised`, keep original analysis.
- Markdown in repo under docs/postmortems/<date>-<incident-id>.md
- Confluence page in postmortem space
- Notion database with filter by service and date
- Linear or Jira issue with linked postmortem
root-cause-analysis-working-template.md
Compact working template for Root Cause Analysis with context, input, output artifacts, and next step.
Root Cause Analysis Working Template
Goal
Structured analysis to find the effective causes of a problem behind its symptoms.
Context
When and for what do we use this method?
Input
Which data, observations, decisions, or materials are available?
Execution
Short notes along the runsheet.
Output artifacts
- Problem Statement:
- Cause Hypotheses:
- Confirmed Causes:
- Action Plan:
Assumptions and open questions
- ...
Decision / Next step
Owner, date, and success signal.
Example output
Concrete filled scenario, fictional example
root-cause-analysis-beispiel.md
Concrete filled scenario, fictional example
RCA - Incident 2026-05-14-001 Order API 500 Spike
Symptom: On 2026-05-14 09:12-09:47 UTC, Order API returned HTTP 500 for 8% of checkout requests. Impact: 1,247 failed orders, estimated revenue loss 18,200 EUR.
Checked hypotheses
- Hypothesis fan with Fishbone: 11 hypotheses, categorized by code, config, infrastructure, data, process.
- Verified: connection-pool exhaustion (master DB), triggered by batch job without own pool quota.
- Falsified: hypothesis "hardware replica defect" (replica showed symptoms only after stabilization, not causal).
Root Causes
- Structural: batch and online traffic share same connection pool without quota separation.
- Process: code review for batch workloads contained no pool check, reviewer missed implication.
- Detection: pool exhaustion not alerted, only 500 rate.
Countermeasures
- Dedicated connection pool for batch (structural). Owner @anna, by 2026-05-21.
- Checklist for batch jobs in CODEOWNERS review (process). Owner @ben, by 2026-05-28.
- Pool saturation alert in Datadog (detection). Owner @sabine, by 2026-05-23.
Lessons Learned
Shared-resource architecture without quota separation is a class of risks; similar patterns exist in worker threads and cache slots, audit scheduled for 2026-06-30.
Pitfalls
Recognize symptoms and steer against them
Personification as Root Cause
RCA ends at "engineer did not check", no systemic cause, no structural countermeasure.
If person appears as cause, ask further: which safety net was missing. Person is symptom, missing checks or tools are Root Cause.
Single Root Cause
Complex incident reduced to one cause, other contributing factors disappear.
List factors explicitly: triggering, contributing, enabling. In complex systems, usually 3-5 factors are involved, not one.
Hypotheses without data
Hypotheses accepted or rejected by plausibility, no logs or metrics consulted.
Name at least one data source per hypothesis. If none available, mark hypothesis as unverified and plan data collection spike, do not speculate.
Countermeasure addresses symptom
Actions are monitoring, alert or hotfix, no structural change.
Mandatory per Root Cause: one structural countermeasure (architecture, process, tool). Detection separate. Hotfix only short-term stabilization with follow-up.
Confirmation bias
First plausible hypothesis becomes truth, others checked superficially.
Assign devil's advocate or second person for parallel hypothesis fan. Document falsification attempts explicitly, not only verifications.
No follow-up tracking
Countermeasures documented but not implemented, same incident repeats months later.
Countermeasures as issues in ticket system with owner and date. Check status every 2 weeks. Repeat incident triggers RCA review, not new RCA.
Stop criteria
Done signals checkable in under a minute
Finished the runsheet?
Go to the profile for purpose, similar methods, and sources or continue to the next method in the catalog.