TDD (Test Driven Development/ Design) provides the following advantages
- ensures you know the story card's acceptance criteria before you start
- ensures that you know when to stop coding (i.e., when the acceptance criteria has been meet thus prevents gold platting)
As a result you end up with code that is
- testable
- clean design
- able to be refactored with confidence
- the minimal code necessary to satisfy the story card
- a living specification of how the code works
- able to support a sustainable pace of new features