Patterns get a lot of headlines as a best practice for ensuring quality systems, but I’m a much bigger believer in refactorings. I have spent a lot of time on patterns and there is no doubt that they have their place, but I think enterprises that practice Agile will have much greater success if they emphasize good refactorings over good patterns.
The fact is that patterns set the wrong tone – they get you thinking too much about what is perfect, and not enough about what works and is practical. Talking patterns awakens the purist, and before you know it the sun has gone down and you are still at an impasse whether what are you doing should really be an Adapter or not.
Pattern purists will argue, but I contend that patterns are often out of reach for starting developers. Pattern culture is an extension of academic culture, where you are taught that there are experts and non-experts, and you know where you stand. Patterns emphasize that there is a right way, and you might get it wrong if you don’t know what you are doing.
A refactoring-oriented approach, on the other hand, is steeped in Agile practices and encourages you to get something testable in place – delivering value instead of well-argued drawings. A culture built on refactoring also presupposes automated testing which is an essential practice for building quality systems. A refactoring culture encourages experimentation and innovation, and is much more easily accessible to entry-level developers.
Most importantly, a refactoring culture encourages you to deliver and gets you out of the head game of patterns…