Cover of The Pragmatic Programmer by Andrew Hunt, David Thomas - Business and Economics Book

From "The Pragmatic Programmer"

Author: Andrew Hunt, David Thomas
Publisher: Addison-Wesley Professional
Year: 1999
Category: Computers

🎧 Free Preview Complete

You've listened to your free 10-minute preview.
Sign up free to continue listening to the full summary.

🎧 Listen to Summary

Free 10-min Preview
0:00
Speed:
10:00 free remaining
Chapter 2: A Pragmatic Approach
Key Insight 5 from this chapter

Tracer Bullets

Key Insight

In software development, successfully hitting a moving target within a complex and dynamic environment is a common challenge. The concept of 'tracer bullet development' draws an analogy from military tracer ammunition, which illuminates a bullet's path from gun to target, providing immediate, real-time feedback for adjusting aim. Similarly, this approach emphasizes obtaining immediate feedback under actual conditions for projects where requirements are vague, technologies are unfamiliar, and the environment is guaranteed to change. Instead of extensively 'specifying the system to death' with upfront calculations and mere hope, pragmatic programmers favor the software equivalent: rapidly iterating to pinpoint the target.

Tracer bullets operate quickly, visibly, and repeatably within the actual operating environment. In code, this means identifying critical requirements and high-risk areas, then prioritizing development to code these first. The 'first tracer bullet' might simply involve creating a 'hello world' project to confirm compilation and execution. Subsequent tracers involve building skeletons of key features that exercise architectural layers end-to-end, implementing only the necessary core functionality across all components, for example, a simple query through a client-server database marketing project. Importantly, tracer code is not disposable like prototypes; it is production-quality, fully checked, documented, and forms part of the final system's skeleton, gradually being fleshed out with full functionality once the end-to-end connection is confirmed and refined.

Tracer bullet development offers several advantages: users observe working progress early, increasing their engagement and providing crucial feedback on target alignment. Developers construct a solid architectural structure, fostering consistency and productivity. It creates an integration platform for continuous, small-scale integration, making debugging faster and more accurate than 'big-bang' integration. Demonstrations are always feasible, and progress is more easily measurable in terms of completed use cases, avoiding prolonged '95% complete' statuses. If initial attempts miss the target, the lean nature of tracer code means it has low inertia, allowing adjustments to be made quickly and cheaply. This differs from prototyping, which generates disposable code to explore specific aspects, for example, UI or algorithms, and is discarded after lessons are learned. Tracer code, by contrast, is lean but complete, forming the permanent framework of the final system, akin to reconnaissance preceding the firing of a tracer bullet.

📚 Continue Your Learning Journey — No Payment Required

Access the complete The Pragmatic Programmer summary with audio narration, key takeaways, and actionable insights from Andrew Hunt, David Thomas.