Agile vs Waterfall: which one is right for your project?
Before Agile, the Waterfall model, which is just one example of a broader class of plan-driven processes adapted from manufacturing, was considered the best practice for software development.
In this blog I compare Agile, an approach based on
flexibility and continuous improvement, with Waterfall, a
linear and predictive paradigm. To avoid
misunderstandings, I want to add that by predictive I
mean that Waterfall greatly emphasises the importance
of anticipation versus adaptation, while Agile
emphasises the opposite. But I am not saying that Agile
teams don’t plan. Adaptive planning is an integral part of
any agile project.
Moreover, my goal of making this comparison is not to
convince you that Waterfall is bad and that Agile is
good; both the approaches carry their own set of
strengths and weaknesses to project delivery, and both
have projects more suited to them.
The waterfall model, introduced in 1970, quickly gained
popularity because it brought discipline in software
development. It is a sequential design process, in which
progress is seen as flowing steadily downwards (like a
waterfall) through several distinct phases:
Requirements, Design, Implementation, Test, Deploy,
Maintenance.
The Waterfall model does have advantages, such as:
● It is easy to understand and use, it follows the
same sequential pattern for all projects.
● Discipline is enforced, indeed every phase has a
start and an end point. It is easy to share
progress with customers.
● Puts great emphasis on documentation. The
detailed documentation makes it easier to hand
over to separate support teams. Moreover, in
case of employee turnover, the strong
documentation allows for minimal impact on
plans.
● It is good to be used when the project is a
familiar territory with a predictable path and the
client knows what to expect.
It has also quite a few disadvantages, including:
● Clients usually appreciate what is needed when
the application is delivered, therefore lots of
educated guesses and assumptions are made
upfront, but software is not delivered until late.
The coding begins only at the third phase.
● Once a phase is completed, you are not
supposed to go back. If the team discovers that
a requirement is missing while being in the test
phase, this could have an impact on the rest of
the project.
● Changes cannot be easily accommodated: if
requirements change, the plan and the budget
will be adversely impacted.
Agile addresses the limitations of Waterfall, but it also
has a few drawbacks, besides strengths.
Some of the Agile strengths are:
● Change is embraced: with shorter cycles, it is
easy to accept changes in requirements at any
time.
● It is very good when the end goal of the project is
not well defined or when the end outcome is
clear but there is flexibility in how it is met.
● Breaking down the project into iterations allows
the team to focus on high-quality development,
test, collaboration. Having tests during each
iteration permits the team to find and fix bugs
quickly.
● Working software is delivered at each iteration
and customers have the opportunity to use it,
share their input and have a real impact on the
project.
● Feedback from users and team members is
encouraged, so lessons learned are used to
improve future iterations.
Some of the Agile drawbacks are:
● Planning can be less concrete as tasks can be
reprioritized at each iteration, it is possible that
some work items initially scheduled for delivery
may be not completed in time.
● The team must be knowledgeable. Agile teams
are usually small, so team members must be
highly skilled in a variety of areas.
● Documentation may be neglected. One of the
Agile values puts emphasis on working software
rather than extensive documentation, so team
members could consider documentation less
important. The team should find the right balance
between documentation and code, and
acknowledge that this can be challenging for
them to balance sometimes.
As I said at the beginning of the chapter, the key to
deciding which is right for you comes down to the
context of the project. If it is going to be changing
rapidly, eg. groundbreaking project with uncertain
outcomes and high rates of change, complexity, and
risk, choose Agile. In case you know exactly what you
need, eg. produce a predetermined end result within a
specific date and no flexibility in how to deliver it, then
maybe Waterfall is the better option. A third option could
be to consider taking aspects of both methodologies and
combining them in order to make the best possible
software development process for your project.
0 Comments