The communication with the recruiter was responsive. To my surprise, for the on-side the recruiter sends a pre-defined schedule with the interviewer’s names and what they will be evaluating (i.e.: past project in-depth review, system architecture, code question, and problem solving); you can bring your laptop to use your favorite IDE; and present an OSS project you contribute. That gave me the impression it wouldn’t be yet-another-dull-white-board-coding interview (i.e.: Google.)
Not sure if that set some unrealistic expectations but the interview experience was a total disaster.
The whole interview started late, so neither the interviewers nor I had a sense of time whatsoever. This initial delay was due a rearrangement of interviewers (one of the senior engs was busy apparently). To make things worse, they didn’t re-organized a new schedule to avoid overlapping topics: I was basically asked project review, code question, and design by every interviewer (good luck to you trying to fit all these topics in one interview slot under pressure and subjective evaluation.)
To make matters even worse (it is always possible...), the first interview started only with the shadow interviewer b/c the main interviewer was remote so someone had to find him, then get him in a conference room to call in, etc. After 10 minutes past the initial considerations, he arrived via Skype. I had to repeat all introductions again, then was asked to talk about a past project and go thru its design.
I usually draw architectural sketches on the white board then any in-depth discussion goes from there. In my case, it was just a waste of time because the main interviewer was remote, so there was no interaction whatsoever (good luck to you trying to make the whiteboard readable via any laptop camera.)
As a follow-up to the project review (per recruiter’s email), they were supposed to ask a coding question on top of that (e.g.: add a new feature). Perhaps, given the situation, I was asked a random coding question by the main interviewer. The question was very shortly defined with one single input / output sample. I.e.: the sample wasn't specific in terms of interface definition (e.g.: is the input sorted? is the output a string, a list of elements, or should I define my own.)
The question was vague either deliberately or he is a poor interviewer. Anyways, I had to ask questions to frame the problem properly. On top of that, he nodded affirmatively when I asked whether a modularized OOP design was a requirement, so I spent more time defining ADTs and methods to parse, process and output the solution. In a hindsight, it feels he confirmed whatever I asked just b/c he was just clueless and got a random interview question from the Internet few minutes before the interview (raise your hand if you had a coworker who didn't do that!?!)
Then it comes the coding time. After ~10 minutes writing the code, the shadower interrupted me to write unit tests b/c I was running out of time. It was an unfair because (1) the main interviewer should be tracking the time since arrived 10 minutes late and asked the damn question! (2) the main interviewer added several design requirements! At that point, I knew it was game over and wanted to push back for more time…
From that point onwards, I coded like a maniac with fear of running out of time.
What was the outcome? In the first interview session, the shadow says I over engineered; and second says I coded too fast.
Well, good luck to them hiring senior devs. Maybe a junior dev wouldn’t “over engineer” just because he can’t. Perhaps he wouldn't code too fast b/c he had nothing to say in in past project review, leaving plenty of time to code your palindrome question.
For prospective candidates, it doesn't really matter how much experience you had, how great referrals you have, just read one of these technical interview books and you should be ok. Don't over prepare, luck is a considerable factor in these interviews.