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.
But what if the problem is trivial? Once you’re in “program” territory, it’s highly unlikely that the effort is trivial enough to risk waterfall.
Note: Using a “hybrid waterfall” is still unnecessarily risking failure.
Using an iterative-incremental lifecycle increases the likelihood of success.
If you use an iterative-incremental lifecycle, you are increasing the likelihood of success.
The best way to validate that you are building the right thing is through concrete feedback. Even the best analysis up front is unlikely to be more effective and is almost always slower. The best way to avoid integration hell is to integrate and test early. Even the best specifications up front are unlikely to anticipate what actually happens when something is integrated for real.
But what if the problem is trivial? 1. Once you’re in “program” territory, it’s highly unlikely that the effort will be trivial; 2. Even it does end up being trivial, at worst, iterative-incremental adds a little more overhead than necessary. “A little more overhead than necessary” doesn’t cause program failure, building the wrong thing or integration hell can cause program failure.
See also:
- Don’t Know What I Want, But I Know How to Get It — Help your organization focus on successful outcomes (jpattonassociates.com)
- What is Agile? by Henrik Kniberg