Stewart Brand’s famous book How Buildings Learn has been on my reading queue for a while, possibly a few years. Now that I’ve begun reading it, I wish I had gotten it sooner. Listen to this:
The finished-looking model and visually obsessive renderings dominate the let’s-do-it meeting, so that shallow guesses are frozen as deep decisions. All the design intelligence gets forced to the earliest part of the building process, when everyone knows the least about what is really needed.
Wow. It’s hard to tell what industry he’s talking about there. It could easily apply to software development. No wonder Brand is so well-regarded in the Agile community!
Another wonderful parallel is between what Brand calls "Low Road" and "High Road" buildings. A Low Road building is one that is flexible, cheap, and easy to modify. It’s hackable. Lofts, garages, old factory floors, warehouses, and so on. Each new owner can gut and modify it without qualms. A building where you can drill holes through the walls, run your own cabling, and rip out every interior wall is a Low Road building.
High Road buildings evolve gradually over time, through persistent care and love. There doesn’t necessarily have to be a consistent–or even coherent–vision, but each own does need to feel a strong sense of preservation. High Road buildings become monuments, but they aren’t made that way. They just evolve in that direction as each generation adds their own character.
Then there are the buildings that aren’t High or Low Road. Too static to be Low Road, but not valued enough to be High Road. Resistant to change, bureaucratic in management. Diffuse responsibility produces static (i.e., dead) buildings. Deliberately setting out to design a work of art, paradoxically, prevents you from creating a living, livable building.
Again, I see some clear parallels to software architecture here. On the one hand, we’ve got Low Road architecture. Easy to glue together, easy to rip apart. Nobody gets bent out of shape if you blow up a hodge-podge of shoestring batch jobs and quick-and-dirty web apps. CGI scripts written in perl are classic Low Road architecture. It doesn’t mean they’re bad, but they’re probably not going to go a long time without being changed in some massive ways.
High Road architecture would express a conservativism that we don’t often see. High Road is not "big" architecture. Rather, High Road means cohesive systems lovingly tended. Emacs strikes me as a good example of High Road architecture. Yes, it’s accumulated a lot of bits and oddments over the years, but it’s quite conservative in its architecture.
Enterprise SOA projects, to me, seem like dead buildings. They’re overspecified and too focused on the moment of rollout. They’re the grand facades with leaky roofs. They’re the corporate office buildings that get gerrymandered into paralysis. They preach change, but produce stasis.