The software development process is driven by requirements. Typically, the focus is on defining precise requirements and then implementing exactly those requirements. However, once delivered, virtually every major software product produces major disappointments for its customers as new requirements emerge. Experts agree that it is unrealistic to specify precise requirements:

Detailed specification writing is often wasted effort because rapid changes occur during the project, making the specifications obsolete [McConnell, 1996].