Everybody knows that the waterfall way of developing software is very risky. You spend a lot of time writing requierements documents, and then a lot of time programming, and then you get a lot of software to a testing phase... and then you show a lot of software to your users...
Waterfall only works if you follow all of its steps and if you don’t make any change to the specifications when you start coding, when a waterfall project fails, most of the times is not because waterfall is wrong but because waterfall doesn’t adapt to the type of software they want to build, Waterfall doesn’t work with software that evolves while it’s been built.

