Different projects have different needs, even if they all need to be developed as quickly as possible. This chapter has described 10 software lifecycle models, which, along with all their variations and combinations, provide you with a full range of choices. Which one is fastest?
There is no such thing as a "rapid-development lifecycle model" because the most effective model depends on the context in which it's used. (See Figure 7-13.) Certain lifecycle models are sometimes touted as being more rapid than others, but each one will be fastest in some situations, slowest in others. A lifecycle model that often works well can work poorly if misapplied (as prototyping was in Case Study: Ineffective Lifecycle Model Selection).
To choose the most effective lifecycle model for your project, examine your project and answer several questions:
How well do my customer and I understand the requirements at the beginning of the project? Is our understanding likely to change significantly as we move through the project?
How well do I understand the system architecture? Am I likely to need to make major architectural changes midway through the project?
How much reliability do I need?
How much do I need to plan ahead and design ahead during this project for future versions?
How much risk does this project entail?
Am I constrained to a predefined schedule?
Do I need to be able to make midcourse corrections?
Do I need to provide my customers with visible progress throughout the project?
Do I need to provide management with visible progress throughout the project?
How much sophistication do I need to use this lifecycle model successfully?
After you have answered these questions, Table 7-1 should help you decide which lifecycle model to use. In general, the more closely you can stick to a linear, waterfall-like approach—and do it effectively—the more rapid your development will be. Much of what I say throughout this book is based on this premise. But if you have reasons to think that a linear approach won't work, it's safer to choose an approach that's more flexible.
CROSS-REFERENCE
For more on why a linear, waterfall-like approach is most efficient, see Wisdom of Stopping Changes Altogether in Mid-Project: Feature-Creep Control.
Table 7-1. Lifecycle Model Strengths and Weaknesses
Lifecycle Model Capability | Pure Waterfall | Code-and-Fix | Spiral | Modified Waterfalls | Evolutionary Prototyping |
---|---|---|---|---|---|
Works with poorly understood requirements | Poor | Poor | Excellent | Fair to excellent | Excellent |
Works with poorly understood architecture | Poor | Poor | Excellent | Fair to excellent | Poor to fair |
Produces highly reliable system | Excellent | Poor | Excellent | Excellent | Fair |
Produces system with large growth envelope | Excellent | Poor to fair | Excellent | Excellent | Excellent |
Manages risks | Poor | Poor | Excellent | Fair | Fair |
Can be constrained to a predefined schedule | Fair | Poor | Fair | Fair | Poor |
Has low overhead | Poor | Excellent | Fair | Excellent | Fair |
Allows for midcourse corrections | Poor | Poor to excellent | Fair | Fair | Excellent |
Provides customer with progress visibility | Poor | Fair | Excellent | Fair | Excellent |
Provides management with progress visibility | Fair | Poor | Excellent | Fair to excellent | Fair |
Requires little manager or developer sophistication | Fair | Excellent | Poor | Poor to fair | Poor |
Each rating is either "Poor," "Fair," or "Excellent." Finer distinctions than that wouldn't be meaningful at this level. The ratings in the table are based on the model's best potential. The actual effectiveness of any lifecycle model will depend on how you implement it. It is usually possible to do worse than the table indicates. On the other hand, if you know the model is weak in a particular area, you can address that weakness early in your planning and compensate for it—perhaps by creating a hybrid of one or more of the models described. Of course, many of the table's criteria will also be strongly influenced by development considerations other than your choice of lifecycle models.
Here are detailed descriptions of the lifecycle-model criteria described in Table 7-1:
Works with poorly understood requirements refers to how well the lifecycle model works when either you or your customer understand the system's requirements poorly or when your customer is prone to change requirements. It indicates how well-suited the model is to exploratory software development.
Lifecycle Model Capability | Staged Delivery | Evolutionary Delivery | Design-to-Schedule | Design-to-Tools | Commercial Off-the-Shelf Software |
---|---|---|---|---|---|
Works with poorly understood requirements | Poor | Fair to excellent | Poor to fair | Fair | Excellent |
Works with poorly understood architecture | Poor | Poor | Poor | Poor to excellent | Poor to excellent |
Produces highly reliable system | Excellent | Fair to excellent | Fair | Poor to excellent | Poor to excellent |
Produces system with large growth envelope | Excellent | Excellent | Fair to excellent | Poor | N/A |
Manages risks | Fair | Fair | Fair to excellent | Poor to fair | N/A |
Can be constrained to a predefined schedule | Fair | Fair | Excellent | Excellent | Excellent |
Has low overhead | Fair | Fair | Fair | Fair to excellent | Excellent |
Allows for midcourse corrections | Poor | Fair to excellent | Poor to fair | Excellent | Poor |
Provides customer with progress visibility | Fair | Excellent | Fair | Excellent | N/A |
Provides management with progress visibility | Excellent | Excellent | Excellent | Excellent | N/A |
Requires little manager or developer sophistication | Fair | Fair | Poor | Fair | Fair |
Works with poorly understood architecture refers to how well the lifecycle model works when you're developing in a new application area or when you're developing in a familiar applications area but are developing unfamiliar capabilities.
Produces highly reliable system refers to how many defects a system developed with the lifecycle model is likely to have when put into operation.
Produces system with large growth envelope refers to how easily you're likely to be able to modify the system in size and diversity over its lifetime. This includes modifying the system in ways that were not anticipated by the original designers.
Manages risks refers to the model's support for identifying and controlling risks to the schedule, risks to the product, and other risks.
Can be constrained to a predefined schedule refers to how well the lifecycle model supports delivery of software by an immovable drop-dead date.
Has low overhead refers to the amount of management and technical overhead required to use the model effectively. Overhead includes planning, status tracking, document production, package acquisition, and other activities that aren't directly involved in producing software itself.
Allows for midcourse corrections refers to the ability to change significant aspects of the product midway through the development schedule. This does not include changing the product's basic mission but does include significantly extending it.
Provides customer with progress visibility refers to the extent to which the model automatically generates signs of progress that the customer can use to track the project's status.
Provides management with progress visibility refers to the extent to which the model automatically generates signs of progress that management can use to track the project's status.
Requires little manager or developer sophistication refers to the level of education and training that you need to use the model successfully. That includes the level of sophistication you need to track progress using the model, to avoid risks inherent in the model, to avoid wasting time using the model, and to realize the benefits that led you to use the model in the first place.
3.145.65.134