Regarding your last point: One thing I did in my B2C startup that helped tremendously with this is to have all customers pay monthly up-front, with no contracts and no free trials. I think most folks avoid this because it "leaves money on the table" but it does 2 important things:
- Brings clarity to your relationship: "If you aren't finding value in the product, or think you can find better value elsewhere, you can leave at any time."
- Keeps you honest. Because you can't hide your failure to deliver a valuable product behind contractually-obligated revenue.
I'm not against contracts at all, and the larger your customer or the more involved your customer relationship gets, the more necessary they become, but even in bigger engagements I shoot for the contract to be payment up-front or in regular installments with easy offramps should the customer stop seeing value in the engagement. The important bit is that if a customer wants out, you should let them out, and it should not cause _you to lose any money or any sleep_.
I don't know how widely applicable that is to other businesses, but for mine, it's a helpful way to structure the relationship.