Debugging
- State the symptom precisely: expected, actual, environment, frequency, impact.
- Reproduce with the smallest deterministic case.
- Find the boundary where correct state becomes incorrect.
- Form ranked, falsifiable hypotheses.
- Change one variable and collect evidence.
- Fix the root cause and add a regression test.
- Verify nearby behavior and record the general lesson.
High-yield tactics
- Read the entire error and the first relevant stack frame.
- Compare working and failing inputs or environments.
- Use version history to narrow when behavior changed.
- Check assumptions at boundaries: parsing, time, encoding, nullability, concurrency, permissions, network, storage.
- Prefer observability over speculative edits.
Stop conditions
Do not call it fixed because the error disappeared once. Require a mechanism-level explanation and a repeatable verification.
Use Bug Investigation.