The waterfall model is a sequential software development model in which development is seen as flowing steadily downwards (like a waterfall) through several phases.
History of the Waterfall Model
In 1970 Royce proposed what is now popularly referred to as the waterfall model as an initial concept, a model which he argued was flawed (Royce 1970). His paper then explored how the initial model could be developed into an iterative model, with feedback from each phase influencing previous phases, similar to many methods used widely and highly regarded by many today.
Despite Royce's intentions for the waterfall model to be modified into an iterative model, use of the "waterfall model" as a purely sequential process is still popular, and, for some, the phrase "waterfall model" has since come to refer to any approach to software creation which is seen as inflexible and non-iterative.
Usage of the waterfall model
In Royce's original waterfall model, the following phases are followed perfectly in sequential order:
The waterfall model maintains that one should move to a phase only when its preceding phase is completed and perfected. Phases of development in the waterfall model are thus discrete, and there is no jumping back and forth or overlap between them.
As many find this approach particularly rigid, modifications have been made over the years and new variants of the model have emerged.
Criticism of the waterfall model
The waterfall model however is argued by many to be a bad idea in practice, mainly because of their belief that it is impossible to get one phase of a software product's lifecycle "perfected" before moving on to the next phases and learning from them. A typical problem is when requirements change midway through, resulting in a lot of time and effort being invalidated due to the "Big Design Up Front".
In summary, the criticisms of a non-iterative development approach (such as the waterfall model) are as follows: