December 28, 2019

Is TDD dead?


David Hansson, Martin Fowler and Kent Beck


Yes, this debate was good to listen. Kent Beck itself really talking about how the thing came to be. TDD is very nice for some workflows, but the path to fast feedback loop is alwaaayyss desireble. That is the main reason I see some people in the Clojure community advocating about REPL-driven development instead of TDD.

You can have immediate feedback of your running system! This the supreme case for fast feedback loops.

However, there are also some people that speak with the sole, unique truth by their side. You should use TDD or you are NOT a professional.

I’ve seen talks from Uncle Bob saying something like that. Really? That defines me? I’ve been trying really hard to understand how can a testable code provide a better design architecture only by being testable.

In my point of view, it looks like one more subject that programmers like to debate to run away from the real problems. TDD you can control, is under your choices. But there are complex stuff happening at the business domain level, techinical requirements like distributed systems, concurrency, auditable, and many others that are way more complicated to define.

Let’s agree that the definitions of professionalism in software development is way far from being defined. It’s a hacky community and I really like that way.


TDD helps you with anxiety in programming craft

I feel it is very hard to write test first before I see the code

We should always think about how can we tweak the design to the code be testable

The isolation of unit testing is not mandatory inside the idea of TDD

Fallacy: Because your code is more testable, it has a better design


  1. Can we be confident about your work? We should.

  2. Some parts of the project you can use TDD and some others you simply can’t

  3. Kent works from specific to general and TDD is good in this way

  4. I barely mock stuff

  5. Have self-testing code is critical. Have a command that can test your entire system

Tags: testing