In issue 9 of the DNC Magazine I read a very interesting article by Craig Berntson entitled “Software is not a building”. In this article he instead compares software to gardening rather than building. Jeff Atwood has also written about this in his coding horror blog.I think this is a very interesting and perceptive idea and want to discuss my thoughts on the issue in this blog.
The traditional analogy which is made regarding software engineers is with that of building or engineering. Perhaps the Auratel ecommerce website which we are working on is like constructing a skyscraper. Even the job title “software engineer” reflects this mindset. But this immediately introduces a lot of assumptions which I have found to be false.
A skyscraper is designed, then the foundations are dug, it is built from bottom to top, then it is finished and opened. Building a website is not like this at all, yes there should be a specification at the start, a design, but this is guaranteed to change as the customers come to understand more clearly what it is they want. Imagine if I had commissioned a skyscraper and halfway through the construction decided that I wanted one floor to be twice as big and to have a swimming pool. The builders would say no. It is not in the design, it is not possible to change like that. In contrast a gardener can decide that he wants to have roses instead of tulips. He can remove the tulips and plant roses, but the rest of the garden remains unchanged. This is analogous to changing a section of a website.
A skyscraper is built and then finished. The Empire State Building has not been changed since it was opened in 1931. A garden on the other hand is constantly evolving and changing, the plants need pruning, it needs to be tended so the plants do not get out of control, new plants are planted, old ones are removed. A website is more akin to a garden in this respect too. If google decided when they launched their search website in 1997 that it was finished, no-one would visit it today, it would seem so old. No they are always working on it, adding new features (gmail), removing old features (wave). A website is never finished.
Pruning is very similar to refactoring. The codebase grows over time, it is important to devote time to deleting unused methods, methods and classes can grow out of control, getting bigger and bigger, it is important to ‘prune’ them back, break them up into smaller more manageable pieces, refactor the code so that it is not duplicated. There are also seasons in development, sometime it is important to devote time to the infrastructure or ‘roots’ of the code, as opposed to the ‘flowers’ of new features that the customer sees, the fancy jquery slider or pretty css3 table. Bugs are also something much more applicable to a garden than a skyscraper. In a garden you get literal bugs, which must be combatted immediately else the plants will start to die. A building does not have bugs.
Although gardening is hard work, when you step back and take a look at it, you can be proud of the beauty and life that is there. That is why I have come to think of myself not as a software engineer but a software gardener.