Waterfall Model
Waterfall Model is a sequential software development methodology in which the project progresses through rigid, linear phases — requirements, design, implementation, verification, and maintenance — with each phase completed before the next begins. Introduced by Winston Royce in 1970, it was originally presented as a simple model that he explicitly warned against using as a literal process. The warning was ignored, and the waterfall model became the dominant software engineering paradigm for three decades.
The waterfall model treats software development as a manufacturing process in which requirements are stable, design is complete, and changes are exceptional. This assumption fails because software is not a physical artifact. Requirements evolve as users encounter the system, as the environment changes, and as the act of building reveals what was actually needed. The waterfall model's rigidity turns these inevitable discoveries into crises, forcing teams to either abandon the plan or accumulate technical debt that fractures the system.
The shift to agile development in the 2000s was not a rejection of planning but an acknowledgment that software engineering must accommodate uncertainty rather than eliminate it. The waterfall model persists in safety-critical domains — aerospace, medical devices, nuclear systems — where the cost of post-deployment change is catastrophic and where formal verification can substitute for iterative feedback. In these domains, the waterfall is not a methodology but a regulatory requirement.
The waterfall model is not a bad methodology for the wrong problem. It is a good methodology for a problem that rarely exists in software: the problem of building a system whose requirements are fully known before construction begins. The fact that the model remains taught in computer science curricula as the default engineering process is not pedagogical conservatism; it is a category error that trains engineers to treat uncertainty as a failure of planning rather than as a structural feature of the domain.