Traditional software development models are struggling to deliver results in the modern technological landscape. Long development cycles, expectations of large-perfectly specified product requirements and insufficient time for testing are problems plaguing traditional software teams.
The waterfall method of software development is becoming less sustainable because customer requirements are more fluid than ever and teams need to be able to respond quickly to change. A product released a year after the initial spec was drawn up will most likely be irrelevant.
Agile methodologies are frameworks based on the agile manifesto that focus on flexibility during the development stage and aim to incorporate change into the software development lifecycle.
Here are the salient features and distinctions between the two methodologies:
The waterfall method is a linear method of software development. This model focuses on breaking down the development of a project into stages which are executed linearly, one after another. The aim is to deliver a fully functional product at the end of the development effort.
The following are the typical stages of development in a waterfall environment.
- Requirements, Analysis & Specification:
- Implementation / Development
- Release & Maintenance
Challenges faced in a waterfall environment:
Some of the challenges faced by waterfall teams are:
- Long Development Cycles
- Change can be impossible to manage
- Lack of customer feedback
- High Risk of product failing to meet business objectives
Agile methodologies focus on treating the product (software) being developed as a collection of smaller, individual components. These may be called projects, epics, features etc.
The focus is on building many stages of functional products with limited scope and getting them out to be market tested as often as possible. Each stage acts as a small component of the overall product. This process is continued until the product is considered to have all the required functionality.
Advantages of the Agile Framework:
Agile frameworks generally focus on improving product outcomes and maximising the probability of market success.
Agile focuses on trying to incorporate customer feedback into the development process. This usually results in teams building better products.
Products are frequently tested and deployed. This usually results in more reliable quality of software.
Disadvantages of using an agile method
- Agile methods may be difficult to implement, especially in more traditional software development companies.
- Implementing agile often requires overhauling existing processes.
- Agile processes sometimes need to be facilitated by specialised team members like agile coaches etc.
- Success is not often guaranteed at the first attempt. It requires constant tweaking and improvement.
1. Features vs Phases
The waterfall model views the entire project as a series of phases. Each phase requires the team to fully complete the activities of that phase and then move on to the subsequent phase. Each phase could take months to complete and revisiting old phases to make changes is usually impossible.
Agile models usually involve breaking down the product into features with limited scope and completing these features in steps or in a series of sprints.
2. Customer Centricity
Agile teams tend to involve the customer in the development process as often as possible. This opens up the possibility of incorporating customer feedback and iterative development.
The waterfall model is linear in nature and the customer has little to no role in the development process. Customers are usually present in the requirements gathering phase at the very beginning. It is here that they help the product team understand pain points and map out requirements. The next time the customer is involved will be usually towards the very end of the process.
3. Estimation & Prioritisation
Estimation and prioritisation are (usually) critical to the success of agile frameworks. Wrong estimation and prioritisation usually have less of an impact on linear development models.
Bad estimation in waterfall development teams leads to missed deadlines and a prolonged development phase. Wrong estimation severely impacts agile teams especially in sprint environments as a demo ready product needs to be developed in every sprint.
Prioritisation is very important in agile as the most important features are (usually) prioritised first to minimise the risk of overall product failure. Once the product meets requirements, product owners choose to focus on the “nice to have” features. In waterfall teams, development teams work on and finish what is agreed upon in the previous phase.
4. Team Structure
Agile development teams tend to be smaller and cover a breadth of functions. This is because these teams are usually expected to deliver functional and tested features at the end of every iteration. Designers, Engineers, QA and individuals from a variety of functions usually form self organising squads that own what they do.
Waterfall teams follow a handoff model where specialised teams are in charge of completing tasks in phases before handing work off to the next team. This is a siloed approach and is more suitable for client servicing models.
5. Quality and Testing
Testing in a waterfall framework happens at the end of the development process. This tends to hurt the quality of software because a large, entire codebase is tested for the first time at the end. This not only makes thorough testing harder, but teams tend to cut allocated time from the testing phase when they are behind schedule.
In an agile environment, testing happens in every iteration and the codebase to be tested is usually smaller. This ensures that the highest quality is constantly maintained and usually leads to higher quality software products.
6. Handling Changes in Scope
The customer centric nature of the agile model means that scope changes and requirement changes are fairly common. In fact, changes in product requirements are embraced in many agile frameworks as these changes help build a better product. The iterative nature of development ensures that these changes can be handled effectively without derailing the development efforts.
The waterfall model does not have a way to deal with changes in requirements. The linear nature of development makes it difficult to go back a couple of phases and make changes. This is one of the main reasons many teams all over the world are moving towards agile methodologies. This however, is still an extremely effective way to deliver software to clients with a fixed pre-agreed scope. Waterfall still might be the best development method in many service based software companies.