Root Cause Analysis
You are performing systematic root cause analysis to find the true source of a bug. Do not apply fixes until you understand WHY the bug exists.
Core Principle
Never fix a symptom. Always find and fix the root cause.
The Five Whys Method
Ask "Why?" repeatedly to drill down to the root cause:
- Why did the API return an error? → The database query failed
- Why did the database query fail? → The connection pool was exhausted
- Why was the pool exhausted? → ROOT CAUSE: Missing
finally block to close connections
Investigation Phases
Phase 1: Reproduce the Bug
Before investigating:
- Reproduce consistently - If you can't reproduce it, you can't verify a fix
- Document reproduction steps - Exact sequence of actions
- Note environment details - OS, versions, configuration
- Identify minimal reproduction - Smallest case that shows the bug
Questions to answer:
- Does it happen every time or intermittently?
- Does it happen in all environments?
- When did it start happening? (recent changes)
Phase 2: Gather Evidence
Collect information before forming theories:
- Error messages and stack traces
- Log files (application, system, database)
- Recent code changes (git log, blame)
- User reports and reproduction steps
- Monitoring data (metrics, APM)
- Related issues (search issue tracker)
Do NOT:
- Make changes while gathering evidence
- Assume you know the cause without evidence
- Ignore related symptoms
Phase 3: Form Hypotheses
Based on evidence, create ranked hypotheses:
| Priority |
Hypothesis |
Evidence |
Test Plan |
| 1 |
Connection leak in UserService |
Stack trace shows connection pool |
Add logging, check usage |
| 2 |
Query timeout too short |
Occurs under load |
Test with longer timeout |
| 3 |
Database server overload |
Correlates with peak hours |
Check DB metrics |
For each hypothesis:
- What evidence supports it?
- What evidence contradicts it?
- How can we test it?
Phase 4: Test Hypotheses
Test each hypothesis systematically:
- Start with highest probability
- Design a definitive test - Should clearly confirm or reject
- Make ONE change at a time
- Document results
If hypothesis is rejected:
- Cross it off the list
- Re-evaluate remaining hypotheses
- Consider if new evidence suggests new hypotheses
Phase 5: Verify Root Cause
Before declaring root cause found:
Common Root Cause Categories
- Code Defects: logic errors, boundary conditions, race conditions, resource leaks, null/undefined handling
- Design Issues: missing error handling, inadequate validation, poor state management, coupling
- Environment: configuration errors, resource constraints, version mismatches, network issues
- Data Issues: invalid input, data corruption, schema mismatches, encoding problems
Evidence Collection Commands
# Recent changes to relevant files
git log --oneline -20 -- path/to/file
# Who changed this line
git blame path/to/file
# Changes since last working version
git diff v1.2.3..HEAD -- src/
# Search for related error handling
grep -r "catch\|error\|throw" --include="*.ts" src/
Red Flags - You Haven't Found Root Cause
- "I'm not sure why, but this fix works"
- "The bug went away after I restarted"
- "I added a check to prevent this case"
- "It's probably a race condition somewhere"
These suggest symptom treatment, not root cause resolution.
Documentation Template
When root cause is found, document:
## Bug: [Description]
### Root Cause
[Clear explanation of why the bug occurred]
### Evidence
- [Evidence 1]
- [Evidence 2]
### Causal Chain
1. [Initial trigger]
2. [Intermediate cause]
3. [Root cause]
4. [Observed symptom]
### Fix
[Description of the fix and why it addresses root cause]
### Prevention
[How to prevent similar issues in the future]
Integration with Other Skills
After finding root cause:
- Use testing/red-green-refactor to write a test that exposes the bug
- Use planning/verification-gates to validate the fix
- Consider collaboration/structured-review for complex fixes
1---2name: root-cause-analysis3description: Performs systematic root cause analysis to identify the true source of bugs, errors, and unexpected behavior through structured investigation phases — not just treating symptoms. Use when a user reports a bug, crash, error, or broken behavior and needs to debug, troubleshoot, or investigate why something is not working; especially for complex or intermittent issues across multiple components. Applies the Five Whys method, hypothesis-driven testing, stack trace analysis, git blame/log evidence gathering, and causal chain documentation to isolate and confirm root causes before applying any fix.4---5
6# Root Cause Analysis
7
8You are performing systematic root cause analysis to find the true source of a bug. Do not apply fixes until you understand WHY the bug exists.
9
10## Core Principle
11
12**Never fix a symptom. Always find and fix the root cause.**
13
14## The Five Whys Method
15
16Ask "Why?" repeatedly to drill down to the root cause:
17
181. **Why** did the API return an error? → The database query failed
192. **Why** did the database query fail? → The connection pool was exhausted
203. **Why** was the pool exhausted? → **ROOT CAUSE:** Missing `finally` block to close connections
21
22## Investigation Phases
23
24### Phase 1: Reproduce the Bug
25
26Before investigating:
27
281. **Reproduce consistently** - If you can't reproduce it, you can't verify a fix
292. **Document reproduction steps** - Exact sequence of actions
303. **Note environment details** - OS, versions, configuration
314. **Identify minimal reproduction** - Smallest case that shows the bug
32
33Questions to answer:
34- Does it happen every time or intermittently?
35- Does it happen in all environments?
36- When did it start happening? (recent changes)
37
38### Phase 2: Gather Evidence
39
40Collect information before forming theories:
41
42- Error messages and stack traces
43- Log files (application, system, database)
44- Recent code changes (git log, blame)
45- User reports and reproduction steps
46- Monitoring data (metrics, APM)
47- Related issues (search issue tracker)
48
49Do NOT:
50- Make changes while gathering evidence
51- Assume you know the cause without evidence
52- Ignore related symptoms
53
54### Phase 3: Form Hypotheses
55
56Based on evidence, create ranked hypotheses:
57
58| Priority | Hypothesis | Evidence | Test Plan |
59|----------|------------|----------|-----------|
60| 1 | Connection leak in UserService | Stack trace shows connection pool | Add logging, check usage |
61| 2 | Query timeout too short | Occurs under load | Test with longer timeout |
62| 3 | Database server overload | Correlates with peak hours | Check DB metrics |
63
64For each hypothesis:
65- What evidence supports it?
66- What evidence contradicts it?
67- How can we test it?
68
69### Phase 4: Test Hypotheses
70
71Test each hypothesis systematically:
72
731. **Start with highest probability**
742. **Design a definitive test** - Should clearly confirm or reject
753. **Make ONE change at a time**
764. **Document results**
77
78If hypothesis is rejected:
79- Cross it off the list
80- Re-evaluate remaining hypotheses
81- Consider if new evidence suggests new hypotheses
82
83### Phase 5: Verify Root Cause
84
85Before declaring root cause found:
86
87- [ ] Can you explain the full causal chain?
88- [ ] Does fixing it consistently prevent the bug?
89- [ ] Does it explain ALL observed symptoms?
90- [ ] Is there nothing earlier in the chain that could be fixed?
91
92## Common Root Cause Categories
93
94- **Code Defects:** logic errors, boundary conditions, race conditions, resource leaks, null/undefined handling
95- **Design Issues:** missing error handling, inadequate validation, poor state management, coupling
96- **Environment:** configuration errors, resource constraints, version mismatches, network issues
97- **Data Issues:** invalid input, data corruption, schema mismatches, encoding problems
98
99## Evidence Collection Commands
100
101```bash
102# Recent changes to relevant files
103git log --oneline -20 -- path/to/file
104
105# Who changed this line
106git blame path/to/file
107
108# Changes since last working version
109git diff v1.2.3..HEAD -- src/
110
111# Search for related error handling
112grep -r "catch\|error\|throw" --include="*.ts" src/
113```
114
115## Red Flags - You Haven't Found Root Cause
116
117- "I'm not sure why, but this fix works"
118- "The bug went away after I restarted"
119- "I added a check to prevent this case"
120- "It's probably a race condition somewhere"
121
122These suggest symptom treatment, not root cause resolution.
123
124## Documentation Template
125
126When root cause is found, document:
127
128```markdown
129## Bug: [Description]
130
131### Root Cause
132[Clear explanation of why the bug occurred]
133
134### Evidence
135- [Evidence 1]
136- [Evidence 2]
137
138### Causal Chain
1391. [Initial trigger]
1402. [Intermediate cause]
1413. [Root cause]
1424. [Observed symptom]
143
144### Fix
145[Description of the fix and why it addresses root cause]
146
147### Prevention
148[How to prevent similar issues in the future]
149```
150
151## Integration with Other Skills
152
153After finding root cause:
154- Use **testing/red-green-refactor** to write a test that exposes the bug
155- Use **planning/verification-gates** to validate the fix
156- Consider **collaboration/structured-review** for complex fixes