Some thoughts on reducing the likelihood of failure with technical programs.
Use an iterative-incremental lifecycle.
Using a serial lifecycle (aka waterfall or SDLC) increases the likelihood of failure.
If you are using a serial or waterfall lifecycle, you are increasing the likelihood of failure.