Different software development projects fail in different ways ”and, unfortunately , too many of them fail ”but it is possible to identify a number of common symptoms that characterize these kinds of projects: [2] [3]
[2] Caper Jones, Patterns of Software Systems Failure and Success . London:International Thompson Computer Press, 1996
[3] Edward Yourdon, Death March: Managing "Mission Imposible" Projects . Upper Saddle River, NJ: Prentice-Hall, 1997.
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
Poor software quality
Unacceptable software performance
Team members in each other's way, making it impossible to reconstruct who changed what, when, where, and why
An untrustworthy build-and-release process
Unfortunately, treating these symptoms does not treat the disease. For example, the late discovery of serious project flaws is only a symptom of larger problems, namely, subjective project status assessment and undetected inconsistencies in the project's requirements, designs, and implementations .
Although different projects fail in different ways, it appears that most of them fail because of a combination of the following root causes:
Ad hoc requirements management
Ambiguous and imprecise communication
Brittle architectures
Overwhelming complexity
Undetected inconsistencies in requirements, designs, and implementations
Insufficient testing
Subjective assessment of project status
Failure to attack risk
Uncontrolled change propagation
Insufficient automation