When to use Waterfall and when to use Scrum?

Is there a clear way to determine when a software development project should be conducted using a Waterfall Methodology or using Scrum? What criteria should be observed for choosing one or the other?

Author: Maniero, 2014-01-30

8 answers

Well, I didn't mean to answer, but here's a comment Francisco Junior made:

If by any chance any user comes only by subjectively opining in the answer (as in the first comment saying to "never use waterfall"), he is the one who should receive negative votes.

So come on: you can sit your finger on the negative here on the left!

According to the page about the waterfall model on Wikipedia :

The first formal description of the waterfall model is often cited as a 1970 article by Winston W. Royce, although Royce did not use the term "waterfall" in this article. Royce presented this model as an example of a flawed, non-working model.

Which translating into English is:

The first formal definition of the waterfall model is often referred to as Winston W. Royce's 1970 article, although Royce did not use the term "waterfall" in this article. Royce presented this model as an example of a flawed and non-functional model.

How interesting! The waterfall model has already been born with the perception of being flawed and non-functional! And that's more than 40 years ago, so imagine today!

Well, let's take a deeper look at the Royce Article :

Figure 3 portraits the iterative relationship between successive development phases for this scheme. The ordering of steps is based on the following concept: that as each step progresses and the design is further detailed, there is an iteration with the preceding and succeeding steps but rarely with the more remote steps in the sequence.

[...]

I believe in this concept, but the implementation described above is risky and invites failure. The problem is illustrated in Figure 4. The testing phase which occurs at the end of the development cycle is the first event for which timing, storage, input/output transfers, etc., are experienced as distinguished from analyzed. [...], then invariably a major redesign is required. [...] The required design changes are likely to be so disruptive that the software requirements upon which the design is based and which provides the rationale for everything are violated. Either the requirements must be modified, or a substantial change in the design is required. In effect the development process has returned to the origin and one can expect up to a 100-percent overrun in schedule and / or costs.

[...]

Hopefully, the iterative interaction between the various phases is confined to successive steps.

[...]

Unfortunately, for the process illustrated, the design iterations are never confined to the successive steps.

Translating into English:

Figure 3 demonstrates the iterative relationship between successive development phases in this scheme. The ordering of steps is based on the following concept: that each step is a progress and the design is better detailed, there is an iteration between previous and succeeding steps, but rarely between remote steps in the sequence.

[...]

I believe in this concept, but the implementation described above is risky and is an invitation to fail. The problem is illustrated in Figure 4. The test phase that occurs at the end of the development cycle is the first event for which time, storage transfer of input and output, etc., they turn out to be different than what was analyzed. [...], and then invariably a heavy redesign is required. [...] The necessary changes in the design will probably be so disturbing that the requirements in which the design was made and which prove the reason for everything have been violated. Either the requirements will have to be modified or a substantial change in design is required. The effect is that the development process has returned to the origin and then one can expect an overflow 100% on time and / or costs.

[...]

The interaction between the various phases is expected to be confined to successive steps.

[...]

Unfortunately, for the illustrated process, the demonstrated iterations are never confined to successive steps.

Figure 3 of the original Royce article

Figure 4 of the original Royce article

I recommend reading the entire article, and again I stress that it is from the distant year 1970. However, this continues until today, waterfall starts from the precept that development is composed of rigid and sequential steps, but this never works and everyone who has ever entered any project in this knows why:

  • the customer changes his mind all the time.
  • the customer does not know what he wants.
  • a bug appeared in the test and we found that there is an error there at the beginning of the project.
  • in the middle of the project one thing happens and then we have to go back and change a lot of things.
  • O user did not like the product.
  • the competitor solved the problem in a different and better way.
  • the customer requested changes to a certain part, changing an important requirement.
  • there are two or more conflicting requirements.
  • the customer one hour says one thing and then says otherwise.
  • there was a difficult problem to solve in development and the deadline has already been set.
  • Etc.

If you want something newer, it's sooooo, but sooooo easy to find on the internet, I could easily quote Martin Fowler, TDD practices, or even the book Head First on Agile development, which inside explains why waterfall doesn't work.

