The most widely known iterative methodology in software development is the Rational Unified Process (RUP). It’s a framework for managing projects in a way that kind of resembles real life. Meaning that the first time you do something you do the best you can with the information in front of you. Then, you try harder the next time given what you’ve learned. One of 3 things will happen the next time around; (1) you’ve improved, (2) you’re about the same, or (3) you’ve gotten worse. Here’s something surprising that may not sound intuitive; all three situations are a win.
That doesn’t sound right, does it? How can I win, when I lost or stayed the same?
The answer is that in all three situations you’ve measured your performance, which gives you a better chance to set proper expectations the next time around. See, we’re not trying to be the best at predicting outcomes; we’re merely trying to do the best we can to beat unexpected obstacles and make progress. Software development teams who don’t hit their deadlines have done nothing wrong. In fact, they’ve done a more honest job than teams that claim to predict the future. In the end they have software to show off; it’s just being built at a slower pace than some people may have anticipated.
What we have here is a problem setting proper expectations, not a problem delivering software. Ultimately building software is not a predictive endeavor, it’s an adaptive and creative one.