---
name: systematic-debugging
description: Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes
---

# 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. Symptom fixes are failure.

**Violating the letter of this process is violating the spirit of debugging.**

## The Iron Law

```
NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST
```

If you haven't completed Phase 1, you cannot propose fixes.

## When to Use

Use for ANY technical issue:

- Test failures
- Bugs in production
- Unexpected behavior
- Performance problems
- Build failures
- Integration issues

**Use this ESPECIALLY when:**

- Under time pressure (emergencies make guessing tempting)
- "Just one quick fix" seems obvious
- You've already tried multiple fixes
- Previous fix didn't work
- You don't fully understand the issue

**Don't skip when:**

- Issue seems simple (simple bugs have root causes too)
- You're in a hurry (rushing guarantees rework)

## The Four Phases

You MUST complete each phase before proceeding to the next.

### Phase 1: Root Cause Investigation

**BEFORE attempting ANY fix:**

1. **Read Error Messages Carefully**
   - Don't skip past errors or warnings
   - Read stack traces completely
   - Note line numbers, file paths, error codes

2. **Reproduce Consistently**
   - Can you trigger it reliably?
   - What are the exact steps?
   - If not reproducible → gather more data, don't guess

3. **Check Recent Changes**
   - What changed that could cause this?
   - Git diff, recent commits
   - New dependencies, config changes

4. **Gather Evidence in Multi-Component Systems**
   - Log what data enters/leaves each component boundary
   - Verify environment/config propagation
   - Check state at each layer

5. **Trace Data Flow**
   - Where does the bad value originate?
   - What called this with bad value?
   - Keep tracing up until you find the source
   - Fix at source, not at symptom

### Phase 2: Pattern Analysis

1. **Find Working Examples** — locate similar working code in same codebase
2. **Compare Against References** — read reference implementation completely
3. **Identify Differences** — list every difference, however small
4. **Understand Dependencies** — what does this component need?

### Phase 3: Hypothesis and Testing

1. **Form Single Hypothesis** — "I think X is the root cause because Y"
2. **Test Minimally** — smallest possible change to test
3. **Verify Before Continuing** — did it work? If not, form new hypothesis
4. **When You Don't Know** — admit uncertainty, research more

### Phase 4: Implementation

1. **Create Failing Test** — simplest reproduction first
2. **Implement Single Fix** — address root cause, ONE change at a time
3. **Verify Fix** — test passes? No regressions? Issue resolved?
4. **If Fix Doesn't Work** — STOP. If < 3 attempts, return to Phase 1. If ≥ 3, question the architecture.

## Red Flags — STOP and Follow Process

If you catch yourself thinking:

- "Quick fix for now, investigate later"
- "Just try changing X and see if it works"
- "Add multiple changes, run tests"
- "It's probably X, let me fix that"
- "I don't fully understand but this might work"

**ALL of these mean: STOP. Return to Phase 1.**

## 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 thrashing     |
| "Just try this first"                 | First fix sets the pattern. Do it right |
| "Multiple fixes at once saves time"   | Can't isolate what worked               |

## Quick Reference

| Phase             | Key Activities                        | Success Criteria            |
| ----------------- | ------------------------------------- | --------------------------- |
| 1. Root Cause     | Read errors, reproduce, check changes | Understand WHAT and WHY     |
| 2. Pattern        | Find working examples, compare        | Identify differences        |
| 3. Hypothesis     | Form theory, test minimally           | Confirmed or new hypothesis |
| 4. Implementation | Create test, fix, verify              | Bug resolved, tests pass    |
