“How are you coming on implementing that subsystem, Yvette?” asked the project manager, Dave.
“Pretty good, Dave. I’m about 90 percent done.”
Dave was puzzled. “Didn’t you say you were 90 percent done a couple of weeks ago?” he asked.
Yvette replied, “Yes, I thought I was, but now I’m really 90 percent done.”
Like nearly everyone, software developers are sometimes overly optimistic when they report how much of a task is complete. The common “90 percent done” syndrome doesn’t tell Dave much about how close Yvette really is to finishing the subsystem.
But suppose Yvette had replied, “Pretty good, Dave. Of the 84 requirements for the subsystem, 61 are implemented and verified, 14 are implemented but not yet verified, and I haven’t implemented the other 9 yet.” Tracking the status of each functional requirement throughout development provides a more precise gauge of project progress than top-of-the-head guesses about percent completion.
Tracking project status means comparing where you really are at a particular time against the expectation of what “complete” means for this development cycle. You might have planned to implement only certain flows of a use case in the current release or iteration, leaving full implementation for a future release. Monitor the status of just those functional requirements that were committed for the current release, because that’s the set that’s supposed to be 100 percent done before you declare success.
Requirement status is an example of a requirement attribute, a piece of descriptive information that accompanies and enriches the statement of a single requirement. The best way to handle requirement attributes, including status, is with a requirements management tool. Table 1 lists several possible requirement statuses.
Table 1. Suggested requirement statuses
The Rejected status lets you keep a proposed requirement available for possible future reference without cluttering up a specific release’s set of committed requirements. It’s valuable to keep a record of rejected requirements and the reasons they were rejected. Rejected requirements have a way of resurfacing later during development or on a future project.
You don’t need to monitor all of the possible statuses in Table 1; choose the ones that add value to your requirements activities. Some practitioners add other requirement status values, such as Designed (the design elements that address the requirement have been created and reviewed) and Delivered (the software containing the requirement is in the hands of the users, as for a beta test).
Classifying requirements into several status categories is more meaningful than trying to monitor the percent completion of each requirement or of the complete release baseline. Update a requirement’s status only when specified transition conditions are satisfied. Certain status changes also require updates to the requirements traceability data to indicate which design, code, and test elements addressed the requirement.
Figure 1 illustrates how you can visually monitor the status of a set of requirements throughout a hypothetical 10-month project. It shows the percentage of all the system’s requirements having each status value at the end of each month. Tracking the distribution by percentages doesn’t show whether the number of requirements in the baseline is changing over time. The number of requirements increases as scope is added and decreases when functionality is removed from the baseline. The curves illustrate how the project is approaching its goal of complete verification of all approved requirements. A body of work is done when all allocated requirements have a status of Verified, Deleted, or Deferred.
Projects following agile development methods can monitor story status by using statuses analogous to those described in Table 1 (Dean Leffingwell, Agile Software Requirements, Addison-Wesley, 2011):
- In backlog (the story is not yet allocated to an iteration)
- Defined (details of the story were discussed and understood, and acceptance tests were written)
- In progress (the story is being implemented)
- Completed (the story is fully implemented)
- Accepted (acceptance tests were passed)
- Blocked (the developer is unable to proceed until something else is resolved)
Some projects using agile practices monitor their progress with an iteration burndown chart. The team estimates the total amount of work to do on the project, often sized in units of story points, which can be defined in several ways. The story points are estimated from an understanding of the items (user stories and other work) in the product backlog. The story point total is thus proportional to the amount of effort the team must expend to implement the requirements and complete the other items. The team allocates certain items to each iteration based on their priority and their estimated size in story points. The team’s past or average velocity dictates the number of story points the team plans to deliver in an iteration of a particular calendar duration.
The team charts the story points remaining in the product backlog at the end of each iteration. This total will change as work is completed, as current items are better understood and re-estimated, as new items are added, and as pending work is removed from the backlog. That is, rather than monitoring the count and status of individual functional requirements or features — which can come in a wide range of sizes — the burndown chart shows the total work remaining to be done at a specific time.
Figure 2 illustrates a burndown chart for a hypothetical project. Notice that the scope remaining, as measured in story points, actually increased in iterations 2, 3, and 5. This indicates that more new functionality was added to the backlog than was completed or removed during the course of the iteration. The burndown chart helps the team avoid the “90 percent done” syndrome by making visible the amount of work remaining, as opposed to the amount of work completed, which doesn’t reflect the inevitable scope increases. The slope of the burndown chart also reveals the projected end date for the project, the point at which no work remains in the backlog.
Getting in the habit of tracking requirements or user story status as development proceeds will give you much more accurate information about how your team is really coming toward getting the product out the door.
This article is adapted from Software Requirements, 3rd Edition by Karl Wiegers and Joy Beatty. If you’re interested in software requirements, business analysis, project management, software quality, or consulting, Process Impact provides numerous useful publications, downloads, and other resources. Karl’s latest book is The Thoughtless Design of Everyday Things.