Don’t draw diagrams of wrong practices
tarmo.fi
tarmo.fi
Waterfall has ALWAYS been an anti-pattern.
It has NEVER been a practice that ANYBODY advocated.
Yes, people started with design, then they implemented the design, and then they realized there were mistakes in the design, and sometimes, stupid people refused to admit this and change the design, and then they were called out, and told that that "the waterfall method is discredited" or something like this.
University instructors who "taught" the waterfall method were either grossly misinformed (as if this was considered an accepted practice in the real world), or, more likely, trying to make a point about the anti-pattern.
So you have worked for (MS) and built organizations that have a far better idea of how to build software than the waterfall method, but believe that there are advocates who believe in the waterfall way of doing things. Fortunately it is becoming less frequent.
I've never seen otherwise unless the junior guys can't handle it and it gets escalated to the people who are trusted with design.
I don't think you're quite right there. It was mandated by the US Department of Defense for years (DOD-STD-2167). Since they were (are?) the biggest software customer in the world, this was influential beyond the DoD.
Although there are a great many blog posts on this subject, they mostly (including this one) are uncredited paraphrases of Craig Larman's excellent research on the history of iterative development. It was Larman who figured out that Royce's original paper described waterfall as what not to do, Larman who figured out the history of how the DoD adopted it anyway (basically, they didn't read the second half of the paper), and Larman who tracked down the guy who had been responsible for that decision. IIRC, they met for lunch in Boston and his first words to Larman were "I'm so sorry!"
So the illusion of control I think is convincing, more so than any Royce diagram.
What I'm getting at is what I've seen from waterfall, where responsibility is "handed-off" from department A to department B to department C and then it's "done".
Managers use the waterfall phases to schedule each department's workload, so each team is essentially working in isolation.
e.g.: "Requirements and Design" is one department, "Implementation" is another, "Verification" is yet another. (Design, Developers, QA)
So there's no real incentive on either side to change the process, unless both companies "get it" from the start that you can't make quality software this way. The likelihood of this decreases dramatically the larger the client.
We then proceeded to ignore this entirely and for the rest of the course acted implicitly as if we were using waterfall. Including in subtle ways, such as being given homework assignments due next week with no chance for iteration. An "assignment" in which there is no room for iteration bears absolutely no relationship to the practice of software engineering of any kind.
In hindsight, thinking back to my software engineering course, I'm not sure there's a single thing in it I agree with ten years later, and it's not like any of the things I've learned in those ten years are brand-new knowledge, it was all equally obvious in 1999.
What they didn't say is that describes virtually every project.
Meanwhile, web applications (that aren't Google-search scale projects) don't require any software "engineering"—they're simply designed and then crafted, more like a clay pot than a bridge. They're iterated like a play is rewritten slightly after each performance, based on audience approval and obvious errors, not based on any accepted theorem or body of knowledge that says that the given practice is wrong.
A corollary of that statement is that Software Engineering has no use for most of us here at HN :)