> If we're ignoring a practice that guarantees an improvement in the quality of our code and the speed of our delivery without a very good reason, then we are being unprofessional.

Looks like silver bullet reasoning there. It slays every problem, at least a little, and never makes anything worse.

I've done red green TDD before on 10-35k LOC systems in a couple high level languages (C, C++, Python). Used different automated testing frameworks when doing it. I've even taught it as a TA in college (although a decade ago, when XP was all the rage). I was doing test first unit testing before many of the existing frameworks existed.

You have supporting data: You have instances where it supports the conditional in your statement. The studies are not done in situations where it really can be found to be scientifically rigorous, only suggestive, and therefore my reaction is at the idea "We're unprofessional for not doing X", which implies a certainty to the idea far beyond what it is yet due.

I find the very assertion "a practice that guarantees an improvement in the quality of our code and the speed of our delivery" insulting and ironically very unprofessional, as it prioritizes advocacy of a technique over results. The tone of the OP is "TDD is like washing your hands before eating; You're paleolithic if you don't do it". He's calling those of us who don't always do it unprofessional.

I find the argument trying to get everyone to always do TDD very unpluralistic, another unprofessional tendency in my mind. There should be a heterogeneity of ideas and methods, as every situation is not the same and with the more developed tool box we can accomplish more things with the right set of tools rather than rigidly applying the few tools we apply in every situation. While there are things that should almost always be used (source control), they are very few in number. I mean, before DVCS, source control use wasn't always something that made 100% sense (remote development was quite hard to factor in with say, CVS or RCS usage without network connectivity).

TDD is horrid for soome applications, especially UI heavy ones. TDD has real costs. The idea that any technique doesn't have real costs is somewhat out there. Lots of TDD advocates espouse "it saves you more time than you spend". That's a pretty hard claim to prove, and suggestive studies don't prove it to a degree to make institutional adoption of the system mandatory. I mean, even source control has real costs, and people rarely argue against its use anymore.

My issues with this discussion: The strength of adoption which you (or at least the OP) are advocating requires almost absurd levels of proof. It literally will require some hiring/firing to implement in organizations, as some people can't handle that amount of testing. I personally have been on projects with different teams doing TDD, and don't find it to have met the promise of the central claim of this "always should use" position, which is it saves more time than it costs. I find it a mixed bag, therefore not a requirement for professional conduct.

The amusing thing is: I USE TDD (for appropriate projects). I just find the idea that it's the second coming a bit absurd and the way this is being asserted somewhat insulting. Most people think it has value, but the idea it should be cannon law is silly.