Measure one thousand times; cut once.
—ancient Chinese proverb
Design one thousand times; code once.
—modern software engineering proverb
Plan to throw one away; you will, anyhow.
—Frederick P. Brooks, Jr., The Mythical Man Month
The first solution a software engineer devises for a problem is rarely the best solution. During the process of designing a solution, we gain a much better understanding of the problem, making our first approach inferior to the one we would take if only we had a chance to start over. This is the rationale behind “planning to throw one away.” It is also the premise of prototyping, in which we create a partial or exploratory solution to a problem and tweak it until (1) we thoroughly ...