Wikipedia says the following about Agile: “Agile software development is an approach to software development under which requirements and solutions evolve through the collaborative effort of self-organizing and cross-functional teams and their customer(s)/end user(s). It advocates adaptive planning, evolutionary development, early delivery, and continuous improvement, and it encourages rapid and flexible response to change.”
Agile is a set of guidelines, not an actual development model. It is a set of principals and value statements. So, a particular development method may be referred to as an “Agile technique” if it uses one or more of the guidelines.
In 2001 a group of developers got together at Snowbird resort in Utah to talk about lightweight alternatives to BDUF (big design up front – predictive model) methodologies such as waterfall and Spiral. These BDUF models were not working. Waterfall had been around since 1970 and it was not even intended as a realistic model by its author. The group published the Manifesto for Agile Software Development. The following text shows the manifesto (which you can also read at agilemanifesto.org):
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.
Kent Beck, James Grenning, Robert C. Martin
Mike Beedle, Jim Highsmith, Steve Mellor
Arie van Bennekum, Andrew Hunt, Ken Schwaber
Alistair Cockburn, Ron Jeffries, Jeff Sutherland
Ward Cunningham, Jon Kern, Dave Thomas
Martin Fowler, Brian Marick
© 2001, the above authors
this declaration may be freely copied in any form, but only in its entirety through this notice.
Some of the original authors later formed the nonprofit Agile Alliance (www.agilealliance.org) to promote agile development ideas.
In addition to the manifesto itself, the manifesto’s website lists the following 12 guiding principles (at www.agilemanifesto.org/principles.html).
- Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
- Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.
- Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
- Business people and developers must work together daily throughout the project.
- Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
- The most efficient and effective method of conveying information to and within a development team is face‐to‐face conversation.
- Working software is the primary measure of progress.
- Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
- Continuous attention to technical excellence and good design enhances agility.
- Simplicity—the art of maximizing the amount of work not done—is essential.
- The best architectures, requirements, and designs emerge from self-organizing teams.
- At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.
So how do you implement these principles? Agile doesn’t tell you how. For example you could use Sashimi, James Martin RAD, incremental waterfall, Scrum or Extreme Programming (XP) or some other method or combination of methods. However, Kanban, Scrum and XP were designed with agile values and principals in mind. For example, if you are in a waterfall project that used pair programming and test-driven development, you probably couldn’t say you were in an Agile project but you might add a footnote.