Do You Have these Problems?
Inaccurate understanding of end-user needs
Inability to deal with changing requirements
Modules that don't fit together
Software that’s hard to maintain or extend
Late discovery of serious project flaws
Unacceptable software performance
Team members in each other’s way, unable to reconstruct who changed what, when, where, why
An untrustworthy build-and-release process