engineers as gardeners
There is a common belief in our culture about making software. In the same way as one imagines an architect working. You know, designing the building, in all its details, and then having that constructed. We've built an entire school of thought around the concept of software architecture. Like many people, I had assumed that we develop a product by following these principles. Indeed there was a point in the mid of the century XX century where we needed it. But things evolve.
We need to abandon the idea of a program as something that we perfectly plan ahead and reproduce. We are not building a bridge to last two hundred years. We are not building a pyramid. We need to understand that software behaves like a living being. A multicelullar organism. It grows, falls sick, reproduces… it dies. We build products by programming seeds and watching them turn into something. We prepare our fields by configuring a cloud provider like AWS or a Kubernetes cluster. We build pipelines to irrigate our infrastructure with new code. Watch it grow and fight the bad weather. Use pesticides when bugs appear. And proudly see how our clients reap the fruits of our hard work.