Software Anarchy
By Michael Renken
Software is not “settled”. It’s a world of islands - some big, some small - separated by a tumultuous sea. To an outside observer, this sea appears as a chaotic entity, constantly threatening island life. But when you look a little closer, there are rising and falling tides, waves that bring storms, and storms that destroy old, rigid, poorly-planned structures so that better structures can be erected that more properly interact with the sea.
If you’re driving along a beach community, you will see houses built on 16-foot pylons that look like giant stilts with garages underneith 1. These garages look largely unfinished because they’re expected to break away during strong storms or hurricanes so that the wind and water can flow freely under the structure. After the storm, the house doesn’t rebuild itself. The owner will hire contractors who will purchase new lumber which will be used to rebuild the garage.
This system is a beautiful mix of synthetic (the free-standing structure built to house people and their things) and organic (the homeowner and the contractors each with a motive to keep the house in working order.)
It’s not practical to live on the beach. It’s expensive, and you have to be constantly moving to ensure optimal livability. But people do it. Why? Because you understand the risks, and those risks are outweighed by the benefits. The beach is fun. It’s relaxing with the sound of the waves, and the view is fantastic in that you can see a seemingly endless edge of the horizon - wondering what could possibly be on the other side.
I find this metaphor apt when describing the process of developing software because, as anyone who’s been in the field long enough can attest, there are once-in-a-week, once-in-a-month, once-in-a-year, etc. events that can throw your system into complete chaos and force you to start over or ditch a large part of your codebase. As such, we can’t rely on large, rigid, mostly-synthetic parts. We must be nimble, able to replace pieces as needed with minimal downtime and able to predict and address concerns as they come.
If you’re constantly trying to retrofit parts of your system, and those efforts echo out to other parts, you’re spending much more resources than really necessary. This kind of waste is something that can exist in an open system where capital flows in more than it flows out. The majority of us don’t have that luxury. We must build our applications like a beach house - with parts that can be allowed to break away and be replaced easily and cheaply once the storm passes.
-
Bliss, S. Durable Beach House Construction ↩︎