Best Practices
IEEE Software, Vol. 14, No. 2, March/April 1997
Software's Ten Essentials
Virtually every backpacker, rock climber, and recreational hiker in the Pacific
Northwest is familiar with the Seattle Mountaineers' list of "Ten Essentials":
extra clothing, extra food, sunglasses, knife, firestarter, first aid kit, waterproof
matches, flashlight, map, and compass.
The Ten Essentials are the end-product of years of hard-won experience. They are
intended to help mountaineers avoid getting into trouble in the first place, and, if that
doesn't work, to minimize the damage. No experienced mountaineer would go into the
mountains without the Ten Essentials.
Experienced software developers have also accumulated years of hard-won experience. Our
software adventures often contain more uncharted paths and dangerous territory than a
simple hike in the woods does, and so I propose a list of Ten Essentials for software
projects.
Software's Ten Essentials
A Product Specification is a software project's compass. Without one, you can
perform the work of Hercules and still not produce a working product because the work in
aggregate hasn't been aimed in any particular direction. Without good direction, any
individual's work can go the wrong direction and different people can work at cross
purposes.
With today's highly interactive systems it is becoming increasingly difficult to
capture the essence of a product specification without constructing a Detailed User
Interface Prototype. Static paper documentation often cannot adequately describe the
intended look and feel of a product. If the product specification is the compass, the
detailed user interface prototype is the trail map that points out the hills and valleys,
groomed trails and portions of the software outing that will require special skills.
A beneficial side effect of user interface prototyping is that it can be an effective
way of lighting a fire under both the customer and the development team. Visibly working
software is good for customer and developer morale. A user interface prototype isn't
working software, but it looks like working software, and it can have almost the same
effect.
No experienced hiker would think of going on a long hike without sufficient food,
water, and clothing. On a software project, a Realistic Schedule provides the
essential planning foundation for adequate staffing, adequate quality assurance
activities, and in general the appropriate level of formality in the project's software
processes. Every fall we hear of hikers trapped in the woods by an unexpected snowstorm.
Every spring we hear about a software product that was supposed to ship on January 1 but
which doesn't actually ship until many months later. Basing a software project on an
unrealistic schedule and the insufficient staffing and technical planning that result from
it is tantamount to heading into the woods in November without a warm jacket.
If a hiker gets into trouble, it's useful to know that a person can go for days without
food but not without water. A successful software project establishes Explicit
Priorities, so that if it gets into trouble it knows which features are essential and
which can be jettisoned. Explicit priorities help to avoid the problem of wanting all
possible features with the best quality in the shortest time with the least effort.
Setting "I want it all" priorities is tantamount to setting no priorities at
all. They provide no guidance when the project needs to make tough choices. Explicit
priorities make the tough choices easier.
A common theme running through the Ten Essentials is that of hoping for the best but
preparing for the worst. You wouldn't go hiking if you expected to break your leg, and you
wouldn't start a software project if you expected it to run 300 percent over budget. In
spite of your best hopes, however, you'd be foolish to go hiking without adequately
preparing for the risks inherent in the activity. Active Risk Management is also
a key component of successful software projects. As Tom Gilb says, if you do not actively
attack the risks on your project, they will actively attack you.
A Quality Assurance Plan is the software project's first aid kit. The first
priority in first aid is avoiding doing anything that will require you to use the first
aid kit. But even the most careful hikers sometimes get hurt, and in such a case a first
aid kit is essential. Many software projects perform the moral equivalent of leaving the
first aid kit in the car. By the time problems become too obvious to ignore, much of the
damage has been done. Defects have been inserted into the product and not corrected during
requirements and design activities. All that can be done at that point is to correct the
defects at great cost during construction and system testing. A good quality assurance
plan will orient the project toward detecting defects early, close to the point of
insertion and not allow defects to infect work later in the project.
For longer hikes, hikers have to file an itinerary. If the hikers file an itinerary for
a 3 day hike and haven't signed out after 3 or 4 days, the Forest Service sends out a
search party. Successful software projects use Detailed Activity Lists. These
lists are typically comprised of tasks that last a few days each and that are considered
to be either done or not done--not "90 percent done." Comparing the list of
completed activities to the list of planned activities indicates whether a project is on
time or needs to be rescued.
Software Configuration Management won't keep you warm and dry, but it will
keep you from succumbing to some of the more dangerous software project risks. At the most
basic level, software projects put source code under automated source code management.
This prevents problems such as one developer inadvertently overwriting each other's work.
Source code control is typically combined with an off-site backup plan so that if the
server with the master sources crashes you're not left out in the cold.
At a more esoteric level, the most successful projects also put designs, requirements,
and project planning materials under configuration management. When this is done, a change
in the schedule or budget requires explicit approval and notification of the concerned
parties. This helps to keep schedule and budget related decisions visible and prevents
hundreds of small changes from quietly accumulating into large schedule and budget
overruns.
Sometimes you'll see a hiker with a 20-year old backpack patched together with so much
duct tape and twine that you can't make out the original backpack; that's what software
systems developed without an explicit focus on Software Architecture look like.
Internally, software architecture promotes consistent design and implementation
approaches, which in turn facilitate future corrections and extensions. Externally, the
most visible aspect of explicit software architecture is its support for consistent user
interfaces. Consistency is a generally desirable characteristic that you attain almost
automatically when you have good architecture and only with great difficulty when you
don't.
One of the thorniest implementation problems is the problem of integrating software
components that were not designed with integration in mind. An explicit Integration
Plan is therefore the last of the Ten Essentials. With a good integration plan such
as the Daily Build process (see this column in IEEE Software, July 1996), you can almost
forget that integration tends to be a troublesome issue. Without an integration plan, you
can enter an extended integration, test, bug-fix cycle that exposes so many defects that
it can kill the project.
| Software's Ten Essentials |
1. A product specification
2. A detailed user interface prototype
3. A realistic schedule
4. Explicit priorities
5. Active risk management
6. A quality assurance plan
7. Detailed activity lists
8. Software configuration management
9. Software architecture
10. An integration plan |
Other Essentials
Several organizations have published similar lists of software project essentials. The
Software Project Manager's Network publishes a "Project Breathalyzer," which is
a ten question test designed to determine whether a project should be on the road. The
test is available on the Internet from http://www.spmn.com. The Standish Group published a
report titled "Charting the Seas of Information Technology" which included a
list of the top 10 success factors for MIS projects. The key process areas required to
advance from Level 1 to Level 2 of the Software Engineering Institute's Capability
Maturity Model might also be considered "essentials." You can read about those
in Capability Maturity Model for Software, Version 1.1 by Mark C. Paulk, et al,
which is downloadable from the SEI's website at http://www.sei.cmu.edu.
Editor: Steve McConnell, Construx Software, 11820 Northup
Way
#E200, Bellevue, WA 98005.
E-mail: steve.mcconnell@construx.com - WWW: http://www.construx.com/stevemcc/