One thing I want to add about TDD that always made it impossible for me to build is how pointless (to me) it is to do TDD in the functional/integration areas.<p>I tweak shit loads of forms, but as soon as a form get a little bit complex, it's impossible, for me, to apprehend the parameter's structure. Same goes with views. Your first view implementation is likely to be very different than the one you end up using.<p>TDD is built on the assumption that you know everything from the get go which has <i></i>never<i></i> be the case for me.<p>I write tests when things are settle down and ready to go live as a mean for me to say: "Ok, I think this is good enough, let's go live with this, but beforehand, let's make sure it works as expected".<p>Then bugs appears, and I add tests to cover those cases so I don't introduce regressions in the future.
I liked his rant on unit testing.<p>It's not about the # of test or the % coverage. It's the # of test required for a degree of confidence needed to sleep and further develop.