Fred Brooks’ rule, “design one to throw away.”
Fred Brooks wrote a marvelous introspective early in the days of software engineering, The Mythical Man-Month. In that text he shares many observations, among them this: the first version of any software system will be of such low quality as to deserve to be discarded. While perhaps not universally true, this observation is certainly not one I often hear software engineers dispute. The first version is nearly always a disaster.
I find this observation fascinating. Sometimes I think it singular in that I don’t see artists painting two portraits, discarding the first; I don’t see architects whose first building is deleterious but whose second is lovely; why can’t software engineers get it right the first time? Other times I think it singular in the assumption that the second system will be good. Shouldn’t an engineer go through dozens of prototypes before slowly converging on a producible model? Why should software magically require only one pilot system?
Frankly, I expect that software ought to go through dozens of prototypes. I’d postulate that if I set out to re-implement the same specification repeatedly, without adding any new features or re-using any parts, by the tenth or twelfth go I’d arrive at a relatively bug-free system. To my knowledge, no one has ever tried this. The “second-system effect” Brooks also identified leads to almost impossible-to-avoid feature creep, and few have the discipline or resources to design afresh rather than modifying what already is.
I don’t suppose I shall ever test this postulate. Where would I find the resources and the discipline not to use them in tackling new activities?