There is no generally accepted definition of what agile development exactly is. However, there is a relatively broad consensus that agile development shares all or most of the following characteristics:
- Iterative, incremental development in relatively short cycles (two to six weeks, typically)
- Delivery of working software at the end of each iteration and as a main means to assess progress
- Intense and direct communication among stakeholders (e.g., between developers and so-called “on-site customers”)
- Continuous adaptation and improvement of development processes to changing conditions by self-organizing teams
Historically, agile development has been perceived as a counter-movement to tightly controlled approaches to software development with fragmented work organization.
The most widely used agile method today is Scrum. It focuses on agile project management practices and collaborative team organization. The agile method Extreme Programming (XP) concentrates on engineering practices.
Agile development is being applied by many different kinds of software organizations in various domains. It is very prominent in web development. However, agile methods are also being applied to large, globally distributed development of complex technical products. As the context of software development varies, also the ways how agile development is being applied must differ across contexts. In complex environments, establishing agile development can be quite challenging.