Agile development methodologies are emerging in the software industry. In this chapter, we provide an introduction to agile development methodologies and an overview of four specific methodologies: • Extreme Programming • Crystal Methods • Scrum • Feature Driven Development Plan-driven methods work best when developers can determine the requirements in advance . . . and when the requirements remain relatively stable, with change rates on the order of one percent per month. -- Barry Boehm  Plan-driven methods are those that begin with the solicitation and documentation of a set of requirements that is as complete as possible. Based on these requirements, one can then formulate a plan of development. Usually, the more complete the requirements, the better the plan. Some examples of plan-driven methods are various waterfall approaches and others such as the Personal Software Process (PSP)  and the Rational Unified Process (RUP) [30, 31]. An underlying assumption in plan-driven processes is that the requirements are relatively static. On the other hand, iterative methods, such as spiralmodel based approaches [12, 14], evolutionary processes described in [5, 22, 32, 33], and recently agile approaches  count on change and recognize that the only constant is change. The question is only of the degree and the impact of the change. Beginning in the mid-1990’s, practitioners began finding the rate of change in software requirements increasing well beyond the capabilities of classical development methodologies [11, 27]. The software industry, software technology, and customers expectations were moving very quickly and the customers were becoming increasingly less able to fully state their needs up front. As a result, agile methodologies and practices emerged as an explicit attempt to more formally embrace higher rates of requirements change. . In this chapter, we provide background information on agile principles, and we provide an overview of three agile methodologies. For each of these methodologies, we will present an overview, the main roles involved in the methodology, the documents and artifacts produced, and the development process. 1
What is Agility in Software Development?
In this section, we discuss the model underlying agile software development. 1.1 Agile Model
Agile methods are a subset of iterative and evolutionary methods [32, 33] and are based on iterative enhancement  and opportunistic development processes . In all
© Laurie Williams 2007
iterative products, each iteration is a self-contained, mini-project with activities that span requirements analysis, design, implementation, and test . Each iteration leads to an iteration release (which may be only an internal release) that integrates all software across the team and is a growing and evolving subset of the final system. The purpose of having short iterations is so that feedback from iterations N and earlier, and any other new information, can lead to refinement and requirements adaptation for iteration N + 1. The customer adaptively specifies his or her requirements for the next release based on observation of the evolving product, rather than speculation at the start of the project . There is quantitative evidence that frequent deadlines reduce the variance of a software process and, thus, may increase its predictability and efficiency. The pre-determined iteration length serves as a timebox for the team. Scope is chosen for each iteration to fill the iteration length. Rather than increase the iteration length to fit the chosen scope, the scope is reduced to fit the iteration length. A key difference between agile methods and past iterative methods is the length of each iteration. In the past, iterations might have been three or six months long. With agile methods, iteration lengths vary between one to four weeks, and intentionally do not exceed 30 days. Research has...