Doubt-Driven Development
Overview
Confidence is not the same as correctness. Periodically step back and attack your own decisions with a fresh perspective before they become expensive to change.
When to Use
- Non-trivial architectural or design decisions
- Complex business logic or state machines
- Security-sensitive or data-integrity paths
- When the implementation has grown larger than originally expected
- Before finalizing a significant abstraction
Core Process
- Pause and restate the decision and its alternatives.
- Ask: "What would a skeptical staff engineer challenge here?"
- Explicitly list assumptions and failure modes.
- Consider the cost of being wrong vs. the cost of more investigation.
- Either strengthen the decision with evidence or choose a simpler/safer path.
- Document the key trade-off if it is non-obvious.
Useful Questions
- What is the simplest thing that could work?
- What happens under failure or partial failure?
- How hard will this be to change in 6 months?
- Are we solving a real problem or a hypothetical one?
- Is this abstraction earning its complexity?
Verification
- Major decisions have been stress-tested with at least one adversarial pass
- Key assumptions are written down
- Simpler alternatives were considered and rejected for clear reasons