Pre-conditions for Iterative Development Adoption
This supporting material discusses the preconditions for the adoption of Iterative Development practice to be successful.
Main Description

Review these preconditions for the adoption of iterative development. If these conditions are not met, the risk of undertaking an iterative development approach might be unacceptably high. In that spirit, one should not attempt iterative development without the preconditions described below being in place.

Full-time access to the required business expertise and decision-making

Ideally, the business experts and decision-makers are part of the team and are colocated with the team. Pragmatically, in large organizations, these professionals can be available remotely (by phone, e-mail or other messaging protocols), as long as they make a commitment to provide an extremely timely response.

Team made of generalizing especialists

Team members can cover all software development disciplines needed for the iteration and can each be fully engaged throughout the iteration in work that contributes to the success of the iteration. Ideally, this implies each team member has an area of specialty, but can take on multiple roles, in line with the concept of generalizing specialists [AMB03]. Pragmatically, in large organizations where business and technical skills are sometimes more segregated, it is possible to have a team in which some members do not program, as long as those individuals can still take on multiple roles during the iteration. For example, in a large organization, a business analyst might also work on testing or creating user manuals during an iteration, with the understanding that a separation of duties will still be maintained where needed; the analyst will only test portions of the iteration for which he or she was not the primary analyst.

Management is willing to adopt best practices for planning and allocating resources to iterations

Ideally, if management is open to adopting best practices for iterations and allocating resources for them, it implies that, at the end of each iteration, management will ask for detailed plans and exact resource needs solely for the next iteration and a rough forecast for future iterations, recognizing that plans and resource allocations will become more predictable as the project moves into its later iterations. In large organizations, the driving force for needing detailed plans is often the need to plan for and allocate highly specialized resources. With that in mind, one way to reduce the need for detailed iteration plans beyond “the next iteration” is to reduce the need to assign highly specialized resources to specific projects. By choosing competent team members who can take on multiple roles and who can work with limited direction from the highly specialized resources, the specialized resources can be leveraged across multiple projects as mentors rather than as individual team members. This, in turn, reduces the need to schedule projects based on resource availability, and it also helps grow resource skills in the organization at the same time.

Teams have access to as much automation as possible for implementation and testing

Ideally, this means that continuous integration and automated testing are an integral part of the software development process. Pragmatically, iterations can be undertaken with intense version management and configuration management practices, but it is not easy, especially in a large organization where there are interproduct compatibility concerns.

Support for remote collaboration

Distributed teams using iterative development must have access to the best possible support for remote collaboration.

At a minimum, distributed teams working with time-boxed iterations need the following conditions to be met:

  • Clear and crisp audio conferencing capabilities
  • Reliable Web conferencing
  • Remote access to automated version management and configuration management support
  • Remote access to any documentation generated by the team (user stories, use cases, models)

Ideally, distributed teams will also have additional support for time-boxed iterations, by having the following access:

  • Remote access to automated continuous integration and testing tools
  • Remote access to collaboration tools, such as those that provide discussion threads