Systematic Debugging
Overview
Random fixes waste time and create new bugs. Quick patches mask underlying issues.
Core principle: ALWAYS find root cause before attempting fixes.
When to Use
Use for ANY technical issue: test failures, unexpected behavior, pipeline errors, build failures, Galaxy workflow errors, notebook exceptions, environment issues.
Use ESPECIALLY when:
- "Just one quick fix" seems obvious
- You've already tried multiple fixes
- Previous fix didn't work
- You don't fully understand the issue
Supporting Files
- root-cause-tracing.md - Trace bugs backward through call chain to find the original trigger. Instrumentation techniques, stack trace analysis.
- defense-in-depth.md - Add validation at multiple layers after finding root cause. Entry point, business logic, environment guards, debug logging.
The Four Phases
Complete each phase before proceeding to the next.
Phase 1: Root Cause Investigation
BEFORE attempting ANY fix:
Read error messages carefully
- Don't skip past errors or warnings — they often contain the solution
- Read stack traces completely
- Note line numbers, file paths, error codes
Reproduce consistently
- Can you trigger it reliably? What are the exact steps?
- If not reproducible, gather more data — don't guess
Check recent changes
- Git diff, recent commits, new dependencies
- Config changes, environmental differences
Gather evidence in multi-component systems
- For pipelines (Galaxy workflow → tool → data), log what enters and exits each component
- Run once with diagnostics to see WHERE it breaks
- Then investigate that specific component
Trace data flow
- Where does the bad value originate? (See root-cause-tracing.md)
- Keep tracing up the call chain until you find the source
- Fix at source, not at symptom
Phase 2: Pattern Analysis
- Find working examples — similar working code in same codebase
- Compare against references — read reference implementation completely, don't skim
- Identify differences — list every difference, however small
- Understand dependencies — settings, config, environment, assumptions
Phase 3: Hypothesis and Testing
- Form single hypothesis — "I think X is the root cause because Y"
- Test minimally — smallest possible change, one variable at a time
- Verify — did it work? If not, form NEW hypothesis. Don't pile fixes on top.
- When you don't know — say so. Don't pretend. Research more.
Phase 4: Implementation
- Create failing test/reproduction — simplest possible, automated if possible
- Implement single fix — address root cause, ONE change, no "while I'm here" improvements
- Verify fix — test passes? No other tests broken? Issue resolved?
- If fix doesn't work:
- Count fixes attempted
- If < 3: return to Phase 1, re-analyze with new information
- If >= 3: STOP — question the architecture (see below)
When 3+ Fixes Fail
Pattern indicating architectural problem:
- Each fix reveals new issues in different places
- Fixes require "massive refactoring"
- Each fix creates new symptoms elsewhere
STOP and discuss with the user before attempting more fixes. This is not a failed hypothesis — it's a wrong approach.
Red Flags — STOP and Return to Phase 1
If you catch yourself thinking:
- "Quick fix for now, investigate later"
- "Just try changing X and see if it works"
- "It's probably X, let me fix that"
- "I don't fully understand but this might work"
- Proposing solutions before tracing data flow
- "One more fix attempt" when already tried 2+
Common Rationalizations
| Excuse |
Reality |
| "Issue is simple, don't need process" |
Simple issues have root causes too |
| "Emergency, no time for process" |
Systematic is FASTER than guess-and-check |
| "Just try this first, then investigate" |
First fix sets the pattern. Do it right. |
| "Multiple fixes at once saves time" |
Can't isolate what worked. Causes new bugs. |
| "I see the problem, let me fix it" |
Seeing symptoms != understanding root cause |
Quick Reference
| Phase |
Key Activities |
Done when |
| 1. Root Cause |
Read errors, reproduce, check changes, trace data |
Understand WHAT and WHY |
| 2. Pattern |
Find working examples, compare |
Differences identified |
| 3. Hypothesis |
Form theory, test minimally |
Confirmed or new hypothesis |
| 4. Implementation |
Create test, fix, verify |
Bug resolved, tests pass |
Attribution
Adapted from obra/superpowers systematic-debugging skill.
1---
2name: systematic-debugging
3description: Structured 4-phase debugging methodology. Use when encountering any bug, test failure, unexpected behavior, or pipeline error — before proposing fixes. Enforces root cause investigation first.
4version: 1.0.0
5allowed-tools: Read, Grep, Glob, Bash
6---
7
8# Systematic Debugging
9
10## Overview
11
12Random fixes waste time and create new bugs. Quick patches mask underlying issues.
13
14**Core principle:** ALWAYS find root cause before attempting fixes.
15
16## When to Use
17
18Use for ANY technical issue: test failures, unexpected behavior, pipeline errors, build failures, Galaxy workflow errors, notebook exceptions, environment issues.
19
20**Use ESPECIALLY when:**
21- "Just one quick fix" seems obvious
22- You've already tried multiple fixes
23- Previous fix didn't work
24- You don't fully understand the issue
25
26## Supporting Files
27
28- **[root-cause-tracing.md](root-cause-tracing.md)** - Trace bugs backward through call chain to find the original trigger. Instrumentation techniques, stack trace analysis.
29- **[defense-in-depth.md](defense-in-depth.md)** - Add validation at multiple layers after finding root cause. Entry point, business logic, environment guards, debug logging.
30
31## The Four Phases
32
33Complete each phase before proceeding to the next.
34
35### Phase 1: Root Cause Investigation
36
37**BEFORE attempting ANY fix:**
38
391. **Read error messages carefully**
40 - Don't skip past errors or warnings — they often contain the solution
41 - Read stack traces completely
42 - Note line numbers, file paths, error codes
43
442. **Reproduce consistently**
45 - Can you trigger it reliably? What are the exact steps?
46 - If not reproducible, gather more data — don't guess
47
483. **Check recent changes**
49 - Git diff, recent commits, new dependencies
50 - Config changes, environmental differences
51
524. **Gather evidence in multi-component systems**
53 - For pipelines (Galaxy workflow → tool → data), log what enters and exits each component
54 - Run once with diagnostics to see WHERE it breaks
55 - Then investigate that specific component
56
575. **Trace data flow**
58 - Where does the bad value originate? (See [root-cause-tracing.md](root-cause-tracing.md))
59 - Keep tracing up the call chain until you find the source
60 - Fix at source, not at symptom
61
62### Phase 2: Pattern Analysis
63
641. **Find working examples** — similar working code in same codebase
652. **Compare against references** — read reference implementation completely, don't skim
663. **Identify differences** — list every difference, however small
674. **Understand dependencies** — settings, config, environment, assumptions
68
69### Phase 3: Hypothesis and Testing
70
711. **Form single hypothesis** — "I think X is the root cause because Y"
722. **Test minimally** — smallest possible change, one variable at a time
733. **Verify** — did it work? If not, form NEW hypothesis. Don't pile fixes on top.
744. **When you don't know** — say so. Don't pretend. Research more.
75
76### Phase 4: Implementation
77
781. **Create failing test/reproduction** — simplest possible, automated if possible
792. **Implement single fix** — address root cause, ONE change, no "while I'm here" improvements
803. **Verify fix** — test passes? No other tests broken? Issue resolved?
814. **If fix doesn't work:**
82 - Count fixes attempted
83 - If < 3: return to Phase 1, re-analyze with new information
84 - **If >= 3: STOP — question the architecture** (see below)
85
86### When 3+ Fixes Fail
87
88Pattern indicating architectural problem:
89- Each fix reveals new issues in different places
90- Fixes require "massive refactoring"
91- Each fix creates new symptoms elsewhere
92
93**STOP and discuss with the user before attempting more fixes.** This is not a failed hypothesis — it's a wrong approach.
94
95## Red Flags — STOP and Return to Phase 1
96
97If you catch yourself thinking:
98- "Quick fix for now, investigate later"
99- "Just try changing X and see if it works"
100- "It's probably X, let me fix that"
101- "I don't fully understand but this might work"
102- Proposing solutions before tracing data flow
103- "One more fix attempt" when already tried 2+
104
105## Common Rationalizations
106
107| Excuse | Reality |
108|--------|---------|
109| "Issue is simple, don't need process" | Simple issues have root causes too |
110| "Emergency, no time for process" | Systematic is FASTER than guess-and-check |
111| "Just try this first, then investigate" | First fix sets the pattern. Do it right. |
112| "Multiple fixes at once saves time" | Can't isolate what worked. Causes new bugs. |
113| "I see the problem, let me fix it" | Seeing symptoms != understanding root cause |
114
115## Quick Reference
116
117| Phase | Key Activities | Done when |
118|-------|---------------|-----------|
119| 1. Root Cause | Read errors, reproduce, check changes, trace data | Understand WHAT and WHY |
120| 2. Pattern | Find working examples, compare | Differences identified |
121| 3. Hypothesis | Form theory, test minimally | Confirmed or new hypothesis |
122| 4. Implementation | Create test, fix, verify | Bug resolved, tests pass |
123
124## Attribution
125
126Adapted from [obra/superpowers](https://github.com/obra/superpowers/) systematic-debugging skill.