The waterfall model employs a sequential (non-iterative) design process. This approach is seen as flowing downwards (like a waterfall). It goes through the phases of requirements analysis, design, implementation, testing, and maintenance.
Waterfall originated in manufacturing and construction. In these industries, after-the-fact changes are costly, if not impossible. This hardware-oriented model was adapted for software development.
- Client clearly knows what to expect.
- Waterfall processes tend to be more secure because they require solid documentation
- Altering the project requirements at any stage is costly.
- Waterfall methodology relies heavily on initial requirements.
- The whole product is only tested at the end.
The Agile approach proposes an incremental and iterative approach to software design. Agile is frequently implemented via Scrum which the most popular agile practice. It was essentially developed in response to the limitations of Waterfall, as a way to give designers and developers more freedom and make their work more customer-related.
- Altering the project design could be simple.
- Agile is preferable for the situations where the project end-goal of is not clearly defined.
- Agile always needs interaction with team members, users, and stakeholders.
- Agile projects tend to be hard to predict, from timelines to budgets.
- Development is more communication- than documentation-based. Having a person drop out of the project could prove catastrophic.
- Agile always requires a self-organizing team.
These benefits and challenges should be evaluated before choosing a development approach. Here’s a checklist to help your decision:
Do Agile when ...
- You have very skilled senior developers
- Your QA team is able to write automated tests
- Your customer is able to engage with day to day product development
- Your senior management has an empowerment style
- Your project focuses on time to market
Do Waterfall when …
- You have mainly junior developers
- QA is used to manual tests
- Remote customer not willing to take part in product development
- Your senior management has a controlling style
- You project focuses on deadlines and contracts
Agile is a poor fit for infrastructure and projects with fixed scope and deadlines like change lockdowns, or budget year end. Agile is also challenging to scale for large development projects trying to align communications.
In summary, keep using Agile where appropriate. Consider these criteria to decide what type of method to use for your next project.