The other really big benefit I see with TDD is the safety net provided by the tests. I used to think this paid off only in the long run. You know, years after the original programmer is gone and no one remembers how the system works, the tests are there to provide guidance and to show that any recent changes have not broken any existing (and tested!) functionality. However, in the past few weeks, I've noticed that having these tests helps me to catch minor, almost trivial errors caused generally when my brain goes into neutral for a moment. I write the test and watch it fail, then I attempt to make it pass. Sure I've done everything properly, I run the tests and am surprised to see a red bar, not a green one. It takes only a minute in most cases to fix the issue, but without the tests, it is highly probable that the bug would have remained and may or may not have been caught in later testing.
If I wasn't already a TDD convert, this kind of realization would go a long way towards convincing me.