More specifically, don't do fixed cost contracts. They misalign all the incentives, and encourages you to do a worse quality job. And it encourages them to take up your time with meetings and support and new "quick" features to add.
Best is a fixed hourly rate, providing them an estimate, and setting it up so that you won't exceed a maximum (after which you can reevaluate with them whether to continue).
This lets you be flexible on the spec and respond quickly to changes they may want, it lets you get compensated for all those little things that you don't plan for like meetings, and you no longer have to give your time estimate a padding to ensure you meet the deadline.
Although they pay less on average, I think you also make more on average. Consider, for a fixed cost project you need to create rigorous specs that take weeks to develop and then negotiate over how hard different things are. Which of course itself takes lots of time. And god forbid they want to add a new feature or change a spec, necessitating either you just doing it for free or negotiating a whole new add-on project.
Ratios of overhead to actual work? Honestly, probably like 50-50... so by cutting out a good chunk of that first 50% from the process, both sides save time and can do other more useful work. I'd way rather take on two clients and not spend my time negotiating and doing paperwork.