I often try to keep a little retainer left over at the end. Some say I should keep this for "change" orders. However, I will give it back to the client! Why? 9 out of 10 times when I offer to return the leftover they are ready to add it to a new retainer for another project. You can't make a client happier than saying "here's the final demo of your project! It was great right? Oh by the way we came in under budget." Just make sure you are in constant communication with the client, have regular demos, and deliver something amazing.
People talk about people; within your network you quickly learn who is reliable, who is honest, who isn't, etc...
Also when I bid work for a client; while I bid hourly I am open about the reasons. I tell them point blank how many hours I believe their requirements will take to implement in a worst case scenario given they do not change the requirements. I then tell them that likely it will take less hours than that, but they need to know how much the total cost could potentially be. If the customer is still insistent on a fixed rate contract I explain that it can be difficult to prevent scope creep for customers when there is no dollar amount tied to it; and that I want everyone to be happy. I explain that if they really want a fixed bid I can make an exception, but that the fixed rate pricing will be double to triple what we have agreed upon as the max cost associated with the project. I explain this is to cover the scope creep that will inevitably be introduced and to protect myself from the loss risks associated with such a decision. Most clients then agree to the hourly rate; the rest keep looking for someone else.