Currently as being in Germany and working on client's site I met an interesting project.
Product that our team is working on with the client is developed on TDD practices.
NUnit, CruiseControl.NET and NCover are used to support development.
I now wonder why TDD is not used more on other projects. There are a number of common reasons people exposes.
“It takes too much time to write tests. I code faster without it.”
This is I guess number one complaint voiced by developers. It is untrue. And it is simple.
Many people view testing of any sort as something that happens at the end of a project. And it is somehow true, but not completely.
It is more related to acceptance tests for example. If you try to add unit test at the end of project, you will fail,
but if you use "pay as you go" logic and start with tests at the beginning, you will get solid, tested code, and will definitely have less bugs.
This means that you will not produce 2 lines of code daily at the end of project just because you are searching for an tricky bug.
This is especially true for "heavy to debugg" issues in nearly finished projects when deadline is so close that you feel dizzy.
There are a number of other excuses for not using TDD, but this one is somehow first one to beat.