Iteration is at the heart of agile development practices. In an agile project you do something, measure your progress, and then use the feedback from the measurement to figure out what to do next. This cycle allows you to follow the Agile Manifesto value Responding to change over following a plan by providing for points in time where you can measure your progress at the project level. Whether your approach to agile is project-focused like Scrum or development-focused, like extreme programming, iteration is what drives an agile project.
Agile methods use engineering practices such as Unit Testing and Continuous Integration to provide for feedback cycles close to the code. The Iteration allows for a feedback at the macro level, giving the stakeholders the ability to view progress in short regular feedback cycles.
While iteration is key to agile development working within iterations can be challenging for customers and developers alike.
In an agile project the team is group of people delivering the application code. This includes developers, testers, designers, etc. The product owner , sometimes referred to as the customer, is the person specifying the functionality that the team will deliver and the priorities. The product owner specifies what will be built and the team decides how to build it.
The product owner maintains the product backlog, a prioritized list of everything that may be in the product someday. The portion of the product backlog that the product owner assigns to the iteration is the iteration backlog .
Incremental development means building parts of a system, for example working on the interface to the database. Iteration means starting with a rough solution that works, then improving on it as you go. Jeff Patton explains the difference between incremental and iterative development quite concisely in his article The Neglected Practice of Iteration . In practice, teams combine iteration and incremental development, but it iterating on an end-to-end solution is what lets you validate requirements.
In an agile project, an iteration is a fixed period of time during which a team implements a set of features, which result in a shippable increment of the product or project. This period of time is referred to as a Sprint in Scrum. XP refers to a weekly cycle . Regardless of the name, the key features of an agile iteration are:
- It is time boxed. There is a fixed start and end.
- The amount of work that is planned to be completed during the iteration should not change during the iteration.
- It starts with a planning activity.
- It ends with a review activity.
- At the end there is a shippable product or project increment that can be refined in future iterations.
The last point highlights the difference between iterative and incremental development: each iteration helps the project or application take shape so that the product owner can validate the state of the project with the current goals of the project.
The basics of iterations are that team will:
- Commit to a list of items.
- Work on the list.
- Review what was done.
To iterate successfully an agile team must follow certain activities.
During an iteration, the key activities are:
- Estimating and Planning
The iteration starts with the product owner assigning items off of the product backlog to the iteration. The team then meets and plans how they can complete the backlog items by the end of the iteration. If the team is not confident that they can complete the planned work within the iteration, the team should raise their concerns with the product owner and revise the backlog for that iteration.
It is important to have a realistic iteration backlog so that the team and the product owner have common expectations. While it is not unreasonable to have work in queue in case the team finishes their work early, planning to do more work than can be done leads to the team and the product owner not taking the plan seriously rather than a commitment. Over-planning also makes it more difficult to improve your estimation process.
At the end of the iteration