Interviews on Skype: Test candidates using a real-time code editor over Skype.
skype.com
skype.com
Especially for research-heavy positions, the amount of nonsense exercises really makes or breaks a company impression for me.
case 1) Have a serious technical conversations with questions testing my understanding, asking about my projects, ideas and interests.
case 2) 3 minutes of smalltalk while the interviewer reads out some points from my CV so I can repeat them back. Then 'alright, let's do a coding exercise'. Learn nothing about the team, their process, their vision in the phone rounds.
Today, I have technical conversations like you describe. I don't need you to remember that 415 is Unsupported Media Type. But I need you to be able to discuss how REST works, the difference between 400s and 500s error codes, and maybe even REST vs GraphQL advantages and tradeoffs, if you mention the latter on your resume.
Occasionally I get a surprised "This was so nice. I was expecting a coding interview". It was a coding interview, just not the kind the candidate is used to.
You can look up specific answers on Google, but you can't quickly google your way out of a conceptual discussion, your involvement with past projects, technologies that excite you, etc.
Generally speaking, I can tell within 5 minutes who is a great candidate.
Luck might have played a part, but I have not had a single bad hire with this method so far. In fairness, I'm selective with the candidates I decide to interview, from usually large pools. For these, I also tend to review code they've written in the past if they specify a GitHub account on their resume.
I agree with your thoughts on interviewing, but the "real-time coding" session in my mind isn't part of the interview, it's part of the pre-interview screening process that you gloss over here.
Asking programmers to code tough problems on the phone or whiteboard is a good test of certain personality traits, but not a good test of programming skills. On the other hand, there are problems so simple that a decent programmer should consider them to be typing rather than coding, and I think they make perfectly decent initial screening tasks. FizzBuzz is the obvious example here, but I think it's too popular to be useful. I periodically hear from devs who say they get so nervous in interview situations that they can't program at all, but no type of screening is going to be perfect.
And I much prefer this kind of objective screening process to more subjective ones, which tend tend to devolve into "let's choose people with backgrounds similar to mine".
How do you validate that this is true?
Real-time interviews are the worst of two worlds (emergency fast coding and live demonstration at the same time) and barely show anything about how one normally does things.
E.g. in emergency coding I automatically assume I'll inevitably make mistakes due to haste, so I run a lot of sanity "is 1+1 still 2, do I remember that right?" checks. It helped me a few times when the servers were on fire and I needed to fix stuff fast and think later. But that's incompatible with live demonstration, unless the purpose is to embarrass myself and make me look completely incompetent or diffident.
That's a great point. I've been in such emergency situations multiple times earlier in my career, when I was a system engineer (mainly Unix field support work) at a large hardware vendor. I used to do the same as what you say (double-check many things, sometimes even triple-check, particularly the more important changes I was making via some script or command), and I know it helped prevent me many times, from making mistakes that could have been serious, in a high-pressure and high-stakes situation (where said situation was often because of data loss with no backups or something equally bad). And in many cases, I was successful in solving the problem / restoring the data / etc. Also saw, and in some cases, prevented colleagues from making, such mistakes. Was too late to prevent them in other cases (sometimes by a few seconds, like once when I was a bit too late while trying to grab a colleague's wrist off the keyboard when they were typing a command (as root, natch) that could cause irrecoverable damage (and sometimes did). And this in live production environments on multi-user Unix systems, e.g. in a factory environment.
A real-life example of what I said in the last few lines above:
A colleague and me were in the computer room of an auto parts factory that had such a multi-user Unix system deployed in production. As part of some maintenance / problem-solving procedure, he types (as the Unix superuser):
# init 0
(which shuts down the Unix system automatically, with no delay or warning) on the main console, without thinking of informing all the live users in production to stop and save their work - on the shop floor, stores, accounts dept., etc. You can guess what happened next - dozens of calls on the intercom from highly irate workers from all those depts., in colorful language ...
The problem given in a coding interview should be a simple one and the candidate should be allowed to choose the solution language.
In an interview I'm much more interested in hearing how people would structure and architect applications, how they think about and would deal with tech debt, how they'd iterate and improve, how they think about reliability, instrumentation, testing and what not than having them solve a simple question in 30m. I'm not hiring people for a position that boils down to "solve a simple problem in 30m" either.
Who is paying for that time?
As someone who has interviewed a lot of people; if I am going to ask someone to perform some coding, I offer them the fact that my entire TEAM (5+ people) will be there for them to ask questions of.
That is us being serious about hiring. It isn't just a single person who is interviewing - but a large amount of the engineering team.
Sure.
But if you're hiring general purpose noon-senior software engineers, live coding exercises separate the wheat and the chafe very quickly.
Lots of people lie on resumes and are smooth talkers, but lack basic skills for their job. A coding exercise is a really fast way to find these. Then you can move on to more interesting things.
This won't likely be a popular answer, but more likely than what you described above is simply that you don't know how to weed out the bullshit a candidate might spew without shoving a code editor or dry erase marker in their hand.
It's perfectly understandable that many don't have this skill as it's rarely ever taught before you start doing interviews at an employer.
I'm sure we could figure out a non-code non-marker way. I'm also sure I could figure out a commute involving only right turns.
But why would I arbitraily constrain my solution like that?
The reason to "constrain your solution" is to not rule out very capable candidates who have "stage fright" and not offend other very capable candidates who take offense to your crappy brain teaser problems that don't actually reflect anything they'd do in their real job.
I should hope the coding exercise would reflect what they would be doing! Finding logic bugs, munging data, using appropriate data structures, recognizing recursion, etc.
If coding isn't a significant portion of the job (researcher, manager, etc.) then yeah, don't put it in the interview.
Sadly, I have not found this to be the case almost anywhere I have worked or interviewed (seems to be especially relevant the bigger the company is).
Feels like I'm back in time a decade. I don't understand why other browsers are not supported: are they using non-standard features? I can't imagine what those would be. WebRTC is supported by every browser nowadays.
Helps with remote interviews/candidates with slow connections.
When I've shown some code over Skype, I had to change fonts size to pretty large to make sure it was comfortable to read.
Also, bandwidth. Video streaming requires a lot.
Most developers (especially senior ones) have their preferred IDE/editors/tools/etc. Forcing them to use a custom one for an interview, where they have to constantly fight memory muscle and work with a new tool is likely to give unrealistic results.
Quick example (by no means the only one!): On vim insert mode, ctrl+w deletes a word. On a browser, it closes the tab. It's really hard for me avoid memory muscle jumping in and closing a tab. TBH, I simply cannot code python on a browser textfield, since I end up closing the tab sooner or later.
Screen sharing works great, and has really no drawbacks.
Deleted comment
[1]https://coderpad.io/ I liked the entreprenure who developed coderpad, he gave a talk on youtube as well.