Mistakes, rewrites, late nights, firefights, and deadlines. Core dumps, memory leaks, hardware faults, and plain bad luck. Big O, data flow, always learning -- or out you go. Manager metrics, schedules hectic, methodology hegelian dialectic. Taking the heat, feature creep, open office, uncomfortable seat. Holy wars, revolving doors, carpal tunnel, all you can take? There's always more. Fucking suits, random reboots, and the ever present "thousand language stare". Oh yeah, pressure -- lots of pressure. And time, time, time. Metric shitloads of time. Time, man. You gotta do your fucking time.
In regards to what works the best, I found that these 2 ideas work the best when combined.
PAID Sample project assignment (err on the side of paying fairly — say $100+/hour for estimated completion time — if the problem should require 2 hours to complete, offer $200)
Bring the candidate in and discuss the solution. Let the candidate talk about their design decisions, challenge them as you would any team member and let them provide their reasoning.