Agile methodology, sometimes referred to as simply “agile”, is an iterative software development practice. To understand agile, we need to understand older software development practices and to understand why agile was developed.
Originally, software was developed using a series of phases. These were typically:
Each time software was developed, a team would analyse the requirements, then design the software, then write the actual software, test it and then deploy it. This is greatly simplified, and there were many variations of this, but it was roughly the general practice. This methodology is known as the Waterfall model. Each phase is distinct and sequential.
This type of approach has several limitations. These include:
- Clients don’t often understand what they want and need, and what is possible, until the development has begun or has completed
- When building software, developers run into limitations that weren’t discovered at the beginning of the analysis and design process
- During development, requirements can change. For example, organization changes may cause a shift in the original requirements. Or outside influences such as industry standards or marketplace changes can cause requirements to change
This is where Agile comes in. Several software development methodologies attempted to solve some of the issues described above, including the Unified Process, Scrum and Exteme Programming. In 2001, a group of software developers met to address these issues, and produced the Agile Manifesto. There are 4 key values of the manifesto:
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to change over following a plan
And there are 12 principles laid out in the agile manifesto:
- 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.
The co-authors of the manifesto include:
- Kent Beck
- Mike Beedle
- Arie van Bennekum
- Alistair Cockburn
- Ward Cunningham
- Martin Fowler
- James Grenning
- Jim Highsmith
- Andrew Hunt
- Ron Jeffries
- Jon Kern
- Brian Marick
- Robert C. Martin
- Steve Mellor
- Ken Schwaber
- Jeff Sutherland
- Dave Thomas
There are several features of agile software development that we will discuss in future posts. These include cross-functional teams, continuous testing and integration, user stories, sprints and daily standup meetings.