There are a number of practical techniques to consider in order to run successful software projects, and one of my favorite principles from lean software development is the following:
"Decide as late as possible and keep your options open as long as practical, but no longer."
The trick here is to postpone a decision until it's still possible to make such a decision without it being forced upon you.
This is opposite to the traditional approach of project management. In this domain, everything has to be known with absolute certainy in advance. That way, the future deadlines remain fixed despite many risks and unknown factors which may get in the way. Risks have to be known in advance and tackled appropriately.
For especially high-risk projects, this traditional approach is not feasible at all. For these projects, delaying decisions is a must since decisions based on empirical observations is much more valuable than those based on theory and speculation.
Delaying commitments means that flexibility and capacity for change need to be designed into the system from the very beginning.
See the book Lean Software Development by Mary and Rom Poppendieck.