Adaptability or Predictability?
Agile vs Waterfall Methodologies
In the business of software development, starting a project requires planning; you have to decide on the approach to take and which methodology to use. Simply put, a development methodology is the way in which you organize the software development work for your project. Knowing which methodology fits best with your project is the challenge and deciding which to use often involves spirited debate.
First, it’s important to know what some of the popular methodologies are. In this article, we focus on the waterfall method (also referred to as the “traditional” or “linear” method) and the agile development method.
Another way to think of waterfall is to think of a very linear approach. The agile development methodology is based on rapid development and often utilizes the SCRUM process framework. Both are mature, tested methodologies and they each have their advantages and disadvantages.
Before you can decide on a methodology, you need to ask yourself a few questions:
· Is the application going to require fast changes/turnaround?
· Do you have a turnkey (mature) project or is it a start-up (time & materials)?
· How hard is it to budget and plan before starting the project?
· What are the time and budget constrictions?
· What level of commitment do you need from your customer?
· What level of commitment do you need from your team?
· What kind of team do you have (rookie or skilled) and how large is the team?
So which methodology is better suited to your project? How do you decide? Read on to learn about the pros and cons of the waterfall and agile methodologies to help you select the methodology which works best for the type of product you’re developing and the needs of your customers.
The Waterfall Methodology
Waterfall was born from a manufacturing process and started having software development applications back in the early 1970s. So, it’s safe to say that the waterfall method is tried and true. The waterfall method is a very linear and sequential development process; each step must be completed before starting on the next one.
Waterfall is usually comprised of the following distinct steps/phases:
- Requirements Analysis
- Testing (System and User Acceptance)/Verification
- Bug fixes
- Final product delivery
- The development team and the end users agree on the deliverables (what and when) early in the software development lifecycle, which makes it easier to set the project plan for each phase.
- Because waterfall is so regimented and the scope of work is defined in the beginning, it makes it easier to design the software and plan out the project. This also makes it easier to measure and keep track of the project progress.
- Throughout the project, each team has downtime, allowing them to work on other projects. For example, most software development projects are comprised of business or functional requirements analysis, development, testing, and support teams. But these teams don’t work at all the time at the same time. For instance, business analysts (BAs) set the requirements for the project in the beginning, but during the coding effort, those BAs can work on other projects or future requirements.
- The end user participation is minimal and occurs mostly in the beginning of the project, when the requirements are being defined. End users may participate in a user acceptance testing (UAT) phase, but it’s usually a small subset of the end-user population.
- Works well if the system under development requires multiple software components, meaning multiple projects being run simultaneously.
- It can absorb staffing changes because the development expectations are clearly defined and documented.
- The hardest part of the process is the requirements gathering phase. End users can sometimes have trouble visualizing what the finished product will look like, even with the use of wireframes and mockups. This can make defining the requirements a daunting task.
- It relies heavily on the accuracy of the initial requirements. If the requirements are incorrect, the only way to address the issues is in a subsequent release, which costs time, money, and customer satisfaction.
- Testing and verification are done toward the end of the development process, meaning that any serious bugs could affect the delivery date or the quality of the final product. At the point where bugs are found, developers are “up against the clock” to find good solutions. And, in some cases, if a bug had been discovered earlier, it could have affected the software design itself.
- Relies on documentation for each step
When to Use Waterfall
The waterfall method works best with turnkey (mature, established) projects, where the requirements are more “set in stone” and the end-user isn’t going to participate in the whole process. Waterfall lends itself to larger organizations with a set management structure and plentiful development resources. If you have a development team with all levels of coders, the waterfall method can absorb the differences in skillsets without negatively impacting the final delivery of the product. Waterfall methodology can also be useful for highly complex projects, projects that have a longer development and release cycle, or projects that are PC-based, rather than digital or mobile applications.
The Agile Development Methodology
The agile development methodology is an iterative, team-based approach to software development. Agile development is meant to be exactly that – agile and flexible, able to change to changing needs.
In an agile project the work is compartmentalized into sprints, which are defined time-boxes (usually 2-3 weeks), with a set list of deliverables. The deliverables are set during sprint planning and each sprint has its own list of deliverables.
Agile development relies heavily on end-user involvement throughout the process. As each sprint is completed, the work can be reviewed by project managers and end-users.
The agile development approach is based on the Manifesto for Agile Software Development and generally adheres to the following steps:
- Plan – Plan for your customer’s vision by understanding their requirements, pain-points, and needs.
- Build – Create a feature list and then prioritize the need for those features.
- Product deployment – Launch your product and learn what works and what doesn’t.
- Lessons learned – Identify improvements and new features for the next sprint(s).
- Repeat Steps 1-4.
Agile Methodology Pros
- Works well in digital and mobile development platforms that require quick turnarounds/changes that incorporate real-time user feedback.
- Because of the high level of customer involvement, the agile method can help better define the goals and requirements of the application.
- Can be lower risk than waterfall because the requirements are developed throughout the process, rather than being statically defined in the beginning.
- Can save money by reducing the risk of implementing the wrong features or by introducing defects into the final product.
- Relies less on documentation because the requirements are flexible and constantly changing based on need.
Agile Methodology Cons
- Because there is no set plan or list of deliverables up-front, it’s possible to have a final product that is vastly different than what was originally intended.
- Requires constant user feedback.
- Agile requires daily team interaction and meetings (sometimes called standup meetings). Because teamwork is critical to agile development, it doesn’t work well for software teams that don’t communicate with one another on a daily basis or for teams that may be easily distracted by multiple “touch base” meetings.
When to use Agile
Agile lends itself to the team mentality, as the agile development process is truly a team effort from beginning to end. Agile is built to be a flexible model, able to adapt to changes as they come.
Agile is a great choice for start-up (time and materials) projects and small businesses, where the budget may be smaller, but there is also active customer involvement throughout the development cycle, and the team is flexible and talented enough to respond to changes quickly. Agile is often the methodology chosen for digital or mobile application development because the consumers of those applications expect rapid changes in response to changes in competitor applications as well technology changes.
So Which is Better for Your Project: Waterfall or Agile?
Both waterfall and agile are established, proven methodologies. One isn’t better than the other, but each lends itself to different needs and constrictions. Choosing one over the other doesn’t guarantee success. Each methodology has its strengths and weaknesses, just like any software development team. It’s all about understanding your customer’s needs, as well as your team’s strengths and weaknesses and identifying the methodology that works best based on those factors. How you choose to implement the methodology can also affect your results, so it’s always a good idea to constantly evaluate your development process so you can determine if a particular methodology isn’t working for you.
Some companies even find that taking a hybrid approach (a combination of waterfall and agile concepts) works best for them. In the end, it comes down to what you need for your company, your employees, and your customers that will guide you to the methodology that best suits your needs.