Agile vs Waterfall is a long-running fight and we hope to declare the winner today.
Everything changes over time.
From music to clothes to cars, the list is endless.
Software development has followed the same evolution.
For most of its history, software development was dominated by the Waterfall methodology.
For a long time, there wasn’t a better alternative.
Then came Agile, and it rocked the software development world.
Today, we’re going to pit these two tried-and-true software development methods against each other.
Old school vs new school.
Waterfall vs Agile.
It’ll give you a broad overview of the major differences between them, along with their pros and cons.
But before we start comparing them, we should define them.
What is Waterfall?
Agile is the original software development model that all other methods come from.
The Waterfall model or method was the pinnacle of software development. The gold standard. Really, the only way of doing things for a long time.
Waterfall is sometimes called the Linear Sequential Life Cycle Model. That’s because Waterfall projects move from one phase to the next in a linear progression of development and testing, building on the success of each previous stage.
It usually starts with heavy documentation up top. These are long documents that detail as much as possible about the software and its requirements. The project then gradually moves on to the proceeding steps which we’ll cover in the next section.
The principal feature of Waterfall is how much work is done upfront and how little the project usually changes from its initial conception.
To understand the mindset of Waterfall, you should know that it has its origins in engineering. And on those projects, the cost of changing a design late in its development was costly and time-consuming - same as it used to be for software development.
Waterfall Project Management
The Waterfall method includes 7 non-overlapping stages:
- Requirements - the definitions, plans, and specific processes for the upcoming project, including requirements, deadlines, and guidelines.
- Analysis - an analysis of the exact system specifications used to generate product models and business logic, along with financial and technical resources.
- Design - the design specification document that outlines technical design requirements such as data sources, hardware, and the programming language to be used.
- Coding/Implementation - the source code developed using the logic, requirements, specification, and processes from the earlier stages.
- Testing - the testing of the code using quality assurance engineers and a variety of software tests to root out bugs, errors, and other issues that need to be resolved.
- Operation/Deployment - the final product or application is considered fully functional and is deployed to a live environment.
- Maintenance - post-release correct or adaptive measures to improve and update the final product, such as patch updates.
In between each phase, there is usually a review and sign off process to ensure all goals are met before moving on to the next stage.
What is Agile?
Before we give you a definition, let us provide you with a bit of history.
Between February 11-13, 2001, 17 developers with different backgrounds met at the Lodge of Snowbird ski resort in the Wasatch mountains of Snowbird, Utah to vacation and discuss a common model for software development.
It was during their 3-day stay that they envisioned a new software development model. One that stripped away the long, laborious process of Waterfall and replaced it with a streamlined, iterative approach.
And with that in mind, the Agile Manifesto was born.
It was officially written by 14 different software developers and codified 4 values and 12 principles.
Here are the 4 values of Agile:
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to change over following a plan
In their manifesto, they go on to say:
“While there is value in the items on the right, we value the items on the left more.”
In addition to the 4 values, the creators of the Agile Manifesto also laid out 12 principles that form the foundation of this philosophy for software development:
- 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.
It should be understood that Agile is NOT a method unto itself, but rather, a software development philosophy. It sets forth these principles and values that informed a whole new crop of software development methodologies that we’ll discuss in the next section.
With that in mind, we can define Agile like this:
Agile is a philosophy and group of methodologies that rely on iterative development, collaboration between self-organizing, cross-functional teams and concurrent activity.
An Agile project will involve quick adaptation, frequent inspection, and rapid delivery.
Also, Agile is hyper-focused on matching output with customer needs and company goals.
Now, to really understand Agile, let’s look at its development cycle.
Agile Development Cycle
Because Agile is a philosophy and not a method unto itself, software developers had to create various methods that implement Agile principles and values. These include:
- Continuous Delivery
- Continuous Improvement
- Extreme Programming (XP)
- Feature Driven Development (FDD)
And the list goes on.
Of course, each of these methods practices the Agile philosophy in different ways. And even if two teams are practicing the same method, their processes and flow will differ.
That’s because Agile encourages creativity and unique approaches to software development, within a proven framework.
And it’s this framework that we call the Agile development cycle.
It goes as follows:
- Concept - the team considers and prioritizes projects to work on based on their technical and financial feasibility. Some teams work on multiple projects at a time, others focus all their attention on a single project.
- Inception - once a project is identified, the Agile software development team works with stakeholders to determine requirements, select team members, and allocate resources. This may be accompanied by flow diagrams to demonstrate how features should function and how they may fit into an existing system.
- Iteration/Construction - once the team has clearly defined requirements and feedback from stakeholders for the initial sprint, developers get to work on the first iteration of the product. The goal for the sprint is to deliver a complete product, but this usually requires multiple iterations and revisions.
- Release - once the team has a final software product, it’s tested for functionality, user experience, bugs, etc. Any defects or errors are identified and rooted out. The software is then released into production.
- Production - the team actively provides support for the software release, keeping the system running smoothly and showing users how to use the product. Once support is no longer needed or the release is ready for retirement, it’s retired.
- Retirement - the team removes the system release from production, usually when they want to replace the system with a new release or when the system becomes obsolete.
And just to clarify a couple points within that cycle, a “sprint” is a period of time, usually two weeks or 10 business days. And it pretty much comprises the first 4 stages of the development cycle above.
Developers plan the work to be done, write the code, test the code, deliver the code for feedback, assess the feedback and implement it into the next sprint.
Very often, Agile teams will have daily meetings to check in and touch base and make sure everyone is on track, conflicts are resolved, and the project is moving forward. This keeps the entire process flexible and open to change and adaptation where necessary.
The Major Differences Between Agile and Waterfall
You’ve probably already picked up on some major differences between Agile and Waterfall, but to make sure you understand nearly all of them, let’s break them down one by one.
Waterfall has a rigid structure. One stage has to cascade or “fall” like water careening over rocks into the next stage. Developers are forced to move in a sequential pattern.
Agile has no strict structure. Even the structure we gave you in the last section can and does change depending on the method used and the team deploying the method. Each project starts in small modules and receives regular feedback.
Waterfall relies on heavy documentation from the very beginning. Without it, development teams cannot proceed.
Agile has very little documentation. Agile teams gather what they need to get started and then just...start. Because sprints are done in short periods of time, there is a lot of review and change. Essentially, documents are built in real-time along with the software.
Because of Waterfall’s strict structure, developers are assigned specific roles that are usually unchanging throughout the development process.
With Agile’s lack of structure, team members are interchangeable.
Waterfall prioritizes the completion of the entire project rather than individual components.
Agile prioritizes the most essential and valuable features of a software product to be developed and implemented first - reducing the risk of unusable or wasteful features.
Waterfall uses customer feedback at specified milestones in development or at the very end when the product is complete.
Agile relies on customer feedback constantly, throughout the entire process, at any time they want to solicit feedback.
Waterfall typically only tests software products at the very end of the development cycle.
Agile tests software products throughout the entire development cycle, many times over, to find and remove bugs as soon as possible.
Waterfall almost never allows for requirements to change throughout the development process. It needs clearly defined requirements upfront.
Agile encourages change and if requirements suddenly evolve during the process, Agile teams can easily adapt.
Who Wins in the Battle Between Agile vs Waterfall?
Customers today demand high-quality products that are put out quickly.
The competition in software development is more fierce than it’s ever been and it’s only getting fiercer.
If you want to stay ahead of your competitors and please your customers, then we recommend Agile far above Waterfall.
The problem is…
Putting Agile into practice in your business won’t happen overnight. You probably know that.
It takes the dedication of your team, organizational leaders, and top executives to make a new software development model work consistently for you and your clients.
Getting everyone onboard isn’t easy when you’re doing it alone. That’s where we come in.
ATC specializes in Agile consulting. We can help you:
- Analyze your organization and its current processes and provide you with a roadmap and recommendations for adopting or improving Agile capabilities.
- Facilitate your organization’s transformation from legacy methods to a mix of Agile practices and principles to redesign processes, reinvent roles, and restructure incentives for optimal adaptability and performance.
- Scale the Agile system throughout your entire organization, codifying the framework and helping you implement and sustain Agile initiatives across multi-team projects and platforms.
Reach out today to discover how to make Agile finally work in your business.