day 84




digital darwinism 6: american swiss cheese

Yesterday we examined the Swiss Army Knife

as a model of robust design architecture.

Now, compare the stability of a Swiss Army

Knife design with the sloppiness of the design

of most software products. According to most

software engineering textbooks, product

development is an orderly process that

progresses from requirements capture,

preliminary design, detailed design,

development, and testing -- all carefully

carried out per the SEI CMM. When completely

mastered, software engineering is like churning

out Swiss Army knives. Everything is nice and

tidy, predictable, scalable, and controllable.

Central to the software engineering myth is the

idea of a software architecture, e.g., a

collection of clean interfaces and rules for

using them. In the business, these interfaces

manifest themselves as APIs (Application

Programming Interfaces - pronounced

"apes"). Every good software product starts

with a good solid architecture. Every good

programmer knows his or her APIs.

This model could not be further from

reality. In truth, most software products are

designed on the back of envelopes that are lost

or thrown away, the designers leave the company

half-way through the project, or the

competition upsets best-laid plans, causing

product re-vectoring in midstream. And this

happens on every day of the product development

cycle. As a consequence, few products have what

might be called an architecture. APIs are a

moving target. The concept of an architecture

is a fantasy.

digital darwinism 1 2 3 4 5



Daily Dose Index