I have worked on TDD in one project
1. Gives good test coverage.
2. Gives a better understanding of the requirements (and not when the UAT is in progress).
3. Increases the code efficiency – you know what the module is supposed to do.
4. Encourages the developer to read the documents.
1. Requires co-ordination effort between tester and developer.(trust me its difficult in the start). This also does not give the liberty for the most cranky dev/test resources to work independently over-night.
2. Sometimes the testing needs to wait for dev and vice-versa.