Interesting .. the last time I used TDD for a big project was for an API that I was developing, and the key (for me, anyway) was that the interface had to be rock-solid -- so, while doing that project, your first point was the most important one to me. The second point is the next most important for me .. having a safety net for when I update something over here .. which ends up breaking something over there. How the heck did that happen? Ah .. git diff to the rescue. How did I miss that? OK, one more test. :)
Your last point, about psychological backup .. it's wonderful to spend some time on the code, and get into the rhythm of running the tests, getting a green result, and doing a commit. The module grows before your eyes, and everything is completely tested.
Great post, thanks so much!
Alex / talexb / Toronto
Thanks PJ. We owe you so much. Groklaw -- RIP -- 2003 to 2013.