Some thoughts on reducing the likelihood of failure with technical programs.

Jason Yip
4 min readFeb 27

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.

System Requirements → Software Requirements → Analysis → Program Design → Coding → Testing → Operations
“Waterfall” diagram from Managing the Development of Large Software Systems (1970) by Dr. Winston W. Royce

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.

Requirements, analysis, design, coding, testing, operations — all done together to lead to Release 1. Feedback from Release 1 informs the next iterative-increment. Repeat for Release 2. Keep repeating until Release N.
Iterative-incremental lifecycle

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:

Using set-based concurrent engineering increases the likelihood of success even further.

Jason Yip

Senior Manager Product Engineering at Grainger. Extreme Programming, Agile, Lean guy. Ex-Spotify, ex-ThoughtWorks, ex-CruiseControl