Layers of change: How buildings and software are alike
medium.com
medium.com
You don't change the language your application is written in every day, and likewise the structure of a building isn't changed every day. But the stuff inside a building does change frequently.
Sure walls being moved is a more rare occurance, but it too happened multiple times during the past years.
I think there are undeniable parallels between software and architecture. Architecture just operates on a longer time scale.
Software is more like keeping quicksand in your hands.
The construction of houses take mature engineering principles and calculations of a physical world to create buildings standing for centuries.
Most (not all) changes after construction is veneer - on the surface and replacing of bits 1:1.
Software on the other hand need constant attention and massive changes to the very foundation is not uncommon. It might go as deep as a change in hardware, say moving from one arch to another, or changing of the software architecture such as moving to a distributed, eventually consistent persistence layer or vice versa.
It’s not like concrete stops functioning if you don’t keep touching it either. Don’t get me started on build pipelines, testing, integrations etc etc
And next up: product! Yesterday we thought it was a new empire state building buuuut it turned out we need to build a modern day coliseum.
Followed by “project management” - this may be the most obvious sign that we’re off in comparison. A building need project management! Software on the other hand is often ruined by it, as software is supposed to be malleable.
One is soft, the other is hard.
Trying to liken software production to building construction is something I’ve seen create various problems in this field of ours for a long time.
- always late and
- always more expensive than planned.
I guess that's not what they wanted to hear.
(honestly, it's a poor metaphor)What I say is, software is almost nothing like a building. Software doesn’t get built once; it grows over time. Even if you don’t change the functionality, external factors like security updates and changes in fashion force you to continually update it over time. A much better analogy, if you need one, is a garden or park.
I often ended up applying this simple principle to software, especially design systems, e.g. in atomic design where atom, molecules, organism, etc. Can be developed as layers with different pace of change and optimized around it.
I'm curious if anybody knows where the concept came from originally. Was there already something like that in Greek philosophy, or was introduced with the study of complex systems? Or maybe it was indeed from architecture?
"If Builders Built Buildings the Way Programmers Wrote Programs, Then the First Woodpecker That Came Along Would Destroy Civilization"