What I do when interviewing candidates is do a standard face-to-face 'chat' to get their background and a sense of the person, and then give them a half-finished program (with some bugs). I say: "Go home, download the code, and finish it in your own time". They have all of the tools that they're comfortable with, internet access, etc. I also say, if you're not sure on anything to drop me an email and ask. Because in real life if I'm going to be their boss they'll have that opportunity too. I see that as a positive, not a negative.
It shouldn't take more than 30-45 mins for a competent programmer. There's also some instructions in the mini-design which are intentionally 'the wrong way' to do the task. This is to encourage the candidate to get in touch.
I think this shows their coding style, problem solving, but also how they can work with others. Junior devs tend to get in touch about the complexity of the problem, senior devs get in touch about the methods in the design.
It shouldn't take more than 30-45 mins for a competent programmer. There's also some instructions in the mini-design which are intentionally 'the wrong way' to do the task. This is to encourage the candidate to get in touch.
I think this shows their coding style, problem solving, but also how they can work with others. Junior devs tend to get in touch about the complexity of the problem, senior devs get in touch about the methods in the design.
This process hasn't yet let me down.