The first model we want to discuss is the grandfather of
all life cycle models. And it is the waterfall model. In
the waterfall model the project progresses to an orderly sequence of
steps. From the initial software concept, down until the final phase.
Which is system testing. And at the end of each phase
there will be a review to determine whether the project is
ready to advance to the next phase. The pure waterfall model
performs well for softer products in which there is a stable
product definition. The domain is well known and the technologies
involved are well understood. In these kind of domains, the
waterfall model helps you to find errors in the early,
local stages of the projects. If you remember what we discussed,
this is the place where we want to find errors,
not down here because finding them here will reduce the cost
of our overall software development. The main advantage of the
waterfall model is that it allows you to find errors early.
However, the main disadvantages of the waterfall model arise
from the fact that it is not flexible. Normally,
it is difficult to fully specify requirements at the
beginning of a project. And this lack of flexibility is
far from ideal when dealing with project in which
requirements change, the developers are not domain experts or
the technology used are new and evolving, that is
it is less than ideal for most real world projects.