An iteration (also called a sprint) is the period of time it takes to produce something that works well enough to show to the user.
At the end of an iteration, users get to try out the functionality. They can and accept it or send it back for more work.
- Acceptance means the user agrees that the acceptance criteria stated in the user story have been met, and the capabilities as implemented support the needs that the user identified.
- Rejection means the product, as implemented, does not support the user's requirements. Sometimes this means the development team has not understood the user story the way the product owner meant it. Sometimes it means the user's initial ideas turned out not to be so helpful in practice. In either case, this leads to more analysis and development work.
Keeping iterations as short as possible helps reduce the time spent on corrections when features don't meet the users' expectations. It is less costly to redo two weeks of development than six or eight weeks.
Shorter, more modest iterations also tend to generate more reliable burndown data for estimating further work.