Sunday, July 1, 2007

What is Architecture?

Have you been in an airplane where you looked down and observed the landscape beneath you? From a bird's eye-view, you can tell instantly its order, you can tell right away the quality of a city; of whether it is organized in blocks or whether houses are randomly sprinkled all over. You can even foretell the future growth of the city and its evolution points. You can tell the surface quality whether it is smooth or rough. If you take a closer look at the motion of cars and the synchronization of traffic flow, you can see the harmony (or the lack of) in flow, color, in shape, in space and in time.

All of these major components are defined by what we call: Architecture. Therefore, architects in all disciplines are defining the "look and feel" of the world, therefore, shaping the quality of human experiences. For example, if the achitects in a certain country don't implement traffic lights, they negatively impact the daily experience of its citizens. Another example is the healthcare system is some countries, if it is not well architected, millions of people "suffer" adding to their negative human experience.

Based on the fact that architecture shapes the human life experience and it plays on the "macro" level, the architect's responsibility is very serious indeed.

So in short, architecture has major implications. Architecture defines the order, quality, organization, interaction, relationships and future evolution, general "feel", of the landscape, be it software, cities, buildings or any other system.

In software, architecture is the science of analyzing the system's quality requirements and the art of making the right decisions to satisfy those requirements. It is the first step in the quest for a solution after Problem/Goal/Vision Definition and before an implementation is designed and executed.

Architecture is based on the following four pillars:

1- Analysing alternatives. Having collected the quality requirements, no architectural decision is complete without first analyzing a few alternatives on major factors of the system. The first solution should not be jumped on without at least considering a second solution. Considering alternatives is usually a sign of a senior, well versed architect.

2- Decisions to resolve system-wide quality requirements. The key words here are "system-wide" and "quality requirements". Architecture deals with the big picture of the system and its overall quality. By quality I mean factors like usability, reliability, performance, supportability, scalability and the other "-ilities".

3- Seperation of concerns. Architecture is about breaking down a system into independent modules and defining the interactions between them. Each module deals with one concern only. Examples of concernds are persistence, security etc...

4- Variability and Protected Variation. Architecture is mainly about protecting the system from variability. An architect should strive for having the least trauma on the system from the most probable variability or "change". Variability has two parts: existing flexibility and future evolution. Therefore, the architect must be highly concerned with points of current flexibility and future (realistic) evolution points.