You just set milestones every couple weeks of effort and invoice at the end of each one, and withhold delivery of the finished product until full payment is received… if a client doesn’t want to pay or is too difficult, fire the client and move on. And don’t give clients net30 terms or something ridiculous if you’re a solo contractor. Invoice due on receipt.
If you have the full scope / visibility and large enough margins but if you don"t.
The milestones become another form of hourly/daily/weekly plus you have the added responsibility of meeting goals or you do not get paid. Hourly provides pay for time spent.
This is basically my feeling as well. It also establishes way up front, “This is how much my time will cost you.” That ultimately pressures clients to be prepared for meetings and not ask for frivolous crap. They can judge the output based on the cost for themselves, and honestly for some clients it’s well worth it. For others (especially software shops) they’ll tend to try and replace me with a FTE, but my perspective on it is that I’m happy to help them fill in the gaps while they needed me.