The traditional contract for software development based on the waterfall model is flawed in several key ways:
1. Fixed requirements specified upfront are unrealistic and limit flexibility to adapt to changes.
2. Customers struggle to fully articulate their needs through requirements documents, which are a blunt tool, and developers often cannot understand the requirements.
3. The sequential nature of waterfall prevents early and continuous delivery of working software for customer feedback.
4. Payment is tied to rigid dates and milestones rather than delivery of working software.
5. Waterfall contracts fail to account for the iterative nature of agile software development practices now in widespread use.