Therefore, if they say “ship it!”, they are either wrong or missing information.
If they are missing information, the developer is at fault for misinforming them of the tradeoffs necessary for decision making.
If they are wrong, then either the developer has cited irrelevant or incorrect tradeoffs, or the developer made valid points but the stakeholders understand the tradeoffs and are willing to accept them.
You're trying really hard to bring this back to always being the developer's fault, and you're ignoring that, many times, management just doesn't listen. You can explain until you're blue in the face, but if they don't want to listen, nothing will make them do so.
And ignoring that, almost all of the time, the programmer has very little power in these sorts of transactions.