Credit for the title of this post goes to a remark by JB Rainsberger in the extremeprogramming yahoo group.
The pertinent line was something like, “I pretend that my program starts as an infinite collection of defects”.
I like this concept because it discourages the creation of separate story queues and bug queues, and encourages driving out the design through the addition of failing tests.
Each test added will constrain the defect-space of the program, until all the requirements have been satisfied by tests and all the tests are passing. At which point the defect-space and functionality-space of the application are separate and distinct. There’s probably some clever comment about set theory and venn diagrams I could make here, but I’m not smart enough to think of one.