I have to overcome this issue with my team often. Most of the time I need terrible code on the market because people are paid so much money that I can’t waste time on the good stuff, only for it to be rejected.
I don’t only design a product “with the end in mind”, I have to design each stage of the software as junk. I design junk - on purpose.
In order to avoid the customer mis-communicating what they want, I spoonfeed them code. For the whole year my team is outputting utter garbage.. and when the garbage works, we re-write to make it look good / better.
That’s why I calculate hours of labor, and then double it. Because when the product is done, it’s not really done. We’re only done complying with the client’s insatiable demands.
Sounds like Agile. ;-)