Bristle Software Design Tips

This page is offered as a service of Bristle Software, Inc.  New tips are sent to an associated mailing list when they are posted here.  Please send comments, corrections, any tips you'd like to contribute, or requests to be added to the mailing list, to tips@bristle.com.

Table of Contents:
  1. Software Is Inherently Hard To Schedule
Details of Tips:
  1. Software Is Inherently Hard To Schedule

    Original Version: 12/1/1987
    Last Updated: 11/21/2009
    Applies to: All software development

    Frustrated by people telling you that you should be better at estimating how long a software development effort will take?  Tired of beating yourself up for it?  Here's why it's so hard.

    Custom software is fundamentally different from any other product for two reasons:

    1. It is infinitely copiable.
    2. It is unknown and never before done.

    Buildings, bridges and other physical products cannot be instantly cloned.  If you have one and need two, you have to build a second one from scratch.  You can reuse the design, and the techniques, but not the bricks, steel, etc.  Therefore, in the construction industry, it makes sense to build the same thing over and over, and to become very good at predicting how long it will take.

    However, software is infinitely copiable.  There is never a need to re-build a copy of exactly what you already have.  Therefore all software development is custom software development.  Predicting development time becomes harder.

    Furthermore, the definition of custom software is that which is not well enough known to build into the hardware, or to generate automatically.  As soon as a type of product becomes familiar enough, it is embedded in hardware and mass produced.   Or it is generated automatically by other software that can instantly generate any well-understood variant.  Such a product is no longer custom software.  Therefore all custom software is complex software that is not well understood.

    For these reasons, any comparison of custom software development to the repetitive product development in other industries like construction, with the implication that accurate long-term scheduling should be possible, is invalid.   Anyone who claims to be able to tell you exactly how long it will take to write a large piece of custom software for you is a liar, a thief or incompetent.  If he is not lying, and can really tell you exactly how long it will take, he must have found a way to generate it, and should not be charging you for a custom development effort.  If he's not planning to generate it, but has done it manually often enough to know exactly how long it takes, he is incompetent for never having automated it.

    So, what's the solution?  Don't try to estimate too far in advance.  In other words, use Agile Software Development, not the old Waterfall model.  For more info, see the Agile row of my links page:

        http://bristle.com/~fred/#agile_software

    --Fred