In almost every other industry where things are built, it is expected that all requirements and details are agreed upon and finalized before building commences. Except in software. In software there’s “not enough time” to gather all the requirements ahead of time. The importance of moving quickly is hammered into us from day one. And so engineers learn to fill in the gaps left by product managers just to keep the project going. Product managers, of course, also have the reputation for changing their minds frequently, which means engineers assumptions are often invalidated partway through the process.
And it is because of this that most projects fail miserably.
A drastic re-thinking of the entire process is the only fix–but achieving that is next to impossible with most “professionals” willing to bend over backwards to do exactly the wrong thing.