The design of many software applications begins as a vital image in the minds of its designers. At this stage it is clean, elegant, and compelling. It has a simple beauty that makes the designers and implementers itch to see it working. But then something begins to happen. The software starts to rot, over time, the program worsens in quality, the rotting effect increases, with a little bug here, a little hack there, and the program becomes a festering mass of code that the developers find increasingly hard to maintain.
"The Three Laws of TDD: 1) You may not write production code until you have written a failing unit test. 2) You may not write more of a unit test than is sufficient to fail, and not compiling is failing. 3) You may not write more production code than is sufficient to pass the currently failing test."