@maruru This whole thing kind of boils down to the age long fight between quality, cost and time. 99% of the time you can only pick two - one has to be sacrificed. And is similar to the 80/20 rules as well.
I would suggest what makes me embarrassed is the unknown of the user feedback. Knowing the code has many bugs in and potentially things could go wrong. But you know as a whole that the product, functionally, works. It meets the minimum requirements or MVP. If I hadn't have shipped then clients would be upset with timeframes and, more worryingly/importantly, a competitor could get there before me.
As companies and developers - we're trying to keep up with a demand that is ever increasing. The more we create and give, the more the consumer markets want better, faster, products that do more. Where as developers want to stop and start things properly (personally I'd LOVE to see javascript replaced) in order to create elegant products. Many developers just don't have time to develop a product that's based on TDD, though we all know the benefits.
It's also difficult to not be embarrassed because even if you slaved over a large piece of code and you think it's perfect - you'll have missed something. We always do. But that doesn't matter until after you've shipped.
If it works - ship it.