Concurrent software development means starting development when only partial requirements are known and developing in short iterations that provide the feedback that causes the system to emerge. Concurrent development makes it possible to delay commitment until the last responsible moment, that is, the moment at which failing to make a decision eliminates an important alternative. If commitments are delayed beyond the last responsible moment, then decisions are made by default, which is generally not a good approach to making decisions.
—Lean Software Development: An Agile Toolkit, Mary and Tom Poppendieck
Make decisions as late as you can responsibly wait as this is the moment at which you have the most information on which to base the decision.
There is criticism of this approach but most of it boils down to last responsible moment being too short-sighted and not including some criteria.
There is no universal definition of Last Responsible Moment, but some considerations may help:
- When making decisions too early, you’re operating from incomplete information. Taking time to gather more information can help you decide better.
- If decision is important, that does not mean it is important right now.
- Waiting too long is dangerous because that can close down some alternatives, so you have no choice to make.
- Make decisions to keep others from being delayed or bogged down waiting for you to get your act together. Remember that you’re collaborating with others.
- Remember that executing decisions is not instantaneous and can take considerable time.
- Depending on the problem, you might never have enough information. You might have to bite the bullet and make decision from incomplete input. Avoid analysis paralysis. Revisit your decisions later.
- This applies to non-implementation decisions as well. e.g., you should delay making requirement decisions.