Rethinking TDD

Posted on

Lessons from Ian Cooper’s “TDD, Where Did It All Go Wrong?”

Test-Driven Development (TDD) has been one of the most discussed—and misunderstood—practices in modern software development. Over the years, a lot of writing and guidance took a wrong turn: tests became fragile, development slowed, and teams lost faith. I recently saw Casey Muratori, TJ and the Primeagen raising these points in "The Standup" called "How BAD is TDD?": all turned out to love testing, but rarely in the TDD sense, apart from used to drive testing. How did TDD get here?

Today, I revisited Ian Cooper’s talk, “TDD, Where Did It All Go Wrong?”. Cooper revisits core ideas from Kent Beck’s books and clarifies what many of us got wrong about TDD—and how to get back on track. This actually addresses all of the concerns raised in Prime's ranty "standup".

Where TDD Went Wrong

A common anti-pattern is tying tests to class structures and implementation details rather than to behavior. That makes suites brittle: change a detail, and tests cascade into failures. Refactoring becomes scary, feedback loops lengthen, and dissatisfaction spreads.

Getting Back on Track

Why This Still Matters

TDD isn’t about policing class diagrams or worshipping red-green-refactor as a ritual. It’s about fast feedback, fearless refactoring, and a relentless focus on behavior. Re-anchoring on these principles gives you a suite that enables change instead of resisting it.