And now, to ensure my downvote, I'm going to give my personal observation about what we see these days: in fact, it's hard to find any material that defends the waterfall these days that comes from someone who has a clue what he's talking about, and not just parroting old concepts that never took the trouble to question.

In the list above I cited some reasons why waterfall fails. Basically it all comes down to the fact that things change over time. What yesterday was a requirement, today may not be anymore. What was not important yesterday, today is fundamental. Today we have an important restriction, but tomorrow we have no more. That's where Agile methodologies come in: they were designed to tackle these problems, assuming these things change over time and strategizing so that changes can be implemented quickly.

Well, I confess that so far I have only given half the answer and I have not said anything about scrum. I'm not going to go into much detail about scrum and I'm just going to make a quick list to recommend when to use Agile methodologies (more generically, whether scrum or not) or when to use waterfall, and I'm sure that after you read this and have already given the downvote, still call your friends to also vote against:

  • if your scope and requirements are non-negotiable, immutable and written in stone, and your code is absolutely perfect and bug-free, you can get along with waterfall. Otherwise, I recommend agile.
  • if your function or your company's function is to generate millions of pages of requirements documents, business rules, architectural decisions, flowcharts, etc, and these documents they will not be read or criticized by anyone (or at least by anyone who has the power to be heard), and it is not you who will make the code, so waterfall is also for you. Otherwise I recommend the agile.
  • if you plant bugs and ill-defined requirements on purpose in your project and then charge the customer for any requested changes, then waterfall will suit you as well. Otherwise I recommend the agile.
  • if your religion, your philosophy, your sense of living, or your favorite deity tells you that you should follow bureaucratic and rigidly defined plans simply because things have always been like this, are like this and always will be like this and that you have an obligation to be happy about it without ever thinking of questioning, so I recommend waterfall. Otherwise I recommend the agile.

To close by responding to this comment:

By the way, aeronautical certifications require formal models of development. The software that runs on Boeing planes, for example, is much more likely to be developed with a process closer to Waterfall than a purely agile and informal methodology like Scrum. And I ask you one thing: do you prefer to fly on a plane that has FAA software certification or on a plane that has been developed without any formality with Scrum?

In response to this, I say that on 11/10/2013, I attended a lecture at IME / USP in São Paulo demonstrating the opposite. The title of the talk was " combining Scrum, AOP, DDD and metadata – a success story at Embraer."and the speakers Roberto Perillo, Tiaslei Vasni and Daniel Feichas. Here is the summary of the lecture:

This talk consists of presenting the approach of creating an application called AHEAD (Aircraft HEalth Analisys and Diagnosis), currently underway in the area of Business Aviation at Embraer. Application architecture combines Domain-Driven Design, aspects and metadata, the development of which is being managed with SCRUM. Initially, it will be shown a small history of projects at Embraer and why it was decided to use SCRUM. Next, we will show you some mistakes made by the software industry (according to the experience of the team members) and the important concepts for understanding the approach used in the design of the application. The following will be presented the functional and non-functional requirements that motivated the use of the approach and how the elements were implemented. It will also be shown how the ALM environment manages the application lifecycle and how the tests (unit, integration and system) were organized. As an example, issues related to the implementation of security in the application, reverse AJAX through domain events, cross-cutting interests and integration with other systems will be presented. In the conclusion, the benefits obtained from the approach, such as gaining flexibility in the application and accelerating the speed of the team when it comes to productivity.

 29
Author: Victor Stafusa, 2017-10-15 13:00:36

I will risk contributing to this controversial subject, especially after reading Victor's answer. I want to refute his argument, but at the same time fully agree with him. Come again?

Waterfall is everywhere

First, all developers use Waterfall. Always. What changes is the scale.

We cannot circumvent the string Requisito > Análise > Design > Implementação > Teste > Integração, simply because it is impossible. How can we do analysis without requirements, implementation without know what we have to do or test without code?

The difference is that some try to do everything in a sequence, write large blocks of code and try to run everything at once. Others, more like my case, test the code every two or three lines modified or added.

