Agile development practices and good Object Oriented Design principles are supposed to enable unending, gentle modification of an existing codebase. Is this really true, though? In the course of 5+ years developing and evolving an open source framework, I’ve learned a lot of painful lessons about the issues that retard code extensions and modifications. I’ve also learned a little bit about the design decisions that dramatically increased my ability to extend the code. In this talk I’ll show several instances of how failing to heed design fundamentals introduced code viscosity, and how some strategic refactorings opened up the flood gates for new functionality.
Undoubtedly, the practice of Test Driven Development directly supports your ability to modify a system, but I found out the hard way that there are also plenty of ways to do it wrong. I’ll share examples of high friction TDD and the changes in strategy I employed to reduce that friction to wring more value out of TDD. The programming languages we use for .Net development have changed dramatically in 5 years. We can apply the new language features in C# 3.0 to improve the readability and structure of both our code and the way that we express unit test specifications. Lastly, I’ll discuss our changing expectations on framework usability and the resulting impact on design.