Agile Software Development

Summary
Wiki: Agile software development

"Agile software development is a conceptual framework for undertaking software engineering projects that embraces and promotes evolutionary change throughout the entire life-cycle of the project."

"There are a number of agile software development methods; most attempt to minimize risk by developing software in short timeboxes, called iterations, which typically last one to four weeks. Each iteration is like a miniature software project of its own, and includes all of the tasks necessary to release the mini-increment of new functionality: planning, requirements analysis, design, coding, testing, and documentation. While an iteration may not add enough functionality to warrant releasing the product, an agile software project intends to be capable of releasing new software at the end of every iteration. In many cases, software is released at the end of each iteration. This is particularly true when the software is web-based and can be released easily. Regardless, at the end of each iteration, the team re-evaluates project priorities."

"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."

"From a product perspective, agile methods are more suitable when requirements are emergent and rapidly changing; they are less suitable for systems that have high criticality, reliability and safety requirements"

Agile Manifesto
Agile Manifesto
 * Widely regarded as the canonical definition of agile development, and accompanying agile principles.

Manifesto for Agile Software Development We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value: Individuals and interactions over processes and tools Working software over comprehensive documentation Customer collaboration over contract negotiation Responding to change over following a plan That is, while there is value in the items on the right, we value the items on the left more.

Some of the principles behind the Agile Manifesto[4] are:
 * Customer satisfaction by rapid, continuous delivery of useful software
 * Working software is delivered frequently (weeks rather than months)
 * Working software is the principal measure of progress
 * Even late changes in requirements are welcomed
 * Close, daily, cooperation between business people and developers
 * Face-to-face conversation is the best form of communication
 * Projects are built around motivated individuals, who should be trusted
 * Continuous attention to technical excellence and good design
 * Simplicity
 * Self-organizing teams
 * Regular adaptation to changing circumstances

Compared to Waterfall Model
"The main problem of the waterfall model is the inflexible nature of the division of a project into separate stages, so that commitments are made early on, and it is difficult to react to changes in requirements. Iterations are expensive. This means that the waterfall model is likely to be unsuitable if requirements are not well understood or are likely to change radically in the course of the project."

Atlassian
How we do agile:

Agile Development - Stories On Agile Software Development - http://www.atlassian.com/agile/
 * Practical insights into agile and scrum methodologies
 * We're not a "follow the rules" software company and we know there is no single recipe for practicing agile development. We were once hungry for practical tips, so we thought we should share our agile story...

Other Points of Interest

 * The New Methodology (Agile essay)
 * ..Good Agile, Bad Agile