08.01.2013 Views

Back Room Front Room 2

Back Room Front Room 2

Back Room Front Room 2

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!