Unfulfilled potential

Design patterns seemed like a fantastic thing when they first became popular. Their promise of improved code reusability was—and still is—vital to many people. However, we need to know why that potential was not realised. Given how many patterns there are, with all their combined, compiled wisdom, why were they so ineffective as a form of knowledge transfer? This point is not debatable; as they stand, they are ineffective. The lacklustre level of adoption of any but the GoF patterns in mainstream development practices is a clearer testament to the inefficacy of the movement than any statement I could make.

Large-scale, complex software requires considerable effort to get right. The work of Christopher Alexander was all about managing the complexity of a different domain. What happened to that aspect of design patterns during the concept’s infiltration into software design patterns? Why haven’t they helped to tame the complexity? Was the initial response of the software industry neglectful of his work? What can we do to put ourselves back on track? Do we need to go back further and start again? In other words, should we walk the same path as he did to derive our own truer, more fitting form of patterns for software development?

Tracing the history of how the design pattern movement affected buildings and architecture reveals another parallel with software development. When and where the patterns processes were allowed to run their course, you can see how they created significantly better final results than the alternative—the default approach of contracts and paper design. However, the determination of what is better is a value judgement from a particular perspective. According to systems theory, the world stood in the way of what was locally good because the system above viewed Christopher Alexander’s work through a different lens—a lens of power.

That skewed interpretation remains as much alive in software design pattern related activities as it does with regard the physical building space. Inevitably, this leads to similar obstructions and corruptions of the process. Is something actively stopping design patterns from achieving their potential? If so, can we do anything about it?