TDD = Thought Driven Development
Mike Gehard
72

A strong type system helps avoid “blatant” bugs, but subtler semantic bugs still need tests IMO and “test first” is still an option.

Rich Hickey identified a weakness in Test Driven Development in his talk “Simple made easy”:

It passed all the tests. Okay. So now what do you do? Right? I think we’re in this world I’d like to call guardrail programming. Right? It’s really sad. We’re like: I can make change because I have tests. Who does that? Who drives their car around banging against the guardrail saying, “Whoa! I’m glad I’ve got these guardrails because I’d never make it to the show on time."

(“guardrail” is apparently a North American term for a crash barrier.)

TDD provides negative feedback. If tests are turning out too complex or difficult to write, then the design is probably wrong. Unfortunately, it doesn’t work the other way round since testability is just one aspect of a good design.