This means you picked the wrong engineers. An engineer's job and skill is to be able to make this sort of call.
The same goes with managers or any other role.
So the way out is always to carefully select experienced, competent, no nonsense people.
I've worked with developers with 5+ years of experience that haven't went trough that (either corporate culture allowed them to deliver minimum value in 5 days or jumping projects before it gets to the WTF stage of complexity). It's hard to learn if you never get burned.
The whole idea is to bring them together "in the same room" and allow common understanding of the domain so they stay on the same page throughout the project. Then they'll do each what they are best at (managers whip up glossy slides, and devs crank out reams of code ;)
When you put engineers in charge you get overengineering and when you put managers you get underengineering.
Is there a way out?