3. Little room for use of iteration, which can reduce manageability if used.
4. Depends upon early identification and specification of requirements, yet users may not be
able to clearly define what they need early in the project.
5. Requirements inconsistencies, missing system components, and unexpected development
needs are often discovered during design and coding.
6. Problems are often not discovered until system testing.
7. System performance cannot be tested until the system is almost fully coded, and undercapacity
may be difficult to correct.
8. Difficult to respond to changes. Changes that occur later in the life cycle are more costly
and are thus discouraged.
9. Produces excessive documentation and keeping it updated as the project progresses is
time-consuming.
10. Written specifications are often difficult for users to read and thoroughly appreciate.
11. Promotes the gap between users and developers with clear division of responsibility.