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
|