distributedlife

passionate about everything

Weeding the Garden Published by Ryan Boucher @ 11:55 pm

I have been reading The Mythical Man Month by Frederick P. Brooks, Jr. and in his No Silver Bullet paper he talks about how the building metaphor for software has outlived its usefulness and that growing software is more appropriate. In some instances I agree with him. One may think that agile practices would require a more organic metaphor but it doesn’t.

I’m going to suggest the garden as a metaphor because while growing an application may be appropriate I find the garden shares many similarities with the development of a system. A garden has many trees and plants that work together. Any one by itself is interesting and takes time to grow but in the end it is just a plant or tree. For the specific look of a garden to be achieved, and all gardens are created to achieve some end result, the trees and plants have to work with each other. A complex business system is the same. By itself an application isn’t necessarily complicated to create. An application that interacts and integrates with other applications is harder and a collection of applications all working harmoniously substantially harder.

Aside from the complexity of integration the garden shares other similarities with a software system and eventually I’ll bring this all around to a relevant point on testing.

Before you even start a garden or system you have constraints being placed upon you. These can be common like the availability of skilled labour and budget to gardening specifics like soil quality, light conditions, wind, rainfall, salinity or simply the climate which dictates what is likely to survive. You may liken these to target hardware limitations, performance requirements and the chosen programming language.

The considerations are factored in and they influence every decision from what shade trees to plant to what algorithm you use.

When you are planning a garden you can do it with lots of detail and draw up top down perspective plans showing the placement of trees, garden beds, walkways, gazebos, water features and all the other whizz bang stuff that exists in very large gardens. Or, if you know what you’re doing you can walk around the spaces that will soon be the garden and visualise in your mind how it all will work. You know what has to happen; you know what you are going to be working towards.

Both are valid ways of architecting the end result. In both cases you need to be experienced before you start. You can see a botanic garden in a major city being developed by the former method. Accountability, budgeting and visibility into the process are required. The latter method is more akin to a house garden. The planning could be done on paper, but the architect is confident in the environment and if she is doing the work, writing it down isn’t necessarily required. The more people required to help the more it has to be written down.

Teams require communication whether you’re building a garden or a software system.

The people involved in the creation of a garden are just as varied as the development of a system. You will have planners, landscapers, botanists and general labourers akin to architects, business analysts, to developers and testers.

In the end no amount of planning will get you a garden. You need people to come in and toil, plant the trees and perform the arduous back breaking labour. This takes time and some parts of a garden can’t be rushed. Adding manpower doesn’t make a tree grow faster. You can replant a grown tree from somewhere else but that costs money and the tree may die because the soil conditions don’t match.

From the moment you start a garden weeds will grow. Weeds are persistent and require constant attention. There are many things you can do to stop weeds from laying newspaper or plastic around the trees and plants but that won’t last forever or stop the wiliest of weeds.

Because of the ever-present threat of weeds, weeding is a necessary task in any garden. It can never be alleviated as weeds evolve against the best techniques.

Weeding looks like hard work and that is because it is. The end result is worth it because a garden is beautiful both in aesthetic form and function. If you don’t do it then you end up with a garden full of weeds. A garden full of weeds may still have some form or function but is flawed. The longer weeds persist, the more the garden wanes until it is finally overrun.

Note: I find it ironic that I am writing about gardening. I always hated gardening when I was growing up. Mum was and still is a gardener and as such there was gardening to be done if one wanted pocket money. The important lessons I learnt are that popping the buds of fuchsias annoys the hell out of gardeners and is a lot of fun and that weeding is hard work, zero fun, but necessary for a quality garden.

My Mug Ryan Boucher is a Software Inquisitor and is passionate about it. You can find a whole raft of articles and anecdotes about software testing and other topics he gets excited about.
Tags , , , ,