I don't ask small customers to sign a contract or agreement and I've never had a customer complain about the final bill being higher than expected. The reason is simple, I quote a fair price up front and charge that amount or less.
For small projects you need to be a good enough estimator to come up with a fixed price rather than an hourly rate.
Nobody complains if you tell them upfront that it will cost $200, even if you finish in an hour. But if you tell them it will probaby be $200 and then give them a final bill of $350, everybody will complain, even if it takes you all day. Yes, there are exceptions to these examples, but they hold as a rule. I have a basic price list for most basic items and can quote most small jobs over the phone. Most of the time I come out ahead, but occassionally we work all day on a project that I quoted for a half days price, but I don't change the price. Sure I could explain the difference to the customer and they might pay, but they wouldn't call us back or refer us to friends and family. It all averages out.

Also, don't work for customers you don't trust. You have to learn to turn down jobs if the customer doesn't give you a good "feel".