So I can reconcile my statements by making a difference between a full Waterfall and a micro waterfall . Agreeing with Victor, it is simply impossible make a complete Waterfall in a software project because it will always be necessary to review errors and changes that affect the previous steps. Even to fix a small bug you need to analyze the requirements, make design of a solution, implement it, test it. On the other hand, what Agile processes do is decrease as much as possible the time boxes to get feedback from the customer, thus creating Micro Waterfalls.

Designs with appearance of Waterfall

In practice, projects can be " interfaced* with the customer based on the full Waterfall model and micro managed in the development team using Scrum or any other Agile management methodology.

For some customers, not It is interesting to get a product very early. I thought about the case of a change of law with a date to take effect. What is the use of receiving the product before? A project with a schedule Waterfall would fit well in that case. However, nothing prevents the development from being done with Agile principles, where every one or two weeks the functionalities are integrated into an executable version, tested using mocks , presented to a customer (even if it is not the customer itself, but a business expert).

We can't have everything

Some time ago I wrote an article about the iron triangle. The idea of this representation is to pass the idea software projects deal with intrinsic constraints that we cannot simply ignore. The commonly cited are: time, resources, scope and quality.

More traditional software development and management methodologies, where the Waterfall fits in very well, usually tend to fix time and scope. What happens? It calculates the number of resources needed to deliver the system on a date, things do not go as planned and who suffers is the quality.

Modern processes, which usually take the term "incremental and iterative" to the limit, follow a reverse path. They generally vary the scope (by adding or removing User stories from sprint according to productivity) to maintain fixed time and quality at an acceptable level.

Final considerations

Anyway, my general advice would be:

  • For software development, never use Waterfall in the full sense of the model, as it would be completely unfeasible.

  • When, and only when, the client or the situation requires a strict schedule, encapsulate development into a project that looks like a Waterfall, but being very aware that when we set time and scope, we harm quality. we can't have everything.

 17
Author: utluiz, 2014-02-03 01:17:47

For me, the dividing line is in the" degree of certainty " that one has of the project. Projects that you know exactly what to build, waterfall fits very well (ex.: buildings). Projects where there is a great degree of uncertainty about what to do and you learn a lot during the project, the Scrum fits better.

The post requirements survey and SCRUM talks a bit about how the topic "requirements survey" is approached in Agile methodologies.

Unlike Waterfall where changes are not welcome (because they generate "change requests" and require review of the entire project), agile encourages changes. Therefore, when the goal of the project is something easy to realize at the beginning of the project (it is easy to predict all activities, deadlines, etc.), waterfall fits much more. In the case of difficult, more experimental requirements, agile handles better, mainly because it encourages prioritizing what is known less, mitigating the risk of the project not being delivered sprint to sprint.

For this reason, scrum usually fits very well in software projects. At the beginning of the project, there is a lot of uncertainty that is reduced little by little. As iterative deliveries receive feedback from the user, feature improvements are estimated (in new stories), and re-enter the backlog to be prioritized.

The management of the deadline begins to be more efficient, because as the team generates history of "speed" (how many of how many points are made within a sprint), it is known by the size of the backlog x speed what the forecast of completion of the project.

On the other hand, in waterfall, the culture of setting dates in stone ends up reigning, because in order not to miss the deadlines, changes are discouraged. By complicating scope renegotiations (on each change, the entire activity thread, and the entire schedule should be revised), the result turns out to be products that are not of interest of the user, or the deadline for its construction is so great that upon completion of the project, the requirements given at the beginning of the project no longer reflect the user's need.

Another interesting reference on the subject is in Robert C. Martin's book "Agile principles, patterns and practices" (Appendix B). In this book he a comparison between the time of "documentation" (or design) x the time of construction. In this exercise, the author suggests that in civil construction, for example, the cost of the project is a fraction of the total cost of construction and once the project is ready, it is known exactly what to build. In software, the "model", would be the source code itself, while the construction only the" compilation " of the software, the construction. In this case, the project time is almost the entire time of the project. In these scenarios, agile fits better.

 12
Author: Eric Lemes, 2014-02-02 20:15:15

When to use Waterfall?

When the requirements are well defined and with no prospect of change, such as the construction of a building. That is, very rarely in the case of software.

