Agile is an approach to software development that seeks the continuous delivery of working software created in rapid iterations.
However, the phrase "agile methodology" is misleading because it implies that agile is a singular approach to software development. Agile is not a set of prescriptions for exactly which actions to take in software development. Instead, it is a way of thinking about collaboration and workflows and it is a set of values which guide our choices in regards to what we make and how we make it.
In practical terms, agile software development methodologies are all about delivering small pieces of working software quickly to improve customer satisfaction. These methodologies use adaptive approaches and teamwork to focus on continuous improvement. Usually, agile software development consists of small, self-organizing teams of software developers and business representatives regularly meeting in-person throughout the software development life cycle. Agile favors a lightweight approach to software documentation and embraces—rather than resists—changes at any stage of the life cycle.
Agile as we know it today traces its history to 2001. Reacting to waterfall approaches to project management, which organizes a software project as a series of linear sequences, a group of software developers penned The Manifesto for Agile Software Development. In this document the programmers proposed a new approach to software development and described 4 key characteristics that they believed should be valued over other concerns. As they put it, agile software development teams should 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 authors clarify that all items on the above list do have some inherent value. However, they propose that valuing the items on the left (bolded) above those on the right can lead to better outcomes in product development. The agile manifesto does not set out to prescribe a set of practices; it is guidance for a new way of thinking about software development.
There have been many practical outcomes of the agile manifesto. For instance, instead of developing software sequentially from one phase to the next, which is how the waterfall method ensures product quality, an agile method can promote development and testing as concurrent and continuous processes. Put another way, waterfall development holds that an entire phase should be completed before moving on to the next, whereas agile supports multiple sequences happening at the same time.
Where did agile come from?
Agile approaches to work were created to address the perceived limitations of the waterfall methodology, which was derived from the manufacturing method of Henry Ford’s 1913 assembly line and later applied to software development. Since its founding in 2001, agile development has flourished in the software industry and project management, though it has many variations.
Agile started when many software developers began noticing that the production cycles and collaboration methods of waterfall were not producing the desired results. This problem had become pervasive by the early 1990s, when it became common for a several years lag to persist between an organization's validated business need and the delivery of a working application. Business demands and markets could change enough during those years that large parts of software projects would be cancelled before they were ever delivered. This waste of time and resources led many software developers to seek an alternative.
Faced with the threat of disruption, organizations increasingly adopt digital transformation strategies to keep up with the accelerating pace of business. And when they do, agile software development frequently plays a role.
Agile forms the basis of many of today’s digital workflows. Cloud computing, with its flexible, scalable, IT infrastructure, has grown up in parallel with the demands of agile software development. Cloud-native development embraces an agile-like notion of software as a series of interconnected services that scale to meet business needs.
DevOps as a concept breaks down the old wall between software development and operations. SRE is an implementation of DevOps that uses software as a tool to manage systems and automate operations tasks. CI/CD methods accept that software will change continuously, and gives developers tools to accelerate the speed at which they can deploy new code.
By now you may have noticed that the concept of "agile methodology" is itself an agile idea, responding to the needs of its customers (that is, software developers) through changing times. Keep this in mind as we take a brief look at a variety of agile frameworks, which carry different names and often vary from one implementation to another.
Agile frameworks for software development—like Scrum, kanban, or extreme programming (XP)— form the basis for popular software development processes like DevOps and continuous integration/continuous deployment (CI/CD).
Scrum is perhaps the most popular agile framework in use today but not all agile is Scrum and, honestly, not all Scrum is agile. Scrum is a framework for managing work designed for small, cross-functional teams of 5 to 9 people who break their work into actions that can be completed within a consistent period of time called a sprint. Scrum teams consist of team members, a Scrum master, and a product owner. Typically, Scrum is implemented when a large project can be broken up into 2- to 4-week sprints. Scrum focuses on feedback loops through a ceremony called the "retrospective." The unofficial motto of Scrum could be "inspect and adapt."
Other agile frameworks, notably kanban, predate the agile manifesto. But these frameworks are considered to be agile because they promote the values outlined in the agile manifesto. There are too many agile frameworks and approaches to scaling agile to list all of them here.