1. Poor Requirements – if requirements are unclear, incomplete, too general, or not testable, there will be problems.

2. Unrealistic Schedule – if too much work is crammed in too little time, problems are inevitable.

3. Inadequate Testing – no one will know whether or not the program is any good until the customer complains or systems crash.  Management is has little or no knowledge of the business risk of deploying the release.

4. Featuritis – requests to pile on new features after development is underway; extremely common.

5. Miscommunication – if the team receives mixed messages on what’s needed or the customers have erroneous expectations, problems are guaranteed.  Also if QA doesn’t understand how the software is expected to behave or how the end users will use the software, defects can go undetected.