Thursday, April 7, 2011

Architecture should not prescribe. It should empower.

Let's call this a philosophy. What do I mean by empower, not prescribe?

I'm arguing that an architecture that enables solutions is ultimately better than an architecture that prescribes one. Whatever that solution is.

Take two hypothetical architectures, architecture 1 and architecture 2. Architecture 1 defines a highly scalable, elegant solution. Architecture 2 defines building blocks that each individually provide little value but could be assembled together into a solution of some sort. Question is: which one is better?

The question is flawed, however. Which one is better depends on the perspective. Most perspectives that apply are, however, irrelevant. At least compared to the one true test for quality of architectures. The test of time. Which one can better withstand the test of time? That is the question you want to ask. Well, let's try to answer it.

Architecture 1 is highly scalable yet very prescriptive. Solutions built on that architecture will undoubtedly be very powerful. But to withstand the test of time, that architecture doesn't just need to be powerful. It needs to be able to evolve. And to evolve easily, with minimum friction. Prescriptive architectures force implementations into compliance. Such implementations are rarely built with evolution in mind. Why would they? They are forced to comply with an architectural recipe and need not go far beyond.

Architecture 2, on the other hand, is made up of building blocks. Implementations built on it are not given a recipe. They are, instead, forced to carefully consider the fitness, capability and compatibility of each building block. Those implementations know better than to blindly follow a prescribed solution. They are built on the premise that the building blocks can be taken out and replaced by other.

It is clear architecture 2 can withstand the test of time better. At some point the high cost of retrofitting a prescriptive solution surpasses the value it provides.

So, don't build architectures that prescribe. Build architectures that empower.