I've come to think that test driven development is to development what jazz is to music. The main likeness is the improvisation part, in TDD you start out with a blank sheet so to speak, then you write tests, the tests are the actual improvisation part then you write code to satisfy that test, which is kind of like just playing along while another musician is improvising. To play improvised jazz you have to be a skilled musician, does this mean that to use TDD you'll have to be a skilled developer? I'm not sure...