You’ve probably heard of the Gang of Four and their book, Design Patterns. You might even have a copy on your shelf. I know I do. There’s a lot of good stuff in there. Reusable concepts (patterns) that can be used whenever the situation calls for one of them. I’ve talked about some of them before, like the builder pattern, or the difference between adapters, facades, and decorators. They’re best practices, but as I’ve said, they’re only best if used at the right time.
One thing I haven’t talked about though, is where the idea of design patterns came from. They originally came from the world of architecture. Way back in 1977 Christopher Alexander coined the term in his book A pattern Language. The book lays out the common patterns that can be used as building blocks when creating a vibrant community. The book laid the foundation not just for the GOFs Design Patterns, it popularized the idea of a pattern language as its own concept.
Pattern languages are a way to express the fundamental building blocks in a field. Building blocks that can be combined to define, describe, and document whatever it is that you’re trying to build. The Bounded Contexts. The Ubiquitous Language. And not just define the thing, but when combined correctly, ensure that what you’ve created has that Quality Without A Name (QWAN) that makes it more than the sum of its parts. Its hard to describe, but you know it when you see it.
As the user of a piece of software, do people like to use the software? Does it simplify things? Make them frictionless? Does it align with the other things they are doing? Does it spark joy? As a developer of a piece of software, is the code easy to understand? Easy to extend? Do the internal boundaries match the external ones? Do you look at it and go “Of course that’s the way it’s done. Why would you do it any other way?” In either case, does it delight you, but never surprise you?
Christopher Alexander recently passed away, but his insights are as valid now as they ever were. So next time you’re designing something think about the pattern language you should be using. And always look for the QWAN.