There are ways to increase success.
Know what you want. Every little single detail.
That way the dev can build what you want. Not try to guess what you want.
Whatever you do, do not say things like "this will be easy to do" "This will only take 5 minutes" "I could do this myself in 5 minutes if I knew how". Trust me, you will be wrong, you will annoy the dev as you are basically telling them you think they are incompentent, they are slow, that a non-programmer could do what they do in 5 minutes. You cannot, you will not be able to.
When working out pricing, the dev will try to work out how long the project will take, then decide what kind of hourly rate they want, then give you a price on what you asked for. If half way through, you want to change everything, this adds time, so expect to pay more. The dev should not be expected to lose out because you changed your mind.
In the future, if you want changes / updates / new features, you have to pay. You do not own the dev, they are not your personal coder. You want them to work more, you pay them. Do you go to work for free? No. Neither should your dev.
If you want a support contract, be upfront in the beginning. This is a hard call. You want to pay less for more work, the dev wants to get paid more for less work. Lets be honest here. He doesn't care about your project, he wants to get paid. Now a support contract will mean, one of you wins, one of you loses. If the support contract means you paid an initial higher cost and do not need any changes, the dev gets more money less work. If you want and get lots and lots of changes / new features, then eventually the dev will be working for less than their desired hourly wage. They lose. When someone wins and someone loses, it create animosity and a great way for your dev to "disappear". Avoid all this. If you want changes / new features in the future. Pay for them.
Be aware of communicational and culture differences in doing business. Some cultures agree a price and come life or death will try to honour it, others have more of a haggling style. It is a different culture, no one is de-frauding/ scamming, it is misunderstandings.
Be aware, programmers ARE ABSOLUTELY TERRIBLE AT TIMINGS. Things go wrong, issues appear, bugs happen. Do not expect otherwise. Timings are hard. We have to put a bid on your project, not knowing all the small details, not aware of the issues that will occur and we have to put this bid together for free. If we win, then our time on it will be paid for. If we do not get the project, the time putting the bid together is a waste. Thus, we cannot go through every single tiny aspect.
Be prepared for over runs and be prepared that you may have to pay.
Be wary of those that promise the earth for half the cost. But then again, you do not need to pay $100 an hour for quality work. But not being a coder is hard to judge. It is a gamble. Good devs, tend not to have to look for work, it finds them. You are left with the rest
Good luck