Two-Phase Waterfall: Implementation Considered Harmful

Robert C. Martin

Robert C. Martin

Two-Phase Waterfall began to germinate in my mind while I was sitting in a QA meeting. Some quality assurance imp was droning on and on about defects and bug lists and customer complaints. Every time a defect was mentioned, the programmers whined endlessly about how the system wasn't designed to do what the customer needed. As the designer I knew that this was nonsense. But I was deeply concerned with what was happening to my design. The coders were ruining it!

As I sat their daydreaming, I realized that this always happens. My beautiful and elegant designs never seem to survive the coders. The designs always rot into some parody of their former glory.

And then it hit me. The designs weren't the problem, it was the code! Code ruins designs. The solution to this problem seemed so obvious that my jaw nearly hit the floor. All we have to do to preserve our designs is refuse to code them!

So I bought an MDA tool and started drawing designs that the tool could execute. What a joy! There were no programmers to ruin my design. There were not crass coding issues to destroy the abstract beauty of my structures. I was sure this was the answer.

Alas, it was not to be. I quickly found that even my executable models became sullied by the need to make them work. The horrid little details of actually making a system work were polluting and degrading my perfect designs. So I realized that it was not code that was to blame; though code certainly played its part. No, it was the details of execution that was ruining my designs. What a dilemma!

And then one night I was watching The Bridge over the River Kwai and drinking Guiness; and I heard Alec Guiness say: "It's got to be a proper bridge." And suddenly I knew!

If designs are ruined by execution details, then we should divorce designs from execution. Implementation is harmful to designs! Implementation ruins the elegance, beauty, and symmetry of designs. The problem is execution; and so it is execution that must be eliminated. As a community of designers we need to insist that our designs remain unexecutable!

All we are saying, is give design a chance. The code lies and designs die. The only good design is an unexecutable design. Stop all code. Pay for design, not for code! Code is not the answer!

Madness! Madness!