Thread
There's a saying that writing software is more like tending a garden than constructing a building -- things constantly change.

But the more I learn about how buildings evolve, I think this process is actually a perfect analogy for designing software!

Thread:
The gardening analogy originated in The Pragmatic Programmer (afaik).

The claim: buildings are designed once and stable forever. But in a garden, things grow organically, you need to constantly prune and weed and tend. Aka, refactoring.
I found this framing helpful as an early programmer, but ultimately a bit hollow. Software adapts in response to changing human needs. It doesn't just naturally grow like a plant. The fundamental motivations seem different.
AND THEN, I started reading How Buildings Learn by @stewartbrand, and it all clicked.

The basic point of the book is that buildings evolve dramatically over decades in response to changing requirements. The parallels to software are uncanny.
One example, here's how James Madison's house Montpelier evolved over time.

1 family -> 2 family -> entertaining guests as President -> ... "all its owners are expressed, beam by beam"

Bottom picture shows the original footprint bolded. Remind you of any software you've built?
Another fun tidbit: Most of the cost of a building is actually ongoing operation and maintenance, not building the original structure. Just like software.
But what I find most interesting is that Brand has ideas for how buildings can be made adaptable, which I think we can use in software too.

"Age plus adaptivity is what makes a building come to be loved. The building learns from its occupants, and they learn from it"
He presents the "Low Road" archetype: buildings so shabby that no one cares what you do to them. Exposed plumbing, messy walls, empty garages. You can make it your own with no complaints.

How can we expose more plumbing??
"Temporary is permanent." The quick and dirty structure of a Low Road building often makes it highly adaptable.

Reminds me of those "temporary" spreadsheets that your company still runs on. Because you can color a cell or add a column, and no one complains
Another theme: buildings have layers that change at different rates. You need to allow "slippage" between the layers. How can we allow occupants maximal freedom to change the inner layers?
This gets at perhaps the most useful property of the building analogy: we already understand the value of designing our own interiors and doing some remodeling.

I want this for software: everyone modifies their space as deeply as they choose.


Especially amid quarantine placelessness, feels like software is increasingly an environment that we inhabit

Fascinating to consider how we can learn from the design of adaptable physical environments, to design adaptable digital ones...


The building metaphor also helps resolve debates around gatekeeping.

Professional Skyscraper Architects are correct that I, an amateur, should not attempt to build a skyscraper...

but doesn't mean I shouldn't rearrange chairs or build a birdhouse


I think it's possible to have great respect for the craft of design, while also respecting that people know their own circumstances and can learn to design quite well for themselves


I guess what I'm excited about right now is going into existing buildings, busting out the walls, and giving the inhabitants permission to redo the plumbing 🤓


Mentions
See All