With the caveat that good software development methodologies are often iterative and can define a waterfall-like model as the procedure for each iteration, although the process as a whole is not Waterfall.


When to use Scrum?

I will use the features of the Scrum to determine when it is appropriate to use it.

Tip: if you are getting married, you can use Scrum to arrange the wedding. :)

Scrum is above all Agile

Scrum is one of the ways to implement agile methodologies ; this defines most of what Scrum is and as such it adopts the preferences of the Agile manifest :

  • individuals and interactions in preference a processes and tools
  • running software in preference to extensive documentation
  • Customer Collaboration in preference to Contract Negotiation
  • react to changes in preference to follow a plan

This is not to say that the criteria on the right side will be ignored, but rather that the criteria on the left side are preferred over they.

The adoption of the Agile Manifesto suggests a project profile for which Scrum( and other Agile method implementations) are best suited:

  • when requirements are expected to change over the course of development;
  • when the client is available to provide feedback to the development process;
  • when formally documenting the development process is not critical to the project;
  • when not it is necessary that the methodology itself determines the type of documentation generated by it.

Scrum has its own characteristics

Some Scrum-specific features refine this project profile:

  • relatively small teams, physically close and able to self-organize;
  • minimum time of one sprint to develop the product.

Situations where Scrum shines (compared to methods non-agile):

  • by being iterative, based on sprints and responding quickly to changes, Scrum ensures that changes will be met as quickly as possible, obeying a priority queue and delivering as many deliverables that the team(s) have the ability to deliver within that context. It shows its best when the customer, in addition to worrying about having this ability to respond quickly, is aware of the importance of its own willingness to provide feedback to the team(s), and want to have product iterations (partial deliveries) up and running as soon as possible;
  • when deliveries cannot go beyond the deadline. This is because the sprints have predefined duration (although it is possible to cancel deliveries).

Note: scrum experts please supplement / correct what was quoted as my experience as a Scrum is less than one year and just as a developer (pig ).

 5
Author: Piovezan, 2014-02-05 10:43:13

When to use Waterfall

  • The Waterfall life cycle is mainly used when the software to be built is defined mathematically and / or formally where all its requirements and logic are previously established and checked mathematically as the ABS brake. (Soon it is of extreme need for customer to commit to specification requirements).
  • Note: life support software must be approved by a specialized institution, therefore your documentation should be well structured (which is a requirement for the use of Waterfall).

When to use Scrum

  • when it is necessary to deliver features to the customer in a very short time (then the priorities of each function are staggered, the priority defines the delivery order).
  • when the customer is not completely sure of their needs.
  • when the domain of the application is constantly changing.
  • when a team is small (+/- 10 Members) and has good interplay. (Determining requirement).
 1
Author: Ricardo, 2015-04-22 00:07:32

In Scrum and other Agile methods product owner participation is required all the time. In these methods, the more the customer can interact to give feedback to the developer the better will be the software produced, that is, the software produced will be more suitable to the customer's needs.

If, for some reason, the customer cannot be present at all times, the Scrum or other Agile method becomes unfeasible or at least impaired. There, you probably will fall into a model closer to the Cascade (requirements -- > development -- > validation).

More as a general rule, the more interaction and the more feedback the better.

 1
Author: Rodrigo Vieira, 2016-05-25 12:23:22

I recommend leaning on Stacey's matrix, which helps visualize that when you have enough knowledge of what will be done and agreement with those involved, the cascade can serve well.

When you don't have that much clarity / agreement, agile can serve you better as it will help you test and validate small options throughout the project.

insert the description of the image here

 1
Author: Conrado Tramontini, 2020-07-11 14:54:47

Source: https: / / www. seguetech. com/waterfall-vs-agile-methodology/

Dear Colleague, it is very difficult to answer your question without making any value judgments or entering into complex arguments. It is a decision that can depend on many factors.

However, so that it does not go without an objective answer and as a comparative basic guideline, I suggest you evaluate the table above that summarizes well some aspects (pros and cons) famous of both approaches.

Source: https://www.seguetech.com/waterfall-vs-agile-methodology /

 0
Author: Caiuby Freitas, 2017-10-15 10:47:45