I like to talk about software development a bit like gardening, in that you have some control over what happens, but if you go away and come back, your plants will have grown out in all sorts of weird ways. And even if you planted all those plants yourself, you don't really know everything about the state of the garden.
Software is really complicated, like biology. Even if a system is technically somewhat deterministic, for all intents and purposes, it's pretty random. There are a lot of things we can do, like watering regularly, paying attention to the size of our containers, buy the right dirt, hire more gardeners, etc. But there is no such thing as a garden you can just walk away from because it's "finished"
I know from experience: I let a cactus die from neglect. Cactuses are supposed to be, like, invincible.
You know, the more I think about it, the more it makes sense.
At first, I thought, "well, if nobody touches a garden, it grows by itself, but software doesn't." But then I realized that, if you don't touch code for a while, everything else grows around it. Libraries, frameworks, operating systems, etc.. Also, memories of how it was built fade. The result is the same: software, like a garden, becomes in desperate need of maintenance over time, regardless if anyone changes it or not.
This is a great analogy. Thank you for sharing!!
Reading your reply, Ben! My conclusion: Software Development is like gardening, so many similarities there, I'll spread the word around. Hope you won't mind me quoting you when the opportunity comes.
Regarding your cactus: it takes a great deal of courage to admit you managed to let it die. Indeed, this is seen as something almost impossible! :)
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.