25 May 2009

If Software's Like Farming, How Do I Certify Organic?

The abundance of software metaphors is amusing.

Before writing code, we used the archaic but apropos writing instructions. That is because writing instructions is literally what we did, uh... and still do.

If I used Twitter, and you followed me, you'd find that on most days,
Bob is slinging instructions.
Metaphors abound for the stuff that happens between digital nothingness and an app one can demo. A sampling from blog posts Why Software Development isn't Like Construction and Tending Your Software Garden borrow metaphors from several industries attributable to various software luminaries (see table).

Metaphor
Industry
Remark / Attribution
Building an app
Construction
Software is soft, buildings aren’t (McConnell)
Creating an app
Theology
It's a science (Gries, 1981); It's an art (Knuth, 1998).
Growing an app
Farming
Hunt and Thomas, and others
Accreting an app
Oyster Farming
e.g., system accretion (McConnell); oysters make pearls
Driving an app
Transportation
"like driving a car"" (Plauger and Beck)
Producing an app
Entertainment
"like filming Snow White and the Seven Dwarfs" (Heckel)

Teams freshly introduced to agility might feel they're divining an app; not unlike a dowser might try conjuring up Sahara groundwater from the nearly imperceptible twitches of his divining rod.

I am partial to the Farming metaphor. Are you? I have started using grow instead of build in professional conversations - whenever I can remember.

In keeping with the post Simple Design or Swiss-Army Knifing, I pledge to strive to minimize my natural tendency to over-fertilize (i.e., I will deny the impulse to shovel on piles of steaming manure - one method, one purpose).

If software is like farming, how much manure should we use?

4 comments:

  1. I would rather say "throwing" than "growing". Growing implies the software knows what to do given rich soil and a little water and all we have to do as farmers is plant it in a way that easy to harvest.

    Throwing leaves the control in the hands of the skilled potter. You can add or remove clay as the piece requires or with a twitch of the wrist destroy the work and start again.

    ReplyDelete
  2. "If builders built houses the way programmers build programs, the first woodpecker to come along would destroy civilization." --Gerald Weinberg

    ReplyDelete
  3. There are lots of other metaphors that explain software development:

    * Trekking/Hiking: http://blogs.agilefaqs.com/2005/04/03/software-development-a-trekkers-way/
    * Driving on Indian Roads: http://blogs.agilefaqs.com/2007/07/14/driving-on-indian-roads-and-software-development/
    * Coking: This is an old metaphor, but very very relevant.
    * Rock Climbing: http://www.codinghorror.com/blog/archives/000830.html
    * Craft/Martial Arts (more on learning and feedback aspects)
    * Book Writing/Composition/Poetry
    * Painting - Iterative and Incremental

    And so on...

    ReplyDelete
  4. There is a typo: Its Cooking. I've blogged about this topic : http://blogs.agilefaqs.com/2009/05/29/software-development-analogies/

    ReplyDelete