What we often find is that people think of software creation as similar to building a house. When constructing a house, you have a pretty solid idea of what the final product is going to look like. You don’t add or remove rooms or floors halfway through the process. What you start with is what you get, so it’s important to to nail down as much detail and answer as many questions as possible before anything is built. Once the building is underway, it’s very hard to change your mind.
Others understand that building software much more akin to growing a garden. You have a rough idea of what you want your garden to look like – big plants up the back, smaller plants up the front and so on – but realise that, other than a few rough high-level decisions, you can’t predict exactly how the garden will turn out.
Gardening is an ongoing, organic process, and putting too much thought and effort into minute details at the beginning of this journey is a waste of energy. At the end, our gardens seldom look like what we first imagined them to be.
When building software, we start off in a similar general direction: we watch it, learn from it and guide it. And just like a garden, software can take us in completely unexpected directions and to unforeseen destinations.
Planning a garden is very different to the way we plan building a house. Because of its unpredictability, a very flexible foundation needs to be laid to cater for an evolving system.
Software similarly needs ongoing care. We keep our software system healthy by constantly cleaning and removing unnecessary complexities, the same way we prune our plants and remove any weeds.
The thing is, software has always been soft. Only our rigid traditional processes have made it seem hard.
As an industry, we need to get better at explaining these differences and teaching our customers that software is organic and alive. Let's remind them creating software is a fluid journey, and let’s all start to grow happy, healthy and – most importantly – efficient software systems together.
The gardening metaphor was introduced by visionaries Andy Hunt and Dave Thomas in their seminal book, The Pragmatic Programmer.