While Scrum uses 30-day Sprint, other agile processes use shorter or slightly longer iterations, but they rarely exceed 60 days.Iteration length is limited so that the team is forced to deliver a potentially shippable product increment with regularity. At the end of every Sprint, the increment is inspected, which dictates the project’s future progress. If the increment is appropriate and useful, the project progresses with only minor changes. If the increment is unsatisfactory, the cause is determined and adjustments made before the next Sprint begins. Anything unexpected can be detected and adjusted to at the end of a Sprint, based on the inspection of the increment.
Agile processes try to have all analysis, design, coding and testing work done within a Sprint. Teams perform this work. The optimal team is a small, cross-functional group at the same site (or as “collocated”); but since that’s hard to achieve, projects make do and adjust to less-than-optimal circumstances. A new aspect of agile processes introduced by Alistair Cockburn (Agile Software Development, Alistair Cockburn, Pearson Education, 2002) measures the impact of less-than-optimal teams, helping management measure the costs and benefits of optimization. Agile processes operate optimally when an organization adopts all of their recommended practices. When scaled to multiple, distributed teams, however, the communication and coordination creates overhead.
The heart of agile processes occurs within the Sprint. The team takes a look at the requirement, the technology, and evaluates each other’s skills and capabilities. It then devises the best way it knows to build the functionality, modifying the approach daily as it encounters new complexities, difficulties, and surprises. The team figures out what needs to be done, and determines the best way to do it. This creative process is the heart of the extreme productivity that’s found in agile processes.
Teams using tradition software development processes spend a lot of time in so many preliminary activities that the teams can’t get around to building user functionality. These activities include setting up development environments, selecting the implementation hardware or software, figuring out how to conform to external standards, or laying out detailed systems architectures.