Software Craftsmanship & Practice

Tracer Bullets & Prototyping

Two techniques get conflated under "build something quick to find out" — a tracer bullet is real, thin, end-to-end code you keep and grow; a prototype is throwaway code built purely to answer one uncertain question, then discarded.
  • Tracer bullet: a thin slice through every layer of the real system, using real (if minimal) code — validates the whole pipeline works together early
  • Prototype: quick, disposable code built to answer one specific risky question ("will this rendering approach even work?"), explicitly thrown away afterward
  • Tracer bullets are grown into the finished feature; prototypes are deleted, not "cleaned up into production"
  • Choose a tracer bullet to de-risk integration across the whole stack; choose a prototype to de-risk one uncertain technique or idea cheaply
  • The failure mode for both is the same promise broken in different directions: skipping the tracer bullet (integration surprises discovered late) or keeping the prototype (throwaway quality shipped to production)
Tracer bullet vs. prototype
Tracer bulletPrototype
GoalProve the whole pipeline connects, end to endAnswer one specific uncertain question
Code qualityReal, if minimal — production code that will growDeliberately disposable — not held to production standards
FateKept, extended into the finished featureThrown away once the question is answered
Use whenYou need early, visible progress across all layersYou need to de-risk one uncertain piece cheaply

A tracer bullet for a new feature might be: UI button → API endpoint → business logic stub → database write, all wired together and deployed, doing the absolute minimum at each layer — but doing it for real. It answers "does this architecture actually fit together" days before the feature is feature-complete, and every layer it touches then gets filled in incrementally, in place. This also doubles as a communication tool: stakeholders can see something running end-to-end almost immediately, long before the polish is done (see Requirements And Communication).

Sources
  • The Pragmatic Programmer (20th Anniversary ed.)Ch. 4 — Pragmatic Paranoia (Tracer Bullets)