Software Development Methodologies: Waterfall, Agile, and Lean
Published: 2021-09-14 11:17:22

Software development requires various specialists — from developers to project managers. They conduct a lot of meetings, conquer various tasks, and have strict deadlines. Of course, it can be complicated to manage the whole development process. 

Software development companies use different software development methodologies to make the process more structured. As a result, the team and the client can see the status of each task and follow the development progress.

In this post, you can find the comparison of three popular software development methodologies — Waterfall, Agile, and Lean. We’ll also cover the top three software development frameworks — Scrum, Kanban, and Extreme programming. 

You can find answers to the following questions:

* What are the advantages and disadvantages of Waterfall?
* What are the pros and cons of Agile methodology?
* What are the benefits and drawbacks of Lean development?
* What software development methodology should you pick for your project?

##The Fundamentals of Software Development Methodologies

Let’s start with the basics. 

Software development methodology stands for the process of how to develop software solutions. The primary goal of any software development methodology is to structure the development process — outline the required functionality and deadlines. 

GoodFirms claims that software development companies prefer the following software development methodologies: 

* Agile (61,5%)
* Scrum (23,1%)
* Waterfall (9,6%)
* Others (5,8%)

![Top development methodologies](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/avy9ifm8dw7hq8hbbhmi.png)

###1. Waterfall

It’s common to consider Waterfall as a traditional software development methodology. This approach tends to be strict and linear. As a client, you get deliverables at the end of each stage. 

Waterfall has a simple structure — a new stage begins only if the previous stage is completely finished. For example, when the coding stage is in progress, there’s no way to get back and change the design.

It’s common to single out six stages in the Waterfall software development methodology:

1. The team collects all the project requirements and business goals during the discovery stage.
2. During the design stage, the team prepares the design of all the screens and their conditions. The Solution architect creates the app architecture and defines the project logic.
3. Coding stage gives developers time to integrate required features.
4. Quality assurance engineers check the whole project during the testing stage. They look for bugs and make sure that everything works according to the project requirements.
5. Developers move on with the deployment. They implement different parts of the project and show the result to the client or stakeholders.
6. Last but not least is maintenance. The development team supports the product and fixes bugs (if there are any).
![Waterfall development](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kx0p4ipqg12876kuu207.png)

Of course, the Waterfall methodology has advantages and disadvantages. First of all, this approach requires accurate budgeting and scheduling. It’s common to use Waterfall for fixed-price projects. 

This methodology is also suitable for developing enterprise-level software solutions since there is detailed planning and a lot of documentation.

**Advantages of Waterfall development methodology:**

* Straightforward, functional, and analytical methodology
* Useful for fixed-price solutions
* Detailed documentation
* Less client involvement after the planning stage
* Price is easy to estimate

**Disadvantages of Waterfall development methodology:**

* Hard to change the project after the discovery stage
* Discovery stage is time-consuming
* Precise requirements at the beginning of the project

Waterfall doesn’t offer a high flexibility of the project. As a result, a lot of development teams choose Agile software development methodologies. 

##2. Agile

Agile is the most widespread software development methodology these days. A bunch of enterprises like Apple use Agile to develop their tech solutions. 

Unlike Waterfall, Agile offers to divide the project development into parts (called sprints). One print can go from one to four weeks. Most software development teams have a two-week sprint. During each sprint, the team designs, codes, and tests the part of project functionality. The development team also performs regression tests to ensure that everything works as required after changes. 

After each sprint, the team shows the client the done parts. So, it’s possible to control every development stage. 
![Agile development](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0v2lyljg8vhb144s47hs.png)

Agile software development is perfect for complex or lengthy tech solutions (300+ development hours). 

Splitting the project development into sprints, the team can release the project more often. As a result, users can give their feedback, and developers can improve the tech solution.
 
**Benefits of Agile software development methodology:**

* Often releases (1-2 per month)
* Easy to change the project
* Visible result at the end of each sprint
* Opportunity to fully control the development process

**Drawbacks of Agile software development methodology:**

* Accurate management
* Impossible to say the end-day of the development
* Impossible to get a final estimate of the project

The Agile approach needs a Project Manager to manage the whole development process and team members.

