I work for a B2B software consulting company, here's a tip: For one-off projects, you want an hourly rate with a not-to-exceed. Always.
Neither side gets a good deal with fixed-price contracts, no matter how nice they sound when you're thinking about throwing money at strangers. The contractor has to always throw in a significant amount of 'padding' on a fixed-price contract to account for the unknown problem that occur in every project.
The number one goal of a contractor: never, ever get stuck in a situation where you're working unbillable hours. So under-bidding a fixed-price is a big no. Which means over-bidding is required.
With fixed-price, we will also demand that the whole contract be renegotiated if anything changes. Anything. Oh, oops, you want one extra quick little feature that should only take a few hours? Fine, but the contract is being rewritten to include it and we're all going through the trouble of formalizing it.
Paying hourly is frightening when you don't know who you're hiring, but that's where a NTE comes in. We still do the schedule estimation that we would do with a fixed-price contract. We give you that as the estimate, and something like 1.5x that as the not-to-exceed price. We bill hourly, and you stop paying when the project is done. Often that is before the original estimate, and you save money. If we hit a snag, or if you decide to add a few small things, it can be handled smoothly without changing the contract. You can elect for a higher NTE, if you trust the contractor, and get more room for 'agile' development.
You define 'finished' extremely specifically, up-front, before letting them start. If you don't know what 'finished' is for your own project, there's something wrong, and you need to think about it harder. All software and documentation, delivery format, media, copyright assignment, etc should be specified.
Here's something that absolutely, absolutely critical: define at least a few milestones, at least one a week for the first month, and make sure you get them and verify they work. If their output looks good and they've been professional for the first month, you can let the frequency fall off if you wish. I have worked with tons of companies who were screwed over by contractors who took payment for 6+ months without producing anything.