Traditionally, software development release cycles were measured in years. There were several distinct stages in development: business case/initiation, functional design, technical design, development, release/go-live, after care/operations. Each stage was closed before following into the next stage. The deliverables of the previous stage were the basis for the next and everything flowed downstream. Hence it was named the waterfall model.
The methods ensured an easy control between the stages and provided management with measurable targets and an overview on the process. The main assumption was that completing each phase would ensure a higher quality in the next phase. The main assumption is that every error, misunderstanding or unclarity should be resolved as early as possible. In this way, it costs the least amount of effort and money to fix. Completely finishing a stage before advancing to the next ensures that this is achieved. One of the main pitfalls was that, while the product was delivered according to specifications, it did not meet the market requirements. In a typical project, many things change along the way and new needs and solutions are discovered during the process. As life cycle of products shortened, these issues became more and more visible.