Software Development; Programming Methodologies; Software Engineering
Waterfall development is a software development methodology based on a series of defined, ordered phases. Waterfall development is used to develop software systems where the system requirements are known at the start of the project and are unlikely to change during development. Waterfall development works best when used with mature, stable technologies and experienced teams.
Waterfall development is a software methodology based on a series of defined, ordered phases. Each phase is completed before the next phase is begun. In the model's most basic form, no phase is repeated. Outputs from each phase usually serve as inputs for the phase that follows. The waterfall model is simple and straightforward. It is also one of the oldest and most widely used software development methodologies. It grew out of manufacturing and other industries that used a similar linear, step-by-step methodology for business systems and models. Many later software development models were designed to address perceived weaknesses in the standard waterfall model.
Different versions of the model have varying numbers of phases or names for the phases. At its most basic, the methodology has five phases: requirements analysis, system design, implementation, testing (verification), and maintenance. Many versions further include a deployment phase between verification and maintenance.
During requirements analysis, all possible requirements for the system are identified, documented, and approved by the project's stakeholders. Some versions break this phase into separate planning and analysis phases. Identifying all needed requirements at this stage is crucial, as the model does not easily incorporate changes to requirements and specifications in later phases.
During system design, those defined requirements and specifications are used to develop a detailed system design. This design specifies the overall system architecture and the hardware and software technologies that will be used to implement the system.
The system design is used to create working systems during implementation. This is the phase when code is written. The components that will make up the system are developed and go through unit testing.
Once the components have been developed, they are integrated into a single system for verification, or the integration and testing phase. After integration, components are tested to ensure the entire system interoperates correctly and is error free.
During deployment, the integrated and tested final system, or release, is delivered to the customer or made available for use or sale. The final phase is maintenance. During this phase, any errors or other problems that are detected once the system is in use are identified and corrected. Further releases designed to improve the system may be developed and deployed during this phase.
Waterfall development has been used successfully for decades. The methodology is easy to understand and manage as each phase has agreed upon deliverables, a formal review process, and is completed before the next phase is begun. Projects that use this methodology are usually well documented. There is minimal customer and end-user involvement after the requirements phase. Because the design is finalized early on and changes little in development, waterfall development works well for projects where systems are integrated with other systems. The method also minimizes the potential for the “piecemeal effect” to affect a project. No new components that might introduce errors and other problems into the system later in development are added after the design phase.
However, waterfall development is not well suited for all scenarios. Iterative development models such as rapid application development (RAD) and spiral development are better for projects with loosely defined requirements that will likely change in development and testing. Similarly, systems and applications designed for release in a fast-moving, competitive environments are more suited for agile and iterative development methodologies that focus on producing working systems in the shortest time.
Waterfall development is a proven methodology that works well when developing straightforward systems with clearly defined requirements using proven technologies. It is well suited for use in industries such as construction and manufacturing that use linear, step-by-step business and production models. The simplicity of the model, along with its easy-to-under-stand linear process, set phases and deliverables, and robust documentation, makes it well suited for organizations that lack software development resources and experienced project managers. Despite being among the oldest software development methodologies, waterfall development continues to offer advantages to developers and other stakeholders in many scenarios.
—Maura Valentino, MSLIS
Bell, Michael. Incremental Software Architecture: A Method for Saving Failing IT Implementations. John Wiley & Sons, 2016.
Friedman, Daniel P., and Mitchell Wand. Essentials of Programming Languages. 3rd ed., MIT P, 2008.
Jayaswal, Bijay K., and Peter C. Patton. Design for Trustworthy Software: Tools, Techniques, and Methodology of Developing Robust Software. Prentice Hall, 2007.
MacLennan, Bruce J. Principles of Programming Languages: Design, Evaluation, and Implementation. 3rd ed., Oxford UP, 1999.
Scott, Michael L. Programming Language Pragmatics. 4th ed., Morgan Kaufmann Publishers, 2016.
Van Roy, Peter, and Seif Haridi. Concepts, Techniques, and Models of Computer Programming. MIT P, 2004.
Wysocki, Robert K. Effective Project Management: Traditional, Agile, Extreme. 7th ed., John Wiley & Sons, 2014.