The more I study TDD, and the more I read Robert C. Martin’s study on clean code principals, the more I see this pyramid of development maturity.
TDD feels like the icing on the cake. The cake must come first. In this case, the cake is the principles and practices of clean code. Without clean code and the knowledge of Agile software principals, TDD is a very difficult practice to do. In my mind, the maturity model goes like this:
The model shows level of difficulty and experienced needed, the further up the model you go. I have no doubt that some companies have taken TDD and enforced the process on their teams, without first going through the preliminary processes of learning. This is dangerous. I have seen projects eventually bury themselves in complexity and grind themselves down to a stop because of lack of clean code principles. When TDD is applied that way, not only will your software have fields of bad code inside of it, but you now have a test library to maintain with an equal amount of, if not more, bad code. The levels of complexity long running software projects can build up is scary. Maintenance costs and improvements become 10 times more expensive.
The investment in the above principles and practices are absoloutely golden to maintaining cost effective development of software.
“Agile Principles, Patterns, and Practices in C#” is a fantastic book from Robert C. Martin. Also, check out his Bad Code presentation over at InfoQ. It definitily got me laughing.