Software is like gardening

Sócrates Díaz on November 12, 2018

Recently I've been reading The Pragmatic Programmer (for the second time 😁), and I came to one analogy that struck me hard, and changed my whole ... [Read Full]
markdown guide

Woohoo! I came to love this metaphor independently. It made me happy to hear it had been validated by some other really smart people.

Organic terms really make sense in this field. There's simply too much going on in any system to try to control it like we would a building via "architecture".


I think software has changed a lot over the years too. For instance, in the 1950s and 1960s, typically software was written in machine code for a specific mainframe hardware architecture. Once it was in production, it was unlikely to undergo many changes. Even making a small change was a huge pain.

Then, a decade or so later, the company might buy a new mainframe, with a totally different architecture. So now they had to rewrite the software completely from scratch. That's probably a more apt comparison to how a bridge or a building is constructed.

Over time, the advent of compilers, operating systems, and hardware standardization allowed software to be re-used. Software became increasingly "soft." A piece of code could be re-compiled for new hardware, and its calls into the OS and standard library would still work. That way, software didn't have to be re-written from scratch anymore. It could just be updated with new features.

Nowadays, with online updates, software really is like a living organism that is continually changing and evolving.


I think that the misconception of this sometimes leads to many of the problems that we have regarding management expectations.

For example: if people could see the software in organic terms, maybe they could see development estimations like "How much will take this tree to grow if you do all that you have to do?" instead of "How much will take you to build this Wall?".

The first one even when you think you have everything cover, your results can be affected by environmental factors like illumination, weather, quality of the ground (legacy code), etc. However, the second one, when you have the right expertise, build a wall almost ever will be the same.

Nice post, Socrates.


No, indeed, software is alive; it grows, but it can rot as well.
And sometimes it must die.


Yeah, but be aware that gardening is not always such a romantic thing. There is bad weather, hail, thunderstorms, plant diseases and animals that eat your crops. And you can do little about these things, even if you work hard.


I agree. In software, you also take risks. Things that deeply affect your software can happen, which you cannot control or can do little about it.

For example, a vulnerability discovered in the platform where your software runs (e.g.: Meltdown, Spectre), or the server where your webapp runs gets hacked and your data gets compromised (which is similar to the situation where animals eat your crops).

code of conduct - report abuse