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.

Tuesday, February 8, 2011

SOLID Principles of Technical Design Course

The SOLID Principles of Technical Design course is available for purchase from Pragmatic Skills.
Course syllabus can be found at:
http://pragmaticskills.com/Training/Courses/CSD301SOLIDPrinciplesofTechnicalDesign.aspx

Course code is CSD301. Course is divided into three parts:

  • Part I Overview of SOLID Principles
    • A general overview of all five principles
    • Quality attribute based analysis of the principles
  • Part II Demonstration
    • How-to for each principle
    • Examples in C#
    • Typical code smells for each principal
  • Part II Exercise
    • A two and a half hour long technical design exercise
    • Practical assignment in technical design and C# coding, following SOLID principles
The dates for the live/interactive sessions are:
February 25, 2011
March 11, 2001
March 25, 2011
April 8, 2011