What is waterfall methodology?
The waterfall method of software development is more linear, with scheduled events taking place one after the other. Often the waterfall methodology of software development is utilised when there is a strict deadline to be met. If there is a certain date by which the product needs to be completed, the team leader can schedule dates and times by which each stage of the waterfall method must be completed.
At a basic level with waterfall you decide what you’re doing, then you do it, then you test it, then you finish it. One example of a modular waterfall approach to software development could be:
- Analysis and design
- Testing and fixing
Conception, analysis and design can overlap, as you’d typically spend an extended period of time up front in the conception phase outlining the requirements for the project, analysing the possible solutions, and creating a complete design for the delivery of the project. After everyone has agreed that this stage has been completed, the team move on together to the development stage where the coding is actually done. Once the code is done they move onto testing, and once testing and fixing are done the product is deployed. Each stage in this methodology is completed before the next one can begin. Typically this transition is dealt with at a ‘stage gate’ where someone, a product owner, project manager or team leader, reviews and approves that the stage has been satisfactorily completed.
What is agile software development?
An agile software development methodology is a more iterative, team-based approach to development. Instead of breaking the project down into blocks to be completed in order, the product is broken down into components that are completed in isolation from each other. Breaking down the project into smaller components allows for the initial analysis/design section to happen continuously throughout the project.
Each component of the product might go through its own waterfall-type development methodology, with analysis, design, development and testing, but the point of agile is to keep producing working deliverables throughout the entire project. This allows the customer or product owner to review throughout product development, rather than only at each stage gate.
Agile is more of a way of working than a project management technique. Elements of an agile methodology include:
- ‘Backlog’ – a prioritized list of components of the final product that need to be produced.
- ‘Sprints’ – the duration of time (usually a couple of weeks) dedicated to working on each component from the backlog.
- ‘Standups’ – the (usually daily) opportunity that product owners and team leaders have to receive updates from members of the development team on the current status of each of their sprints.
Waterfall methodology advantages
- The extended planning and design phase means that both the developers and the product manager have an aligned understanding of what the requirements for the project are.
- Because of the meticulous outlining of the project requirements, the software is then designed much more completely.
- With a waterfall methodology, it’s easier for a project manager to understand where in the timeline of completion the project currently is. When the project reaches the ‘build’ stage gate, they can more accurately predict how long until the project is completed. This allows them to manage expectations and deadlines.
- The product manager is not necessarily required after the list of requirements is initially agreed upon.
Waterfall methodology disadvantages
- It can take a long time during the design and analysis phase to agree on the requirements, and for research to be completed. Often, developers would rather just get started with the code.
- It is difficult to foresee at the design stage what problems may occur later on in the process. This is not true of agile, as design, coding and testing are constant.
- Mid-project changes to the requirements are much more difficult to incorporate with the waterfall methodology.
- As waterfall is usually a deadline-driven methodology, if the design or development stages take longer than expected, then often the testing stage is cut short to meet the release date. This can result in poor quality and buggy products.
- Because the completed product is only produced at the end of the development stage, it’s difficult to know whether the requirements are actually being met until testing begins. With agile, working software components are being continually produced.
Agile software development advantages
- Throughout an agile software development methodology, the product owner has plenty of opportunities to see the progress of the project, and check that the requirements are being met.
- Progress is easy to measure, often through the use of visual aids like Kanban boards that show where in the process each component lies.
- It is easier to implement changes to an agile project than it is for waterfall.
- If a deadline is drawing near, it is easier with agile to produce a basic prototype or beta version of the product, with additional features to be added later.
- The collaboration between different teams among the business often makes for a more productive development environment.
Agile software development disadvantages
- The constant involvement of the product owner is only beneficial if the product owner has the time for it. This is why co-location is very important for an agile development methodology. The benefit of regular stand-ups is lost if the teams aren’t in the same building.
- Agile is often unsuited to cost or time constrained projects, as the more scattered component-based approach makes it difficult for teams to commit to a project completion deadline.
- Agile requires real commitment and collaboration from the development team and the product owner.
- Because of the less extensive initial design and analysis phase with an agile methodology, there may be frequent additional requirements to the original scope, and thus reprioritisation of tasks.
Difference between agile and waterfall methodologies
To sum up, consider this example. To use a waterfall methodology to write this blog post I would have broken it down into a modular approach: research topic, plan, write blog, check for typos, fix typos, and publish. This would work fine if I was sure from the beginning that the blog post would meet my requirements.
Alternatively, and perhaps more realistically, I could take a more agile approach: draft, plan, review, write, review, rewrite, review, research, rewrite, review, and publish. This method would allow me to rework and readjust the focus of the blog post throughout creation.
As often happens in development, there is no ‘better’ solution. Some people will prefer the structure of waterfall, and others will prefer the iterative approach of agile. Some companies might even create their own approach that is somewhere between the two software development methodologies. One consideration is that co-location is a very important part of agile development, and if teams are spread over many different locations an agile approach is difficult to implement successfully.