More recent management techniques have resulted in an iterative approach to application development known as the Spiral Model, as seen in Figure 4.2. The stages of application development that make up this model are typically characterized as:
- Inception Application planning and analysis
- Elaboration Application design
- Construction Application implementation
- Transition Application assessment and stabilization
Walker Royce in Software Project Management: A Unified Framework notes that each stage typically involves five activity phases: requirements, design, implementation, deployment, and management. The Spiral Model's process is a continual circle through the stages of development, with each stage requiring multiple revolutions through the five phases. For example, the inception stage may require four iterations through the five RSIDM phases. The development life cycle is designed to define the product more tightly over time so that each iteration brings the product closer to the point of delivery.
Figure 4.2 Spiral Model
Like the Waterfall Model, the Spiral Model can run into problems, such as the following:
- Feature postponement Complex features—important to the customer and users—are moved to later iterations of the project. Postponing important features delays and decreases the project's ROI.
- Never-ending projects Individuals and organizations need to reach closure on projects, but a project can take on a life of its own, with work being done solely for the sake of the project, and not directed toward achieving business goals. If the project's business goals change after multiple project iterations, there is a tendency for team members to continue to work to get the next feature set completed, without addressing the changed goals. But the changing business goals directly affect the viability of the project, and best practices are often lost if those goals are not addressed.
- Unknown costs The continual iteration, which moves and postpones features, makes feature cost/benefit analysis difficult. The historical costs and benefits of the project are difficult to identify and use for future project justification.
- No sense of stability When systems are in a constant state of flux, the customer and users often feel that the product is unstable. Constant updating requires additional resources for product maintenance and significantly increases product deployment costs.
- Lack of automation Most organizations fail to invest adequate capital in the automation of the software development process. Significant up-front costs for automation and productivity tools are viewed as project expenses rather than capital investment. Without an automated development process, however, the number of iterations required to deliver a product can significantly delay its ship dates. Additionally, when the product is ready for deployment, lack of automated software deployment tools makes it difficult to continually update all users' computers with new product versions.