Set deadline + complete spec will do. Everything, even common sense features like "forgot password" should be in the spec detailed as much as possible. If it is not in the spec, he doesn't have to do it.
Every little feature is time. Time = money. Most of the time its not dev laziness, its depression. Depression to work for people who milk one little feature after another from you when it is common sense for them but was not in a spec, making a project infinite.
Nobody is going to build you a facebook for the price of dolphin customization. Good project requires planning on your behalf, good documentation and exact expectations.
Alpha - these and these features by this date, beta - these features working completely by this date, etc, final - by this date, everything finished as spec said to finish, everything exactly how described. Pay enough for them to be motivated to do the job, pay in 3 steps - 25% alpha, 25% beta, 50% final after complete testing.
Nothing is more frustrating than to do a job without knowing exactly what you are being asked for. If you don't have exact plan in the head, developer will build something... A mistery box perhaps if you like those... You ask for a boat, you get a boat. Ask for a mistery box, you may get lucky and get a boat.
If you want crappy code, don't write about the details of how things need to be implemented, most likely you will get one. If you plan and write down that you want thought out classes, functions, you will get those if developer wants to get paid. Need a UI separate, write down that you need either smarty or whatever template system you need, better description - better the code. Developer doesn't write you project, he follows your instructions to implement what you have in mind. If you don't have a good plan in mind, how would he?
[/midnight nonsense]