Agile software development
Agile software development is an umbrella term for a family of software development approaches that share a common set of values and principles. They are codified in the Manifesto for Agile Software Development (the "Agile Manifesto"), and favor iterative and incremental development, collaboration between motivated people, and a willingness to adapt to changing circumstances over the plan-driven, sequential working styles associated with the waterfall model and big design up-front.
The manifesto was written in February 2001, when seventeen software developers met at a ski lodge in Snowbird, Utah. The group brought together the originators and proponents of several then-emerging development methods, including Scrum, Extreme Programming (XP), adaptive software development, Crystal Clear, and DSDM. They coined the term "agile" to describe what those methods shared, and published the manifesto at agilemanifesto.org.
Values
The manifesto frames four value statements. Each is an ordering of priorities, not a rejection of the right-hand side. The authors explicitly noted that, while there is value in the items on the right, they value the items on the left more.
Principles
Behind the four values, the authors enumerated twelve principles that flesh them out. The principles call for early and continuous delivery of working software, welcoming changing requirements even late in development, and treating working software as the primary measure of progress. They emphasize face-to-face conversation as the most effective way to convey information within a team, and self-organizing teams as the source of the best architectures and designs. They also call for a sustainable pace, continuous attention to technical excellence, regular reflection, and simplicity – "the art of maximizing the amount of work not done."
Technical excellence, in particular, is what separates effective agile delivery from mere ceremony. It draws on practices such as test-driven development, continuous integration, and refactoring. Without these, teams can go through the motions of an agile process while accumulating technical debt that erodes their ability to respond to change – the dysfunction Martin Fowler dubbed flaccid agile. Agile adopted superficially, as process theater rather than a set of working values, is a form of cargo-culting. The label’s broad uptake has also made it a textbook case of semantic diffusion, with "agile" applied to practices that share little with the manifesto’s original values.
Methods
Agile is not a single method but a family. Scrum prescribes time-boxed sprints and specific ceremonies. Extreme Programming prescribes technical practices. Kanban, which predates the agile movement but is widely classed with it, prescribes flow and work-in-progress limits rather than iterations. Other members of the family include Crystal Clear, adaptive software development, feature-driven development, DSDM, and lean software development. In practice, most teams blend elements from several methods into their own ways of working rather than following one verbatim. The SEMAT Essence kernel is one attempt to give a common ground for describing and composing such practices across methods.
Craftsmanship
The software craftsmanship movement extends the agile values with a stronger focus on technical mastery and professionalism. Its 2009 manifesto builds directly on the Agile Manifesto, adding craft, community, and partnership to the original four values.