<aside> <img src="/icons/knife-kitchen_gray.svg" alt="/icons/knife-kitchen_gray.svg" width="40px" />

Pick out the smallest, thinnest, shortest way to test end-to-end value and start there.

</aside>

<aside> <img src="/icons/potted-plant_gray.svg" alt="/icons/potted-plant_gray.svg" width="40px" />

Software is grown, not built – Linus Torvalds

</aside>

From Pragmatic Programmer book -> Tracer Bullets:

Tracer bullets are loaded at intervals alongside regular ammunition. When they're fired, their phosphorus ignites and leaves a pyrotechnic trail from the gun to whatever they hit. If the tracers are hitting the target, then so are the regular bullets. Soldiers use these tracer rounds to refine their aim: it's pragmatic, real-time feedback under actual conditions.

That same principle applies to projects, particularly when you're building something that hasn't been built before. We use the term tracer bullet development to visually illustrate the need for immediate feedback under actual conditions with a moving goal.

Like the gunners, you're trying to hit a target in the dark. Because your users have never seen a system like this before, their requirements may be vague. Because you may be using algorithms, techniques, languages, or libraries you aren't familiar with, you face a large number of unknowns. And because projects take time to complete, you can pretty much guarantee the environment you're working in will change before you're done.

The classic response is to specify the system to death. Produce reams of paper itemizing every requirement, tying down every unknown, and constraining the environment. Fire the gun using dead reckoning. One big calculation up front, then shoot and hope.

Pragmatic Programmers, however, tend to prefer using the software equivalent of tracer bullets.

To get the same effect in code, we look for something that gets us from a requirement to some aspect of the final system quickly, visibly, and repeatably.

https://learning.oreilly.com/library/view/the-pragmatic-programmer/9780135956977/f_0030.xhtml

https://learning.oreilly.com/library/view/the-pragmatic-programmer/9780135956977/f_0030.xhtml

...

Prototyping generates disposable code. Tracer code is lean but complete, and forms part of the skeleton of the final system. Think of prototyping as the reconnaissance and intelligence gathering that takes place before a single tracer bullet is fired.

...

The tracer code approach has many advantages:

Also See

References