Concept: Iteration Lifecycle
The iteration lifecycle provides a set of team-based practices describing how to leverage iterations to focus the team on delivering incremental value to stakeholders in a predictable manner.
Relationships
Related Elements
Main Description

Iterations keep the team focused on delivering incremental customer value every few weeks by delivering a fully tested, demonstrable or shippable build (product increment). This creates a healthy focus on ensuring that whatever is worked on is of value to the stakeholders. Decision making must happen faster than in a process without iterations, because there is no time for endless debate. Iterative development focuses on producing working code, reducing the risk of analysis-paralysis. Frequent demonstration of working code provides feedback mechanisms that allow course corrections to be taken as needed.

Iteration planning, estimation, and progress tracking are centered on work items. The iteration plan is created by selecting the top-priority work items. Agile estimation techniques are used to understand how many work items can safely fit within the time-boxed iteration, and work items are filtered to ensure that the chosen work items will allow the team to deliver upon iteration objectives agreed to by stakeholders. Progress is demonstrated through continuous completion of many small work items (see Micro-Increments).

Just as a project goes through a lifecycle, iterations go through a lifecycle with a different focus for the team, depending on whether you are in the first or the last week of the iteration (see Figure 1 below). An iteration starts with an iteration planning meeting that is a few hours long. The initial one or two days are typically focused on further planning and architecture to, among other things, understand the dependencies and logical ordering of work items, and the architectural impacts of the work to be done. Most of the time during an iteration is spent on executing the micro increments. Each micro increment should deliver tested code to a build, as well as validated artifacts. To give additional discipline, stable builds are produced at the end of each week. More attention is spent on these builds to make sure that the quality is not eroding, and issues are dealt with early so that the success of the iteration isn't jeopardized. The last week or last few days of the iteration typically have a stronger emphasis on polishing and bug fixing than earlier weeks, even though new features are added as appropriate. The goal is to never let quality erode, thus ensuring that a high-quality useful product increment is produced at the end of the iteration. The iteration ends with an assessment (with stakeholders) of what was built, and a retrospective to understand how to improve the process for next iteration.

Figure 1. An iteration goes through a lifecycle with a stronger focus on planning and architecture early on, and a stronger focus on bug fixing and stabilization toward the end.

Picture shows an iteration that starts with a planning meeting, has stable weekly builds, and ends with an iteration review.



Team members work more effectively if they can influence what they do and how they do it, rather than operating in an environment where they are told what to do. Giving the team the ability and responsibility to organize their work and determine how to best meet their commitments motivates team members to do their best. This also helps them collaborate to ensure that the right skills are applied to the appropriate tasks. Self-organization impacts many areas, including how planning and commitments are made (by a team, not by individuals), how work is assigned (you sign up rather than get assigned), and how team members view their roles in the project (team member first, job function second).

Self-organization requires a few things to work:

  • Transparency and commitments are crucial to aid in team communication and to bring out the best in the team members. Open communication about the team's commitments related to the iteration lifecycle and personal commitments made relative to micro increments ensures that execution problems are vetted and the right people are focused on solving them.
  • Coaching is required to help teams self-organize and to remove barriers for success. The assumption is that the project manager is the coach. This requires that the project manager avoid a command-and-control style of management in favor of a coaching style. This has been a key recommendation in management books for the last two decades, but some project managers may still not be able to make that transition.