- Design first: You understand requirement first via analysis, create use cases for it. Thus, the focus is on the requirement before writing the code.
- Good enough code for now: You write sufficient code against use cases that fulfills the user requirements. You don’t write extra lines of unnecessary code.
- Avoid rework: Due to design first approach, most of the doubts are cleared before writing code hence rework is avoided.
- Developer confidence: Continous delivery of requirement in small cycles gives developer a confidence.
- Regression catching.
- Safe Refactoring: Once the code is covered by multiple tests, a developer can safely improve code structure with confidence and can focus on simple and elegant design.
- A shared understanding of the business: Tests are the live documentation that is the communication channel between you and your future version or other developers that talks about business rules.
- Clean code reminder: IMO, TDD always reminds you to make your code better than you found it. Of course, after covering your code with test, make it better.