TDD is the way. This presentation explains how TDD yields better Interfaces, Loose Coupling, Modularity, Separation of Concerns, Testability, and Atomic Commits. TDD exists so we have an easy time coming up with high quality code and so we can refactor easily. 💪