If it is a client I have done work for before and have never had an issue with I will do after I have completed it but before they get it. If it is a new client it will be half up front and the other half before they get it.
For our hosting/design company, we will outsource some design projects if we're backlogged. We will show the project to one of the devs we have used in the past, they'll let us know how many hrs they would charge to complete it, they'll do the work and send us an invoice.
(so my vote is for after work is completed)
I've been ripped off by freelance developers, designers, etc, enough times that I'd need to have a decent level of trust in the individual before shelling out money up front. Either that, or it's such a small amount it doesn't matter.