Dan North published an article about opportunity cost in which he (deliberately and provocatively) used TDD as an example.
The article itself is fairly straight forward, and states what should be rather obvious: look for the trade-offs for adopting any particular practice you adopt, and consider alternatives that might be better in some particular contexts, because there are always trade-offs and there are always alternatives.
Not surprisingly, some of the reactions are stereotypical and funny, along the lines of “How dare one suggest there are trade-offs or alternatives to TDD?”
“your (sic) disingenuously misleading the ranks of up-and-coming programmers into wasting their time looking for better design methodologies than TDD when no such beast exists.
The idiocy of such a statement should be apparent. Various versions of BDD are quite obviously better and for quite obvious reasons (which I’ve laid out elsewhere).
<digression> “But Uncle Bob says BDD isn’t any different from TDD.” This is yet another place where he’s wrong. All of the leading practitioners of BDD don’t consider it the same. I know that some people are of the opinion that anyone who signed the original Agile Manifesto can never be wrong, but those are opinions best discounted and ignored. </digression>
And even if you don’t like BDD, one comment includes this gem:
“when you’re working on a large project, TDD allows you to build the code in small steps, where each step is the simplest thing that can possibly work. The architecture follows immediately from that: the architecture is just the accumulation of these small steps. The architecture is a product of TDD, not a pre-designed constraint.”
Wrong, wrong, wrong, wrong, wrong. Please, step away from your computer and go learn something instead of promoting spaghetti-code (ok, you can use the computer as a learning aid). Do you still have all of your data access go through IRepository<T>?
Now, I’m deliberately being rude, both because I am, but also because these stereotypical defenses are not just condescending (and so deserving of a rude response), but ignorant.
For shame, my ass.