Oh yeah, oDesk and Freelancer are good places. Prepare to go through several coders first though.
Here's a quick way picking someone.
a. Have a Brown M&Ms clause in your advert.
http://en.wikipedia.org/wiki/Van_Halen#Contract_riders
- Specify something like "if you have understood this response, have 'I understand' in the subject line" or something. Be ruthless about ignoring anyone that does not adhere to this.
b. Ask for a relevant sample.
Ask everyone to bid with a relevant sample. Just one. Again ignore anyone that sends you a list of irrelevant projects
c. Ask for their opinion
Ask the bidder to cite an example of a related project/website/application they like. This will give you an indication of whether you are on the same page when it comes to the look/UI for you app
d. Give them free reign
Unless you have a very specific reason, allow the contractor to make as many of the tech decisions as possible. I have seen people with no tech clues specifying things like database and OS versions as part of the requirements. This is useless
e. Trial several contractors
If you can, break up the app, or specify a minimum subset, and then get 3 or 4 different contractors to work on this same job. It will give you an indication of how they work or don't work in a real setting. You can compare like for like output between different contractors.
f. Pre payments no. Milestones yes
Never ever prepay. Agree payment milestones *before* you start the project. Don't make payments outside these agreed milestones. Have agreement on arbitration when the question of whether a milestone has been reached or not is being disputed.
g. Terminate contract at first sign of non communication
- A contractor that disappears for days with no update will be a problem. Fire them. Fire them quickly. No excuses, no buts, no exceptions. Yes, there will be delays, but there is no excuse for non communication. None. This should really be rule #1.