Agile software development is a conceptual framework for software
engineering that promotes development iterations throughout the life-cycle of
There are many agile development methods; most minimize risk by developing
software in short amounts of time. Software developed during one unit of time is
referred to as an iteration, which may last from one to four weeks. Each
iteration is an entire software project: including planning, requirements
analysis, design, coding, testing, and documentation. An iteration may not add
enough functionality to warrant releasing the product to market but the goal is
to have an available release (without bugs) at the end of each iteration. At the
end of each iteration, the team re-evaluates project priorities.
Agile methods emphasize face-to-face communication over written documents.
Most agile teams are located in a single open office sometimes referred to as a
bullpen. At a minimum, this includes programmers and their "customers"
(customers define the product; they may be product managers, business analysts,
or the clients). The office may include testers, interaction designers,
technical writers, and managers.
Agile methods also emphasize working software as the primary measure of
progress. Combined with the preference for face-to-face communication, agile
methods produce very little written documentation relative to other methods.
This has resulted in criticism of agile methods as being undisciplined.
The modern definition of agile software development evolved in the mid 1990s
as part of a reaction against "heavyweight" methods, as typified by a heavily
regulated, regimented, micro-managed use of the waterfall model of development.
The processes originating from this use of the waterfall model were seen as
bureaucratic, slow, demeaning, and inconsistent with the ways that software
developers actually perform effective work. A case can be made that agile and
iterative development methods are a return to development practice seen early in
the history of software development. Initially, agile methods were called
"lightweight methods." In 2001, prominent members of the community met at
Snowbird, Utah, and adopted the name "agile methods." Later, some of these
people formed The Agile Alliance, a non-profit organization that promotes agile
Methodologies similar to Agile created prior to 2000—include Scrum (1986),
Crystal Clear, Extreme Programming (1996), Adaptive Software Development,
Feature Driven Development, and DSDM (1995).
Extreme Programming (usually abbreviated as "XP") was created by Kent Beck in
1996 as a way to rescue the struggling Chrysler Comprehensive Compensation (C3)
project. While that project was eventually canceled, the methodology was refined
by Ron Jeffries' full-time XP coaching, public discussion on Ward Cunningham's
Portland Pattern Repository wiki and further work by Beck, including a book in
1999. Elements of Extreme Programming appear to be based on Scrum and Ward
Cunningham's Episodes pattern language.