Multiple meanings of test-driven development

This Roy Osherove post surprised me because I hadn’t been aware of so many different interpretations of the idea before. Because I’ve always believed in at least some design up front, my understanding of TDD was the first of four mentioned:

Test Driven Development: the idea of writing your code in a test first manner. You may already have an existing design in place.”

The fourth interpretation of TDD applies pretty well to what I do now whenever I inherit an application.  Writing unit tests of the middle tier(s) of the application (if none exist) has proven to be very helpful whenever I’ve done this.  Adding new features becomes easier, and regression testing becomes much easier.