Phase gates provide a structure to large project. The give the impression of being able to control a project or at least track it’s progress. The reality is that each phase cannot be verified until the next is complete and verified. This means that design defects are commonly discovered in final test. This tendency for phase gated projects to hide bad news is the source of the expression that 90% of all software projects are 90% done 90% of the time.
This trend was on display yesterday when congress was investigating the issues on healthcare.gov. Officals from QSSI and CGI both stated the end-to-end testing started too late. It is difficult to gain much insight from any post-mortem blame fest, much less one held in the national spotlight. In addition, I have no non-public knowledge about what happened during the project. Despite this, it would appear that phase gating was a major contributor of this.
Why would you start end-to-end testing too late? Because it is the final phase of testing and testing is the final phase of development. With a firm deadline, every slip in earlier phases of the project took time away from the most critical testing phase.
The solution to this problem is to define “done”. If each piece of functionality was end-to-end tested as it was developed, there would not have been any critical crunch of testing at the end. In addition, if the functionality was built starting with the most important features first, then the most important functionality (such as account creation) would have been working a long time ago.
The approach that I have described is agile development, we have been doing it for over twelve years now and it works. Of course there is no silver bullet in software development and it is not clear that functional but incomplete solution would have been acceptable, but it would have been better that what we got.