One of the first explicit formalizations of a development process is the so-called Waterfall model. The Waterfall model suggests a sequential organization of the development activities. Only completing one activity allows starting its successor activity. The completion of an activity is typically associated with the delivery of a product, e.g., documentation or program code; therefore, the Waterfall model is oftentimes regarded as a document-driven process model [Boe88].
The Waterfall model was probably the first popular process model, and it is still widely adopted in may development situations today. Its main shortcoming is its inflexibility in adapting already completed activities in response to changing requirements or knowledge emerging in later stages of the development process. Also, bad design decisions that are taken early in the process are propagated unchanged to subsequent activities, i.e., in a strict Waterfall model it is difficult to undertake retroactive actions to fix errors made in already completed activities.
A variance of the Waterfall model, which has been introduced to address this shortcoming, is the Waterfall model with feedback. It keeps the sequential order of activities, but also allows backward communication (e.g., from the implementation activity to the design activity) in order to accommodate changes that impact previous activities.
The waterfall model is the sequential design process, which is generally used in the software development processes, wherein development is seen as flowing progressively downwards ( just like the waterfall) via the phases of the Initiation, Conception, Analysis, Construction, Design, Maintenance and Testing.
The waterfall development model actually comes from the construction and manufacturing industries: highly structured physical environments wherein after-the-fact fluctuates are prohibitively expensive, if not impossible. Therefore no formal software development techniques or methodologies existed at the time; and this hardware-oriented model was just adapted for the software development.