Software Engineering ยท Testing
A practice where you write the failing test first, then write the minimum code to make it pass, then refactor โ the tests drive the design.
In practice: Forces you to think about the interface before the implementation, often producing more composable, testable code. But the discipline is genuinely hard to maintain, especially under deadline pressure.
Debated: Contested in practice โ strict TDD advocates claim it produces better designs; critics argue it slows down exploratory work and leads to over-tested, over-abstracted code optimized for testability rather than simplicity.