When we try to find out what’s different about software and software development, the first question that comes to mind is “Different from what?” So let’s compare software development to road building. We’ve all used roads; we know what they’re for and how they work. Roads are a very different product
from software. In their massive and immobile simplicity, they’re as unlike software as it is possible to be.
There are many differences between road building and software development. Software development is rarely affected by the weather, for example, whereas you shouldn’t begin excavating a cutting if the slope is soaking wet and subject to landslip. But is this a fundamental difference? No. Software projects are also affected by external events. If a third-party software component isn’t available on time, for example, then similar delays can occur.
The following sections introduce 12 distinct but interrelated differences between software development and other common business endeavors (see Figure 2-1). Road building has been chosen as the example to compare against because it displays none of these characteristics, so distinctions can be drawn as clearly as possible. However, this may not be the case for any other activities that come to mind, which might exhibit one or two, or even a few of these characteristics. What makes software development unique is that it encompasses them all.