|


Certification of Software
Engineers
Early Start to Testing
Funktionen im Objektmodell?
Growing Internal
Consultants
Litigation of Software-Intensive
Projects
Measurable Requirements
On Death March Projects
O-O-Design: ganz einfach
oder sehr kompliziert?
Performance in
Organizations
Professionalism in Software
Engineering
Requirements
Patterns
Reusing the Products
of Analysis
Setting the Context
Systems Architecture
UML: A Curse or Blessing? (pdf file)
Wer verträgt wieviel
Abstraktion?
Wohin mit den Funktionen
im Objektmodell? |
|
On Systems Architecture
by Tom DeMarco
The following article was originally published
in the Proceedings of the 1995 Monterey Workshop on Specification-Based
Software Architectures [US Naval Postgraduate School, Monterey, California,
September, 1995.]
In this brief reflection, I shall comment on systems architecture and
the effect of its absence, lay down some definitions, and then end with
a discussion of the odd dynamic that impedes the successful architecting
of most software. It is in this last section that I address what I believe
to be our major architectural problem: since we attribute most architectural
failure to the wrong cause, we are not making much progress in the area.
Just to give you a hint of what is to come: It is my thesis that though
we think of the inhibitors of successful architecture as entirely technological,
they are much more likely to be economic, political and sociological.
Architecture and its absence
The architecture of a complex software system is analogous to the infrastructure
of a highly evolved social system or biological organism. This parallel
is useful to my purposes here because it highlights that the absence of
an explicit architectural act may nonetheless result in something we all
identify as an architecture.
Early London, as an example, had been the beneficiary of no grand plan,
and yet a workable infrastructure was there for all to see: goods arrived,
people were induced to perform needed work, wastes were carried away, water
flowed to where it was needed. The varied interests of many participants
combined to create a force of evolution that provides constantly improving
infrastructure. No single mind ever conceived to that result, yet it happened.
This is similar to what Adam Smith identified as the basic mechanism of
the market: many 'invisible hands' acting together to lead to a useful outcome.
On a recent trip to India, I encountered another example of an architecture
without an architect. In the city of Bombay and surroundings, an unusual
set of cultural circumstances have inhibited the creation of sufficient
small restaurants to serve the lunch-time needs of the working population.
The result is that, since Bombay's great explosion of wealth and prosperity,
the city's workers have continued to provide their own lunches from home.
Lunch is a hot meal in India, and so a network of delivery men has sprung
up to transport hot meals from the worker's home, (where they are prepared
by family members,) to the worker's office. These delivery men are called
in the local vernacular, "box-wallahs."
The box-wallah provides an insulated box to hold the meal, a labeling system
to get it to its destination, a pickup and delivery service, and the same
service in reverse during the afternoon to return the containers and utensils
back to the home. The actual delivery involves several transfers of both
boxes and funds; by the time a box arrives, it may have passed through the
hands of half a dozen box-wallahs. The Bombay train stations around noon
are crammed with literally thousands of box-wallahs carrying racks of boxes.
To make matters a bit more complex, the box-wallahs are in general illiterate.
That means the labeling scheme has to be understood by people who can't
read. By the way, the same code serves in both directions: it gets the box
to the office in the AM and then back to the home in the PM. The Bombay
box-wallahs deliver more than 500,000 meals a day.
Now imagine you had been the architect of Bombay's box-wallah system. I
list just a few of your considerations in laying out the scheme:
- what is the labeling scheme?
- what is the equitable payment scheme that assures all of a given box's
handlers get adequately remunerated?
- what happens when one of the box-wallahs doesn't show up on a given
day?
- how does change of location get handled?
- how shall routes be allocated?
- under what circumstances are routes changed?
- how does each transfer work?
As you can see, this is anything but a trivial problem.
It's amazing that the system can be made to work at all, much less as well
as it does. What's more amazing still is that there is no company that runs
the box-wallah network, no ownership, no management and no designer. No
single mind ever thought out the answers to any of the questions I listed
above, nor to any of the other details that are necessary to make the network
function. The entire system simply evolved.
Evolved or "organic" architecture compared to explicit architecture
Just because there is no architect and no explicit architectural act does
not assure that there will be no architecture. There is always an architecture,
a good one or a bad one, but there always is one. Over time, the architecture
of any system tends to improve. This is a bit of a surprise, since we also
know that the micro design of a system tends to worsen over time as many
individual acts of maintenance make successive change more and more difficult.
The human body has evolved to have an admirable architecture. Similarly,
an evolving software system can begin to exhibit some semblance of architecture.
Take for example the operating system called DOS, one that is famous for
its near total lack of original architecture. At the beginning, it was a
strapped together set of concepts and code fragments from past operating
systems, a bit of CPM, a bit of old Digital Equipment OS technology, some
tape and glue. It resembled an airplane made by strapping wings onto a jet
engine and tying a wooden chair on top for the pilot to sit in.
Over time, though, things changed. The very first TSR program was a complete
kludge, just another element strapped on. But by the time the second and
third TSR had come along, and the 200th and 300th, DOS had begun to evolve
to accommodate the arrival of the 301st and subsequent TSRs. Similarly the
scheme of I/O channels, largely neglected in the original PC design step
(if there was one), has been rectified over time. Today, the PC can accommodate
serial and parallel I/O, SCSI, and various networking interfaces. The invisible
hand of the marketplace has supplied all the architecture that is in the
modern descendent of the original IBM PC.
While this organic architecture does happen on its own, it is hardly what
we should be trying to achieve. It takes forever and results in numerous
and expensive dead-ends along the way. Worse, it may end up serving its
own needs rather than ours. The opposite of an evolved architecture is an
explicit original act of architecture that provides successful initial direction
to a system or family of systems. The best example of this that I know is
the system family that began at Xerox and ended up at Apple Computer, the
family that I shall call "Dolphin-Diablo-Macintosh."
A triumph of architecture
The Dolphin-Diablo-Macintosh family has been a triumph of purposeful architecture.
The family has had, from its beginning, a huge capacity to respond to changing
needs. Its ability to accommodate change has surprised even those who were
responsible for its architecture. Take as one tiny example the multiple
screen facility that was implemented on the Macintosh in the early eighties.
No one had explicitly foreseen the possibility that a Mac might someday
have more than one display, but when the need was identified, the implementation
proceeded rapidly and without pain. The nearly immediate result was a "display
space," sometimes served by a single screen and other times by an array
of up to nine. Though the screens may be of different dimensions, different
aspect ratios, different resolutions, and different color depths, the scheme
works flawlessly. Today I can drag a desktop icon across my whole display
space, from my RGB monitor, through a multisynch monitor to my television
screen, and drop it there without ever worrying that it may get lost in
a crack between the screens, or that any one of my screens won't know how
to display the image.
It is a trivial matter to make a design that can accommodate some change
that was explicitly expected by the designer. But how do we design to accommodate
unexpected change? This is the central technological challenge of system
architecture. While it is a most important architectural concern, I shall
offer no specific insight on the subject beyond a pointer to one marvelous
book: Design Patterns: Elements of Reusable Object-Oriented Software by
Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides. [Reading, MA:
Addison-Wesley, 1995]. In this landmark work, the authors introduce the
idea of a pattern or reusable abstraction. For an investment of two hours
in reading Gamma et al., I predict you will come away persuaded as I was
that patterns are the key to successful architecture and an answer to the
question about how to design to accommodate unexpected change.
I make this claim in order to assert (at least implicitly) that the how-to's
of system architecture are not beyond us. That is an essential point for
this discussion, because as long as we remain convinced that some new breakthrough
is required before we can begin a regular practice of architecting new systems,
we will never get on to the real problem. Before proceeding to what I believe
to be the real problem, I shall take just a few lines for some definitions:
What is this thing called architecture?
An architecture is a framework for the disciplined introduction of change.
This is also a pretty good definition of design. The difference between
the two is that design, as we commonly use the word, applies to a single
product, while architecture applies to a family of products.
Design is always concerned with capacity to accommodate change. This is
true even of the extreme example of a system which is to be run once and
then thrown away. It still makes sense to design such a system, because
it still has to be able to accommodate one change, specifically the change
that is the implementation process. (Here I portray implementation as a
change from concept to reality.) A well designed system accommodates that
change easily and a bad one doesn't. Just as a test of our definition, consider
an even more extreme example: a system that is never to be run and need
not even be built. I assert that there is no such thing as a "good"
design for such a system. The concept of design makes no sense except in
the context of change.
The absence of a thoughtful architectural act assures that there is no initial
accommodation to the changes that will propel the product from version to
version, or the change that allows the essence of one product to be carried
over into other members of a product family. As Gamma, Helm, Johnson and
Vlissides point out, our problems in achieving meaningful reuse are tied
to this absent architectural act.
If architecture is so important and, if as Design Patterns points out, there
is a workable architectural methodology, then why on earth don't we do it?
The real problem
The real problem is that architecture costs money. Before you tell me
that you already knew that, that of course it costs money, that "there
is no such thing as a free lunch," let me give you pause by indicating
how much architecture costs. The Dolphin-Diablo-Macintosh family probably
cost Xerox PARC some $30,000,000 in its initial investment. Part of this
it recouped when Apple purchased some of the rights to the desktop concept
in the late seventies. Considering that transfer payment and the work of
its own architecture group, Apple had invested about $25 million in architecture
before beginning the Lisa project. Today, if all architectural investment
were capitalized, Apple would have it on the books as more than $125 million.
How does that compare to any single development project at Apple that makes
use of the architecture? Consider the Power PC implementation which occupied
some 300 people for most of two years. The project cost around $60 million,
supported by a capital investment of $125 million. The sobering fact is
that a decent architecture costs as much as two full implementations. Your
very first implementation will cost you about three times more with an architecture,
compared to throwing the product together without paying for a single architectural
thought. What we're talking here is real money.
In my consulting practice I see one organization after another engender
an architecture group because they realize that architecture is the key
to product family reuse, and thus a desirable goal. But then the architecture
group is funded only as a part of the first implementation project, and
that project's budget is set in the usual fashion for our industry, i.e.,
in the mid-range between Impossible and Highly Unlikely. In other words,
the architecture group is a sham. It has a charter, but no funding. After
a momentary digression on reuse, it is treated as an adjunct to the project
and driven by the same dynamic as all the rest of the project, getting the
product out the door as quickly and cheaply as possible. It is no surprise
that no useful architecture ever comes out of such a group. Organizations
that pay the cost of architecture get what they pay for and organizations
that don't don't get anything at all. My experience is that the enormous
majority of architectural efforts in our industry are in this latter category.
While I'm at it, there are two further inhibitors to architectural success,
and these two are also strictly non-technical:
- Early Overstaffing: Projects that have too many people on board when
the critical architectural work needs to be done are forced to hurry on
to the kinds of tasks (coding and testing) that can use up all those people.
Early overstaffing is a sign of an organization's unwillingness to invest
time in architecture.
- Production Mentality: The more an organization tries to force software
development into a production niche, the more wary it is of a research-like
endeavor such as system architecture. Thus one well-known networking company
runs a separate project for each platform, rather than develop a single
cross-platform architecture. Doing the same project over and over again,
building identical functionality on different platforms, is a production
activity. The company can even achieve a high CMM level in doing this kind
of work. Building a single cross-platform architecture, on the other hand,
is a damned hard R&D project, one that scares the company silly. Such
a project might even lower the organization's CMM level. So the company
just can't do it. Fortunately the invisible hand of the marketplace will
provide some competitor who can, and the production mentality company will
go out of business (probably with CMM level 3).
A grim history lesson
The best architectures of past have all been for naught. PARC failed
to recoup its full investment. Xerox's "office of the future"
never made a nickel for the company. Apple has not prospered. IBM's 360
hardware architecture -a marvel of the time- and its ambitious System Network
Architecture (SNA) did not herald the beginning of a new prosperity, but
the end of an old one. It seems that the companies that invested in meaningful
software architecture have all declined. Why is this?
Before concluding that architectural projects are the cause of this decline,
I urge you to look a bit further. Architecture is a big investment. Companies
that make big investments are usually successful companies, acting sensibly
to become more successful in the future. Xerox's decline was not the result
of its architecture, but of the success that paid for that architecture.
Specifically, that success sparked a ruinous assault by the Justice Department
against Xerox and eventually resulted in a consent decree that forced the
company to give away its principal patents, X-1 through X-9. The main beneficiaries
of this patented technology were Cannon, Sharp, Minolta and a host of small
Asian printer and copier companies.
Similarly, the success that enabled IBM to develop the 360 and SNA, also
set off anti-trust action against it. The result was the company was forced
to release its products for "cloning," something that was unheard
of only a few years before. Cloning is stealing someone else's intellectual
property, something that is specifically illegal in most of the world. But
IBM had to permit it, first with the 360 and then with its PC line. The
beneficiaries were the Asian cloners.
Apple was also a victim of the anti-trust action against IBM. In a head
to head battle against IBM, Apple might have fared well, but it could not
compete against the cloners who had been given IBM's intellectual property
for free.
Today, one of the most auspicious architectural endeavors is that undertaken
by Microsoft. It has already produced Ole, the Foundation Classes and a
host of other architectural wonders. And sure enough, the Justice Department
is right there again. Who would be the beneficiaries, I wonder, if Microsoft
were broken up, forced to release its investment to the public sector for
the free use of all? I suspect it would again be foreign competitors.
While those who have invested most prominently in software architecture
have often not reaped the expected benefit, those who have failed to invest
where such investment was required have fared even worse. A striking example
of this is the FAA's attempt to re-implement our national air traffic control
system, the NASPLAN projects. A total failure of architectural thinking
has assured that these projects had almost zero chance of success. Indeed,
by any way of reckoning, the entire effort has been a fiasco. There is no
redesigned Air Traffic Control System on America's horizon, and most people
who have been involved in the effort in any way have acquired a psychopathic
fear of flying.
Reprise
System architecture is expensive, but probably not as expensive as its
absence. Today we have the capacity to build successful architectures, but
often not the will. Our largest and most successful software companies have
been the rare exceptions, and these have maddeningly been tageted by Justice
Department actions that have resulted in loss of payback on their investments.
The problems that have most often hampered architectural efforts have not
been technical, but political, economic and sociological.
Copyright © 1995 by Tom DeMarco
|