Practice 2. Release Planning
In order for iterative development to work, there must be a strong notion of a release. A release is a version of a product that can be installed and used by customers in their production environments. Usually, a release requires a number of iterations to build.
Release planning is important for sustainable development because it provides the longer term view that is necessary for planning purposes. Each project or release starts with Iteration 0 (described previously), where the project vision and a plan that encompasses a number of iterations is laid out.
Once iteration 0 has been completed, the team should move into a build phase. The build phase consists of a number of iterations, with each iteration ending in a review with customers and planning for the next iteration.
During the build phase, the release plan that was created in iteration 0 must be periodically updated. Updates are required whenever the velocity changes or as the team identifies new features or determines that some features are not required. A common problem is that as new features are added to a project, other features are not dropped. This is why it is important to track the number of feature points remaining in the project, because when this happens it will be obvious that the project cannot complete on schedule given the current velocity as depicted in Figure 7-2. This is good because it forces the team to make tradeoffs frequently throughout the project as soon as a problem occurs rather than near the end of the release cycle (some call this panic early, panic often). The need to make tradeoffs also underlines why it is important to have business people involved in the planning, because as with any project, you can either change the date, the feature set, or the resources. You can't expect to fix all three. When businesspeople are involved in the planning, the types of tradeoffs that are possible during the release plan updates are obvious to them.
Figure 7-2. A case where the release plan must be reworked because all the features can't be completed on schedule. What has likely happened is that too many features have been added to the release plan and no features were dropped. The team must do one or more of the following: change the date, add some resources, or drop some features from the release plan.