Back Room Front Room 2
Back Room Front Room 2
Back Room Front Room 2
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
In the world of buildings and towns, architecture<br />
is sometimes an end in itself: an artistic statement.<br />
Such is rarely the case in software. Good aesthetics<br />
compensate neither for lack of structural soundness<br />
nor for human inconvenience. The goal of<br />
architecture, and therefore of patterns, should be the<br />
morally profound, coherent wholes that generate<br />
human comfort.<br />
2.1 Architecture and Process<br />
Software developers sometimes use the term<br />
“architect” as a verb. Architecture is a noun; the<br />
verb is design. Design is the process we use to solve<br />
a problem. It starts with a vague understanding of<br />
the problem and gradually builds system structure.<br />
In doing so, it also builds an increased understanding<br />
of the problem.<br />
The process is more than just mapping an<br />
understanding of the problem onto solution<br />
structures that can subsequently be built. Most of the<br />
work on a new system focuses on identifying what<br />
the system should do and then, to a lesser degree, on<br />
how the system should accomplish these ends. After<br />
the first release comes maintenance. The process of<br />
maintenance design focuses on recovering some<br />
understanding of what the system does and how it<br />
does it, understanding that has been lost over time.<br />
One does maintenance to fix problems in the<br />
software, problems that have arisen as the user<br />
community interfaces with the software architecture<br />
and its applications. It is perhaps only on the first<br />
round of maintenance that requirements become<br />
clear. Anything prior to that is either a hope or a<br />
guess.<br />
The architecture of a system is therefore not a<br />
truth—or, if it is a truth, it is a truth at a given point<br />
of time that emerges from the process of<br />
development itself. Software design is dialectic<br />
between the development community and the<br />
architecture. The architecture “learns” from the<br />
processes of the organizations that build it, and<br />
serves the processes of the organizations that use it.<br />
In a healthy development, there is good feedback<br />
from the user process to the designer process.<br />
Architecture has meaning only in the context of<br />
these associated processes. These processes owe to<br />
the structure and values of the organizations in<br />
which they arise. Carried out well, these processes<br />
can improve quality of life for inhabitants of both<br />
the design and user communities.<br />
ORGANIZATIONAL PATTERNS 45<br />
3 THE HUMAN SIDE OF<br />
ARCHITECTURE<br />
Alexander believed that the whole focus of<br />
architecture should be quality of life. He had no<br />
time for architecture as art for its own sake; the<br />
artistic quality of architecture should emanate from<br />
its human scale and its suitability to human needs.<br />
He went beyond the saw of “form follows function”<br />
to embrace form also as the source of beauty and as<br />
the foundation of harmony in a system. Architecture<br />
exists for the sake of those who inhabit it.<br />
Software architecture in fact has, or should have,<br />
an analogous focus. The software itself doesn’t care<br />
what its architecture is. In fact, many stock<br />
principles of architecture such as coupling and<br />
cohesion work against desiderata such as<br />
performance. Why, then, are we concerned about<br />
architecture?<br />
In a 1968 Datamation article (Conway 1968),<br />
Conway proposed that the structure of any software<br />
architecture reflects the structure of the organization<br />
that builds it. Suppose you were going to form a<br />
company to write compilers. If the company were<br />
divided into three departments, it is almost certain<br />
that the company will produce a three-pass compiler.<br />
Software architecture must align with the structure<br />
of the organization that builds it. If the organization<br />
already exists, the architecture should reflect that<br />
existing structure.<br />
We can think of software developers as<br />
“inhabiting” the code. We too often forget that the<br />
users of a program are also “inhabitants” of the code.<br />
That suggests that software architecture must align<br />
not only with the structure of the organization that<br />
builds it, but also with that of the organization that<br />
uses it. Consider a CAD system that will be used to<br />
build an airplane. The enterprise using the tool has a<br />
design group, a manufacturing group, and a<br />
maintenance group (and other groups as well, no<br />
doubt). Each group has its own culture and<br />
expertise. We will want to build the CAD system<br />
with one component optimized for the designers,<br />
another component optimized for manufacturing,<br />
and another for field maintenance. In short, the<br />
architecture of the CAD system should follow the<br />
structure of the using organization. One can elicit<br />
this structure using techniques such as domain<br />
analysis (Coplien 1998), which aligns the overall<br />
system architecture with the structure of the<br />
business. The final alignment to attend to is that<br />
between the software architecture and that of the<br />
development organization. Naïvely put, the business<br />
structure shapes the software architecture and the<br />
software architecture shapes the development teams.<br />
In reality, some development teams have historic