Imagine waking up tomorrow and learning the construction industry has made the breakthrough of the century. Millions of cheap, incredibly fast robots can now fabricate materials out of thin air, have a near-zero power cost, and can repair themselves. And it gets better: given an unambiguous blueprint for a construction project, the robots can build it without human intervention, all at negligible cost.
One can imagine the impact to the construction industry, but what would happen upstream? How would the behavior of architects and designers change if construction costs are negligible? Today, physical and computer models are built and rigorously tested before investing in construction. Would we bother if the construction was essentially free? If a design collapses, no big deal...just find out what went wrong and have our magical robots build another one. More implications follow. With models obsolete, unfinished designs evolve by repeatedly building and improving upon an approximation of the end goal. A casual observer may have trouble distinguishing an unfinished design from a finished product.
Our ability to predict time lines will fade away as well. Construction costs are more easily calculated than design costs -- we know the approximate cost to install a girder, and how many girders we need. As predictable tasks shrink toward zero, the less predictable design time grows to dominate the project. Results are produced more quickly than before, but reliable time lines slip away.
Of course, the pressures of a competitive economy still apply. With construction costs eliminated, a company that can quickly complete a design gains a market edge. Pressure on getting design done fast becomes the central push of engineering firms. Inevitably, someone not deeply familiar with the design will see an unvalidated version, see the market advantage of releasing early, and say "This looks good enough."
Some life-or-death projects will be more diligent, but in many cases consumers learn to suffer through the incomplete design. Companies can always send out our magic robots to "patch" the broken buildings and vehicles they sell. All of this points to an amazing, counter-intuitive conclusion: our sole premise was a dramatic reduction in construction costs, and the result is quality got worse.
The Design Crisis
It shouldn't surprise us the above story has played out in software. If we accept that code is design -- a creative process rather than a mechanical one -- the software crisis is explained. Now we have a design crisis: the demand for quality, validated designs far exceeds our capacity to create them. The pressure to use incomplete design is strong.
Fortunately, this model also gives us some clues on how we can get better. Physical simulations equate to automated testing; software design isn't complete until it is validated with a brutal battery of such tests. To make such tests more effective we are finding ways to rein in the huge state space of large systems. Improved languages and design practices give us hope. Most importantly, there is one inescapable fact. Great designs are produced by great designers dedicating themselves to the mastery of their craft. Code is no different.