Agile vs. Waterfall
There are two primary methods for software development which are in common use. The first is referred to as Waterfall, the second is called Agile. There are advantages and disadvantages to each, and of course, there are many variations to how each of these show up in practice. This post seeks to help you gain a general understanding of each. Hopefully, it will help you make decisions about how to approach software development projects.
The first approach is called the Waterfall Method. This type of software development process works well when there's a clear vision of what's needed that translates into well-defined requirements. Clear requirements up front allow development of a very specific software program design so that you can then know what the software will cost and how long it will take to develop the end product.
Here's how it works
You create a set of business requirements for your end product. Those requisites are passed on to a design team who work through a process with you to create a design expressed as functional requirements. Functional requirements are documents that provide a level of detail that software engineers can use to design and build software. Then, the completed design is reviewed and approved by you. At this point, the development team can define the development timeline and the cost for you.Once approved, the design (functional requirements) goes to the programmers to write the code. The QA (Quality Assurance) team will test it to make sure it works and meets the documented specifications. Normally, this is followed by a beta release time period where the business users can test the new software in their environment. Finally, the program is released into production. At this point it enters the maintenance phase where any further problems or enhancements are handled with software updates and patches.
This approach offers a high degree of predictability and works well when the requirements are very well understood because you can create a fixed budget based on the design work, and you can clearly lay out a timeline. If you know what you need, this approach creates more certainty around budget and timeline, and who doesn't like that?
The intrinsic drawback with this methodology is that it can potentially make changes more difficult or costly because the requirements were not really that well understood and the need for change may not be identified until the product gets into testing. So what might have been a small thing to change early in the process could become a large change because as development continues additional dependencies are built on top of that thing that needed to change. something that may need to change.Another drawback is that the Waterfall process often leaves a long gap between development of the requirements and when output is visible to the business users. That can get stressful for the end users who want to see something sooner rather than later.
The Key Point
Much like in real life, you can't send things back up the waterfall; it is vitally important that you have a clearly defined vision for the end product because its predictability and efficiency is intricately tied to accomplishing each milestone at a precise time.
A different strategy was developed which put a higher value on feedback and collaboration than on completeness of up front requirements, documentation, and design. This approach, known as Agile, made the design process more flexibile by focusing on putting pieces of software into the hands of the users early rather than wait for a 100% complete end product.This more flexible approach is better able to cope with deficiencies in the specifications, bugs in the software, internal conflicts, new specifications, and changes resulting from improved techniques or advancing technology.Instead of having all the requirements fully detailed out at the beginning as in Waterfall, the Agile Method allows the business to begin building something without having to have a complete vision for the end solution. This method iterates through the known pieces of the project and presents working functionality as the project progresses. This approach allows adjustments to be made without extensive retrofitting.
Here's how it works
This process kicks off with some initial high level planning which says "I'm going to have these starting inputs, and I want to get this result as the output. How do I make that happen?" In a series of logical steps the process is analyzed and a set of features is developed that represents the high level scope of the project.Then, the features are grouped into a series of iterations (or in some flavors of Agile, these are called sprints) which are prioritized for development. Each iteration or sprint delivers functioning code which gets into the hands of the end users for review and feedback. This allows the users to identify changes that can quickly be coded in the next iteration. It also allows the vision to get refined through collaboration between the developers and the end users.
The Agile Method provides working functionality quickly and allows for adjustments and changes to the software throughout the process. Generally, the software development team does not get too far down the road (which can be costly) before the need for change is identified. This approach gives you as the business user many opportunities to speak into the process and refine both your vision and the software as the project proceeds.
The inherent flexibility of Agile and the lower level of up front definition of requirements at a detailed level can leave a certain amount of uncertainty about how much of your budget it will take for you to get to the desired future state. But the process is very effective at forcing trade offs between budget and functionality and can help you clearly define what is a "want" and what is a "need" to make your solution work.
The Key Point
The Agile Method offers flexibility to get you exactly what you wanted, but it comes with uncertainty. Since the requirements aren’t fully known at the beginning, it can be difficult to apply a fixed budget or timeframe to the project. On one side of the coin, you may quickly realize what you do and don’t need in the project, thus cutting out unnecessary scope (and cost) from the project. However on the flip side, there could be additional overhead as the project is tweaked, refined, and adjusted to better suit the end goal and you added in new features and specifications.
The Waterfall Method's greatest strengths are its fixed costs and predictability. You know the price, and when it is going to be delivered. Its most significant weakness is its inflexibility. This can be overcome with a good partnership between the software development company and business side stakeholders.The Agile Method is extremely flexible and could evolve into a significantly different product than was originally envisioned. It leads to a product that performs exactly the way you want it to, because you’ve learned more about what you want along the way.If the project is simple, straightforward and you are committed to accepting exactly what you ordered, then the Waterfall Method is likely the best solution. On the other hand, if your expectation is that a fast-moving, quickly-changing industry will have evolving needs during the development process, then the Agile Methodology is the best choice.
Now you know!