There is a wealth of information available online on this topic, but here is a definition of Agile Development that I found that boils it down to a short list of ideas:
An iterative and incremental (evolutionary) approach to software development
which is performed in a highly collaborative manner
by self-organizing teams within an effective governance framework
with "just enough" ceremony
that produces high quality software
in a cost effective and timely manner
which meets the changing needs of its stakeholders.
The core ideas of Agile development are embodied in the Agile Manifesto. It was created in 2001 by some of the key thought leaders in the software development field. It states:
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
the right, we value the items on the left more.
There are a set of principles that underlie the Manifesto that illustrate some of these ideas:
- 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.
- Adaptive Software Development (ASD)
- Agile Modeling
- Crystal methods
- Dynamic System Development Methodology (DSDM)
- eXtreme Programming (XP)
- Feature Driven Development
- Lean Development
- Scrum
Steven Thomas had developed a Generic Agile Lifecycle that shows at a high level how Agile development projects can be conducted:
The key pieces here are that the development occurs in fixed duration "timeboxes" and that these timeboxes are grouped together into releases. This also has implications for resourcing and general project management as well.
Steven covers the topic of Agile Project Management subject thoughtfully and in detail on his site.
While it might seem that Agile would improve all software development delivery, this is not necessarily the case. In their book Balancing Agility and Discipline: A Guide for the Perplexed , authors Barry Boehm and Richard Turner summarized the types of projects that were better suited to an Agile or more traditional plan-driven development methodology:
Agile home ground:
- Low criticality
- Senior developers
- Requirements change very often
- Small number of developers
- Culture that thrives on chaos
- High criticality
- Junior developers
- Requirements don't change too often
- Large number of developers
- Culture that demands order
Attributes
- Sprint/ Iteration/ Timebox Planning
- Backlog Management
- Testing/ Coordination
- Resource Planning
- Documentation
- Integration (Quality Center, Clearcase, etc.)
- IBM Jazz
- Microsoft Solutions Framework (MSF) for Agile
- VersionOne
- Rally Software
- Serena Software
Again, this is just a brief overview of a broad subject. Here is a partial list of websites with a wealth of additional information:
Agile Alliance: http://www.agilealliance.org/
Agile Software Development: http://agilesoftwaredevelopment.com/
Agile Manifesto: http://www.agilemanifesto.org/
Agile University: http://www.agileuniversity.org/index.jsp
Extreme Programming: http://www.extremeprogramming.org/
As always, I welcome your comments and feedback.