Waterfall development methodologies have the advantages of identifying
requirements long before programming begins and limiting changes to the requirements
as the project proceeds. The key disadvantages are that the design must be
completely specified before programming begins, a long time elapses between the
completion of the system proposal in the analysis phase and the delivery of system,
and testing is treated almost as an afterthought in the implementation phase. In addition,
the deliverables are often a poor communication mechanism, so important
requirements may be overlooked in the volumes of documentation. If the project team
misses an important requirement, expensive post-implementation programming may
be needed. Users may forget the original purpose of the system, since so much time
has elapsed between the original idea and actual implementation. Also, in today’s
dynamic business environment, a system that met the existing environmental conditions
during the analysis phase may need considerable rework to match the environment
when it is implemented. This rework requires going back to the initial phase and
making needed changes through each of the subsequent phases in turn.