Sunday, June 22, 2008

Y.A.G.I.S! Yet another Google Interview story! (With a different twist)

Yes, I know the internet is littered with Google/Microsoft interview stories but I just thought I'd add mine. A couple of months ago I was contacted by a Google recruiter through LinkedIn asking me to answer a few questions if I am interested in position at Google. I replied telling him that I was glad to try and attached my resume. Later on, I was contacted by another recruiter that told me that my resume has passed the screening process and that she would like to schedule a phone interview. I got my first phone interview which was basically some sort of HR screening. She asked about my previous work at IBM and why I co-founded Khayal IE. I talked a lot about the physics engine we developed at Khayal. I also talked a lot about the game we produced and how we got it sponsored by Intel and TE Data (Egypt's largest ISP) by exploiting a market niche that nobody has approached before. She also asked me why I chose Google and about any ideas that I would have that might improve their products. She also asked what I would do in my 20-percent time at Google. Google has a concept called the "20-percent time" where you are free to work on something that you really passionate about in 20% of your work time. Some of Google's most successful products were a spin-off of this concept including Google Suggest, AdSense for Content and Orkut.

Days after, I received an email from the recruiter asking to schedule another phone interview. She told that the interview will be very technical in nature. I started brushing up my knowledge on Data Structures, and revised different algorithms. I have also read about some of the more advanced features of C++ like traits and functors. I sat down at the time scheduled for the interview nervously waiting for the phone to ring. And it did! The Google engineer asked me about my previous experiences and then asked me a couple of technical question which were:

  1. Given a large body of text, design and implement an anagram search engine.
  2. How would you find the integer square root of a number? (Typical answer goes here) Now how would you do it faster?

He asked me to implement the function over the phone. He had a shared Google Doc ready. I answered both questions correctly (I will write how I answered in a later post). He thanked me and said that the recruiter will contact me. Google usually has two technical phone interviews unless you did very well on your first attempt, I had one phone interview and then the recruiter called and told me that I have made it to the on-site interviews. I learnt that they were looking for candidates with fluent Arabic.

She also asked me to sign a NDA for the rest of the interview process. I went to the site on the interview day (the interviews were held in Egypt at Nile Hilton hotel). I had four interviews with four different Google Engineers each lasting around 1 hour. I will not be able to disclose the questions of course. But I think answered most of them pretty well.

Two weeks later, the recruiter contacted me. She told me that the interview team thinks I have amazing design skills. She told me that they are still looking for senior developers with 8+ years of experience fluent in Arabic to assemble the team. And that she will get back to me in 6-12 months!

I actually found her response quite confusing as I really didn't get if I was in after 6 months or not. If I am not, then why did they interview me in the first place if they were looking for 8+ years of experience (I have four under my belt). But maybe they are looking to hire the senior team members first. I don't know. But I think I will be waiting for their next call.

Hiring without a test!

That's one of the earliest mistakes we have done at Khayal (my company). We were looking for 3D artists, while having near-zero experience of how 3D art is done. We discovered that top-notch 3D artists are a rare find in our country (Egypt), especially those with game art experience. We interviewed a couple of people, and were turned off by the quality of their work. Then suddenly someone appears with a very good resume, excellent samples and a very energetic character. The guy impressed us and we favored him over two other candidates for the job. The guy told us that he always participated in online 3D art competitions and that is the main reason his skills are so toned

He started working at Khayal. Always arriving late, we were still designing our game 'Abo Hadeed' (www.abohadeed.com or for Arabic speaking fellows www.abo7adeed.com). We required some low poly-characters to prototype our design. The guy took forever to produce the characters; he seemed to evade the delivery of any of his required tasks. This went on for a few months before we began to think of something. May be this guy didn't produce any of the samples he showed us during the interview, cause logically speaking the output we were receiving from this guy has nothing to do with magnificent 3D art he showed us at the beginning. Growing more suspicious, I googled the filenames of his samples!

And guess what, a 3D sample from every part of the world! A piece from Spanish artist, a piece from a Russian one and some from popular 3d art sites! When confronted the guy said that he rendered those files and adjusted the lighting and played a bit in with the objects inside! He even told us he never said he made them!

We immediately fired the guy, and got one of our earliest lessons. If you are hiring, always give the applicant some sort of test. If you are hiring a 3D artist ask him to produce something unique that he probably will not find elsewhere (in our case it's an Egyptian guy wearing some sort of Egyptian folkloric dress 'a galabya').

For a developer, it can be a take-home test, a coding question or even a coding exam. It even gets more interesting than that. Some voices claim that developers that struggle with coding large problems usually can't even develop trivial ones. One blog (Imran on tech) came up with a very interesting coding test:

"Write a program that prints the numbers from 1 to 100. But for multiples of three print "Fizz" instead of the number and for the multiples of five print "Buzz". For numbers which are multiples of both three and five print "FizzBuzz".

Most good programmers would be able to write that in a few minutes. To his dismay, he found that lots of his applicants can't code the answer. And some self-proclaimed senior developers 10-15 minutes to come up with a solution!

Alas, lesson learned, NEVER depend on the resume/regular interview alone!