The first thing that needs to be stated is that TDD does not necessarily increase the quality of the software (from the user's point of view). It is not a silver bullet. It is not a panacea. Decreasing the number of bugs is not why we do TDD.
TDD is done primarily because it results in better code. More specifically, TDD results in code that is easier to change.
Whether or not you wish to use TDD depends more on your goals for the project. Is this going to be a short term consulting project? Are you required to support the project after go-live? Is it a trivial project? The added overhead may not be worth it in these cases.
However, it is my experience that the value proposition for TDD grows exponentially as the time and resources involved in a project grows linearly.
Good unit tests give the following advantages:
- Unit tests warn developers of unintended side-effects.
- Unit tests allow for rapid development of new functionality on old, mature systems.
- Unit tests give new developers a faster and more accurate understanding of the code.
A side effect of TDD might be less bugs, but unfortunately it is my experience that most bugs (particularly the most nasty ones) are usually caused by unclear or poor requirements or would not necessarily be covered by the first round of unit testing.
To summarise:
Development on version 1 might be slower. Development on version 2-10 will be faster.