You are a Software Gardener

Agile Developer?
Agile Developer?

You are a Software Gardener.

Do you try to plan your gardens in such detail that you know where each leaf will be positioned before you plant a single seed? Do people expect estimates (or are they promises in your organisation?) on exactly how many flowers will have bloomed in one years time? Do you have a bonus tied to that? Things that would be perfectly reasonable to plan for a skyscraper seem a little ridiculous when you are talking about a garden.

You probably have a good idea of what your garden should look like a week into the future. You might even have a rough idea of the shape you expect it to be in a year from now. But you have no idea of where each branch, leaf, stem and flower will be a year from now, and if you say you do then you’re really only guessing.

If you were building a bridge or a skyscraper and you told me, before you began, that you knew exactly how it would look when it was finished – I would believe you. If you told me that you knew to some insane degree of accuracy how long it would take to get to ‘finished’ – I would believe you again. That’s how Engineers roll. Tell me the same thing about your garden and I’m gonna call bullshit. Tell me you are going to make it grow faster by hiring more gardeners and I’m gonna laugh at you.

Excerpt from Chris Aitchison.

The full read is in the link. I know this is an old post, but it’s worth reviewing.

[HT: Chris Aitchison]

Or... Agile Developer...
Or… Agile Developer…

4 Replies to “You are a Software Gardener”

  1. Farming is a business, in that there are stakeholders other than the farmer. Gardening, not so much. Farmers have to present a business plan to the bank in order to get the financing for a crop. That means that they need to estimate their yield, based on the yields in prior years for the same fields, adjusting for new fertilizers, improved seed varieties, pest management technology, climate change, and other variables both under and out of their control. Most farmers contract most of their expected harvest to some large company, who will sell futures contracts to supermarkets, restaurant chains, and so on. Gardeners, not so much.

    Farmers go to school, including graduate school, to learn how to maximize their yield and quality, and sustain the value of their fields over their lifetimes and the lifetimes of their descendents. There are farms that have been in production for centuries. Gardeners go to the garden center and show pictures of their wilted leaves to the professionals, who sell them soil amendments or pest treatments in an attempt to recover what they can. When gardeners get frustrated, they give up and let the weeds take over. My wife and I are avid gardeners, which means we aren’t farmers and we know it.

    If you’re creating an iPad app in your spare time, the gardener metaphor is fine. If you’re creating an enterprise application, we expect you to work like a farmer.

    1. Two points:

      1. Even in the cases of farmers and bridges, the estimates are often wrong. Both farmers and engineers are most accurate when they estimate something they’ve done before. Adding a new type of seed into the mix will significantly reduce the farmer’s accuracy. Using a new technology in the bridge might delay it for months or even years.

      2. But both bridges and farms obey the laws of physics, unlike software. This affects software in two ways. First, I can build an app quickly that *looks* like it does what I want, but underneath which is chewing gum and baling wire. This would be like building a bridge by first putting a roadway across the span, and only later building the pylons to support it. It would look like you drive a car across from day 1, but it would be a very bad idea. Luckily, in the case of bridges, this isn’t a real risk, because physics. But in software it’s easy to mistake that first version for something shippable, even though it need 10x more work to complete. And second, because there are no first principles in software, often what was designed – and implemented – is not good, and it has to be redone, or replaced. This is discovered, hopefully, during prototyping and user testing, but it’s in the nature of software that the first design sucks. It’s the key property, almost – software design is emergent.

  2. That’s one hell of a metaphor, software development is just like planting your own garden although mostly “software gardeners” don’t look like the muscular dude in title image 😛
    Software is driven by customer requirements which are usually not very clear, that means we are not building a right bridge or a sky scrapper for which the ground realities almost never change(an earthquake is an exception).

Leave a Reply