### Agile Framework #1 — Scrum

The primary difference between methodology and framework is the least one has strict rules.

For example, Scrum is an Agile framework. All the work in Scrum is divided into sprints. It means that every sprint begins with planning and ends with a project release (or demo).

Scrum consists of several aspects for the development team to follow:

1. Planning for the team to collect requirements and prioritize the tasks.
2. The team conducts daily meetings or standups to discuss their progress or development issues to solve. 
3. Project Manager books a demo to show the client the done amount of work. The client shares feedback and discusses improvements (if any).
4. During the retrospective meeting, the team discussed problems that occurred during the sprint and ways to improve the project development.
 
All the meetings allow controlling the development process and monitoring the progress.
![Development process](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dapy1ztfvvaij1qc61qz.png)

**Benefits:**

* Fast release
* Unclear requirements
* Easy to change the project
* Many meetings with a team

**Drawbacks:**

* Requires contribution from every team member

###Agile Framework #2 — Kanban

Kanban tends to be even more flexible in comparison to Scrum. The team’s primary focus is on the tasks in progress.

**How does Kanban work?**

* The development team divides the project into stages and small tasks.
* To make the work more structured, all the tasks are placed into at least three columns — To do, In Progress, and Done.
* Developers move the card based on the development progress. 

Kanban framework has some aspects similar to Scrum, like daily meetings, demos, and retrospectives. On the other hand, Kanban doesn’t have any sprints. The team needs to finish one part of the functionality to move to another. 
![Tasks](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fgyoc3u7xcl65s4w3yem.png)

**Benefits:**

* Easy to manage
* Great flexibility

**Drawbacks:**

* Requires high self-management skills
* Difficult to control the number of tasks

### Agile Framework #3 — Extreme Programming

One more framework to use during software development is Extreme programming (XP). This approach stands for focusing on development instead of management.

Developers work on code quality. Quality assurance engineers perform a bunch of tests like unit and regression testing. 

The development also starts with planning and discussing all the project requirements. However, before starting to code, the team performs acceptance tests. They define what the code should do based on the requirements. 

This software development methodology is perfect for writing clear code. Additionally, developers need less tech documentation.
 
On the other hand, this development approach requires more time in comparison to other methodologies. 

##3. Lean

Lean is one more software development methodology. It’s quite flexible like the Agile approach, but they also have several significant differences. 

Lean methodology is perfect for MVP development. The team analyzes users’ feedback and improves the basic version of the software solution. 

The software development team tends to focus on the following practices:

* **Eliminate Waste.** Wasteful activities stand for unnecessary features, delays, defects, and others. 
* **Deliver Fast.** The team needs to create a project in minimum time.
* **Delay Critical Decisions.** The team analyzes all the information and, after that, makes a decision.
* **Amplify Learning.** Collect users’ feedback to satisfy their needs.
* **Build Quality In.** Developers ensure code quality.
* **Optimize the Whole.** The team tends to optimize the workflow.
* **Respect People.** The development team discusses all the issues together to find the best solutions. 
![Lean practices](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kqho31qzisfzj1kegh9b.png)

A lot of startups pick the Lean software development methodology since they need to get feedback from the customers fast.
 
**Advantages:**

* Perfect approach for MVP development
* Fast project improvements
* Reduced time-to-market

**Disadvantages:**
 
* Requires detailed documentation
* Full trust to the team

##What Software Development Methodology to Pick?

As you can see, there are a bunch of useful software development methodologies and frameworks. Each of these approaches is helpful for specific requirements and business goals.

Below you can find the table with software development methodology and cases to apply the particular approach. 

When you should choose one of the approaches: 

**Waterfall**
* fixed-price projects
* clear requirements

**Agile**
* any project size

**Scrum**
* complex projects
* long development

**Kanban**
* fixing bugs
* small releases
* fast changes

**Lean**
* MVP development

The majority of software development teams follow the [Agile software development methodology](https://www.cleveroad.com/blog/agile-software-development). Dividing the project development into sprints, the team can see the progress of each task. In addition, it’s possible to release the solution often to get users’ feedback and add changes based on their needs and requirements.