Thursday, January 17, 2013

Software Development Metaphor Challenge

I have a challenge for anyone who would like to participate. This year, all year, when attempting to describe or discuss software development, only use *development* examples and metaphors.

A lot of folks use construction or manufacturing examples to help others understand how the undeniably more fuzzy process of software development works. Others try to use examples from art or drama to try to emphasize the creative aspect of developing software.

These comparisons aren't wrong, but they do fall short. Of course most comparisons fall short of the actual thing at some point. But what is intriguing to me is that humans have been developing things for centuries. We have *plenty* of development examples all around us yet non-development comparisons seem to be the norm.

Now certainly, examples of non-software development will still fall short. In fact, I know they will because most examples of development are of some kind of physical development such as a tangible product. Software is different, but less so in most examples I can think of. Software differs because the economics of its final production is inverted from that of physical products. With physical product development, it is usually more expensive to have to remake the physical thing after it has been initially developed. However with software, if you consider its final production nothing more than compiling or interpreting, its remaking is so cheap its free.

This is not meant to contradict concepts like baking quality it and the obvious increased costs of finding bugs late, or worse finding nobody wants or needs your software after you've built it…but again, with software, those are simply development or design issues, not production of the software.

So what do you think? Can you do it? You up to the challenge? For a full year, when discussing software with anyone, friends, family, colleagues or clients…use other development examples. It should at least make for an interesting mental exercise!


  1. I think the concept that causes misunderstanding is thinking of software development as an exercise in "production". If you are talking about the act of writing software, there is no production yet, only design activities. The production happens after it's released to a machine that runs code in response to user input.

    I maintain software dev is one long design activity up to the point it is released for fully automated production processes (running on a production server).

    1. Hey Troy, I totally agree with you. In fact, I think that in this case I would consider how you describe "design" and what I mean by "development" are very similar if not identical.


  2. This comment has been removed by a blog administrator.

  3. I just read this and I'm interested. No promises, but I'd like to start, and offer some advice. Instead of saying "Software development is kind of like building a house ..." I might say, instead "you know, this kind of reminds me of this one project. It was about three years ago. I was working at an insurance company, and we had to hit a date because of a government requirement ..."

    It's that easy. Forget the metaphors, and instead talk about what software is.

    I know, it might be crazy. But i'll give it a try, sure.

  4. a couple of examples to your challenge:
    - creating a recipe and then (or simultaneously) making a meal from it
    - performing jazz, including improvisation