The requirements and design phases can/did often work very well. It's what comes after that derails the process.
When you spend more time trying to update your design to match the implementation (via change requests) than implementing you start to wonder if there's maybe a better way..
There's often a clear goal in these cases, and there's no 'minimum valuable product' you can quickly iterate on.