Software development, what's different?
Page 1 of 2
You are in charge of getting a new system developed and implemented.
You have met with all interested parties and outlined what the system
needs to do. A developer is hired and is given the plan. You feel
confident that all is well and your system will be a success
?will it?
Not so fast. Six months later the project is already late and over budget.
The developer who replaced the original one is working 12 hours a day
but the software never seems to get any closer to completion.
Part of the problem is the users say the software does not do what they
want and they keep asking for "must have" changes; also there is a ton
of bugs being found during tests. What went wrong?
Whatever it is your not alone.
The 2006 (Standish Group, 2008) indicates software projects generally
do not meet one or more of the cost (budget), time (schedule), or scope
requirements and only 35% of projects were successfully completed ? while
19% of projects were failures, and the remaining 46% were considered
challenged. An outcome labeled as successful must meet all three of the
triple constraint parameters. A challenged outcome is one that that was
completed and operational but did not meet one or more of the triple constraint
parameters and a failed outcome is a project that was started,
but was canceled at some time during the development cycle.
An analysis of approximately 250 software projects between 1995 and 2004
showed an interesting pattern. When comparing projects that were successful
vs. those that ran late, were over budget, or were canceled without completion,
the primary reasons were related to poor project management practices rather
than any other factors (Capers Jones, 2004).
In contrast, things look very different in the engineering and
construction industry. According to the Engineering News-Record,
94 percent of the project customers they queried were satisfied
with the results of their projects, which suggests that construction
projects have much lower failure rates than software projects.
NOTE: These numbers are from older reports because they were freely available.
Over my Information Systems career, I have always wondered why software
development is so different from say building a bridge. After all,
if the bridges had a failure rate of 19% and 46% were questionable
people would stick to ferries. Could it be that the level of education,
and training of IT professionals is lacking? As a rule do persons in this
field make more mistakes than the rest of the population? Are consumers of
these products more naive than most? If the primary reason for failure is
project management then why? Again, are the people involved somehow less
motivated, educated, or talented than project management teams who build bridges?
As it turns out it is not people, but the product itself. Building software is
different than building bridges or cars or houses. It cannot easily be build
using the traditional methods of project management. The following summaries
point out how software and the process of building software are unique and
different. Hopefully once you are aware of them, your next software project
will be a success.
Software is Intricate
Even a modest program can consist of thousands of lines of code. But the
number of lines only begins to tell how complex a program is. There are
many sets of instructions in a program and these instructions interact with
other instructions to accomplish tasks. There are various inputs and outputs
to and from varying devices and third party systems. Errors must be anticipated
and handled to prevent incorrect results or system failure.
Computer programs are the most intricate, delicately balanced and
finely interwoven of all the products of human industry to date. They
are machines with far more moving parts than any engine: the parts
don't wear out, but they interact and rub up against one another in
ways the programmers themselves cannot predict. [Gleik 1992]
Software is Intangible
Software doesn't have height or width, it has no mass or volume, and you can't
perceive it as you would a bridge. When a bridge is being built you can see the
parts being put together, even before it is complete you can envision it. Software
is more spectral; it is the instructions for a group of behaviors. You might be
able to visualize individual behaviors but things tend to blur as you try to pan
out to large numbers of sequential and alternative behaviors.
The same things that make it hard to visualize software make it hard to
draw blueprints of that software. An architectural drawing of a bridge shows the most
minute details of the structure yet it most certainly is not a bridge. The architectural
drawing corresponds to the structure, but it's not the same as the structure.
Software, conversely, is just instructions for the behaviors that the
programmers and users want to happen. The blueprint and the program are one in the
same. Once the instructions has been completely written, then the software has
been created. Nothing else needs to be done. We have automatic tools that
convert this representation into a binary that the computer can execute.
This is an important realization: any architecture, design, or diagram we create for
software is essentially inadequate. If we represent every detail, then we're merely
duplicating the software in another form, and we're wasting our time and effort.
Requirements are Deficient
Rarely do the people who use the software have experience dealing with the abstraction
and complexity of software. They are the expert in the business processes the software
is being designed for and understand the main behaviors that are required, however they
cannot be expected to take into account all of the alternative flows and error conditions,
and how different sets of requirements relate to each other.As stated previously, accurate
requirements are only realized as the completed software.This means that any specification
of requirements for software is likely to be incomplete in important ways.
As the users start seeing the developed software it becomes clearer to them and they start
adding "essential change requests". They do this because they're just not able to
visualize a system of this complexity until it's at least partially complete.
Users and developers must work together throughout the development, refining the
requirements. Users need to revise the features based on their testing of the system
as it is being built.
Technology Changes Rapidly
Twenty years ago we were struggling with the MS-DOS operating system and
creating simple spreadsheets on our PCs. Today we edit video on our computers
and connect to systems across the world. Computers double in speed about
every two years, and this opens up more and more opportunities for software
developers. Software changes quickly?we all know that?but we may not be
aware of just how quickly it changes, and what impact this has on any new
software we try to build.
In contrast, we've been building bridges for thousands of years, ever since
the time of the ancient Roman and Chinese civilizations. The problem is well
understood, and the technologies change slowly. The first design for a bridge resembling
the modern suspension bridge was in 1595, and that basic technology is still what we use
today.
Continued in next post......
|