You should expand on QA - or...I will.
QA is tasked to the very butts-in-seats who were tasked with writing the application. Being lazy bastards, they don't write QA tests that test functionality in all scenarios - they write QA tests that always pass in unrealistic perfect data scenarios.
You also missed the hand-off and ongoing support contracts.
The application is then handed to the customer. Naturally, the customer accepts delivery when all of the QA tests pass with flying colors. They begin training their users on the new system - which is made more difficult because as the users gain new knowledge - they lose old knowledge. Many die after forgetting how to breathe. Those who survive begin to input data that causes errors that the QA process was meant to catch. A support ticket is opened and the process starts over again. This generates another contract to fix the bug, which makes the managers happy because they get to have more "butts to bill".