I know what I'll get paid, and the client knows what they're going to end up paying for the work that's been scoped out. It's up to me to determine whether I'm managing my time/rate correctly to make it a value for the client and that I'm getting what I feel I'm worth.
To avoid major bugs, I make it clear up front that if they stick with the stack that I choose for them (which is a stack and development pattern I've been using for the past 4+ years), the product will be delivered quicker versus if they need to use a specific stack.
Typically the client doesn't care how the product is built and generally doesn't care how it looks as long as it's easy to use and does the job they need. Everything is outlined in the bid/contract so there are no hidden surprises about the work being done.