I have been working with TDD for the past two days and it is confusing me. There are a lot of reasons why this is the way to go, I am given a legacy project that no one has touched since 2011 and has no test-coverage whatsoever. To make sure I don't break everything I write tests before touching any of the code. Once the entire class is covered and has the proper fixtures, I can get started! Normally I would dive in the code but I am pair programming so ... adapting to my partner it is. He writes his tests first, and tries to write the minimal amount of code to get the test to pass. Sounds wonderful, but is completely against anything I have ever done. I have to temper myself not to go changing the code before my test is failing, yes failing. Just when that happens I am allowed to write code again.
I am having a hate love situation here. I love the security and the clean code. But tempering my code-enthusiastic fingers is not easy at all. Test driven development will take some time to get used to.