What is agile development?
Agile refers to a collection of software development methodologies that promote adaptive planning, evolutionary development, and continuous delivery. The overarching purpose is to increase customer satisfaction by working closely with and incorporating feedback from customers throughout the development process. Development teams build products in short increments with frequent release cycles so teams can respond quickly.
Fundamentally, agile is an approach to work. So while it began in software development, many other organizations apply the concepts to other types of work, such as IT, marketing, and project management. Regardless of the output, the focus is on transparency, collaboration, and adaptability. Teams embrace change, continuously inspecting and adapting how work is done to deliver better results, faster.
Concepts of incremental and adaptive software development date back as early as the 1950s. However, it was not until the 1990s that agile gained traction. So what changed?
Well, advancements in technology quickly outpaced development methodologies such as waterfall, which was predominant at the time. Waterfall defines requirements upfront and delivers projects in sequential phases. It can be effective for projects with a fixed scope, but vulnerable to failure if requirements change later in the development process.
During the 1990s, new technologies and widespread access to the internet disrupted entire markets. As new software-based products and services emerged, customer expectations began to change. Customers wanted products to be continuously improved with new functionality. Accelerating time-to-market became a business priority as companies struggled to survive in highly competitive marketplaces.
Companies needed a more flexible approach to software development. In 2001, The Manifesto for Agile Software Development was formally published by a group of 17 software developers. It was the foundation for many of the agile methods teams use today.
Agile values and principles
The authors of the Agile Manifesto defined four core values and 12 principles to guide how software development teams should approach their work.
- 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 12 principles in the manifesto give teams guidelines for how to improve software development practices:
- 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 the 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.
All agile methodologies are rooted in the values and principles of the Agile Manifesto, but each approach provides a unique set of workflows and practices. The table below provides an overview of the most common agile methodologies.
|Adaptive software development (ASD)||ASD focuses on the rapid creation and evolution of software systems. This approach repeats a series of speculate, collaborate, and learn cycles. Key characteristics of an ASD approach are that it is mission-focused, feature-based, iterative, timeboxed, risk-driven, and change-tolerant.|
|Crystal methods||Crystal methods is a collection of agile software development approaches. Crystal practices iterative and incremental development, active user involvement, and delivering on commitments. This approach emphasizes the importance of people and process and the interaction between them.|
|Dynamic system development method (DSDM)||DSDM provides a four-phase approach for implementing software projects. These phases are feasibility and business study, functional model or prototype, design and build iteration, and implementation. This approach uses rapid application development (RAD) techniques to accelerate the software development process.|
|Extreme programming (XP)||Extreme Programming (XP) sets specific practices for software development. Characteristics include sitting together, pair programming, test-first programming, continuous integration, collective ownership, and incremental design. This approach is intended for small, co-located teams working with dynamically changing software requirements.|
|Feature-driven development (FDD)||FDD is a model-driven methodology intended for larger teams working on a project using object-oriented technology. It defines five processes: develop the overall model, build the feature list, plan by feature, design by feature, and build by feature.|
|Kanban||Kanban is a method for managing the creation of products with an emphasis on continuous delivery. Kanban uses a pull-based workflow system to help teams work together more effectively. The three core principles of kanban are to visualize what you do today, limit the amount of work in process, and optimize flow.|
|Lean software development (LSD)||LSD applies lean manufacturing principles and practices to software development. The key principles of lean development are to eliminate waste, ensure quality, create knowledge, defer commitment, deliver fast, respect people, and optimize the whole.|
|Scrum||Scrum is an iterative and incremental agile software development framework for managing software projects. Teams work in time-boxed sprints of 2–4 weeks and use scrum ceremonies — such as sprint planning, daily scrum, sprint review, and sprint retrospective for inspection and adaptation.|
The most widely used agile methodologies by software teams are scrum, followed by kanban and extreme programming. Some teams use hybrid methods that combine elements from different approaches. For example, scrumban blends the structure of scrum with the flexibility and visualization of kanban. You might find it helpful to read our guide on agile product management to learn how product managers apply agile to their work.
Ultimately, each team must choose the methodology that works best for them. What matters is embracing a flexible mindset and continuously seeking ways to improve how work is done so you can maximize the value you give to your customers.