I'm at the PNSQC conference this week, and gave a talk where I said pragmatic project managers select a life cycle that manages the big risks for them, so they can pay attention to the other risks. At some point, I said, "If you ever hear:"
- If we could just get the requirements right
- If we could just get the architecture right
- If we could just get the design right
- If we could just get the testing right
Anything you hear that starts "If we could just" and ends in getting something right means you are not choosing a life cycle that manages the risks you have. That's a project smell.
Some projects are big, risky, complex, scary, whatever. You still have to do them. But you can choose which risks you can allow your life cycle to manage for you.
Serial life cycles originally existed to manage cost. You were supposed to re-estimate the project after each phase to decide if you wanted to continue. We haven't done that since the '70s. Now, serial life cycles don't manage any risks for you, as an inherent part of the life cycle.
Iterative life cycles manage technical risk because they provide experience with building pieces of the product. Incremental life cycles manage schedule risk because they have people work in feature chunks, integrating and testing as you go. Agile life cycles manage both technical and schedule risk because they allow you to gain experience with the features inside a timebox, so you always know how long and how risky things are to do.
If you find yourself saying "If we just...", you have a project smell of some sort. Make sure it's not your life cycle.
(For more information on life cycles, take a look at What Lifecycle? Selecting the Right Model for Your Project