Thursday, April 23, 2009

The Google interns recruitment process

This is something I've been meaning to talk about for some time now. As I mentioned in a previous post, I'll be interning at Google this summer. I have been recruited by the JavaScript minimizer team for a 3 months internship in Mountain View.

Google is well known for their overly complex recruitment process. I think full times employees have to go through 6-8 interviews before being hire. I've seen detailed description on the web of the process for full timers, but never for interns. The most annoying thing about it was not knowing what is coming next. The recruiters seem to keep you in the dark and the engineers you talk to aren't really aware of the process for interns. So this is the story of how it happened for me.

Before I start, I need to mentioned that I applied twice before being selected. The first time, I got selected for the technicals interview but did not make the cut.



Applying

The first step is obviously applying. You need to do that online here. You are asked for a resume, a motivation letter and a transcript of you grades. This part is pretty standard, but keep in mind that Google receive tons and tons of resume. Yours needs to stand out. One of Google recruiter I talked to told me that he spends around 15 seconds on each resume on the first cut.

One thing they seem to insist on is Linux experience. Most of their developments are on Linux, so you should probably try to put emphasis on your Linux experiences.

Also, the "officials" Google programming languages are C/C++, Java and Python. If you have experience with any of those, make sure they are easy to spot on your resume.

The other thing you need to consider is when to apply. Google's recruitment is painfully slow. If, like me, you have fixed internship period set but your university, you need to apply at least 4-6 months before that period.

First Contact

Now, if you've done things right and, lets admit it, if you're lucky, you'll be contacted by a recruiter. The first time I applied, I had a screening interview where the recruiter asked me a few technical questions and asked me to grade my knowledge of Java, C++, Python, Algorithms and few other things from 1 to 10. The second time around the interviewer just scheduled me two interviews with engineers.

The technicals interviews

You'll have at least two technical interviews over the phone. The content of the interviews varies from interviewer to another, but here's a few tip. Google engineers love algorithms and data structures. Be ready for in depth questions about queues, binary trees, heaps, stacks and every other possible data structure.

You will also get at least one question where you will be require to code. Yes, over the phone. There first time I did it, I had to actually read my code out loud and the interviewer would type it on his end to test it. That's the interview that killed me. I wasn't ready for it and took a lot of time writing everything down before verbalizing the code. I wanted to be sure of giving a correct answer the first time around. That was a mistake. You only get 45 minutes per interviews, so if you spend 30 minutes on a single question, you won't have enough time to finish the interview.

Don't be afraid to discuss your solutions with the interviewer, they are interested to see how you think and how well you can communicate. They'll ofter lead you toward the solution. Also, don't over-think the problem. If there's a simple solution to the problem, give this one first. Sometime it will be enough, sometime the recruiter will ask "How would you optimize that?".

The second time I had to produce code was much better. The engineer shared a Google Doc with me so I could write the code in it. I don't know if it's standard practice now, but it's much easier this way.

I can't really go into details about the interviews because they asked me to keep the content confidential. Anyhow, I don't think knowing the exact questions I was asked would help you, just be ready for anything.

More interviews

After the first two interviews, I did not get any feedback for a couple of weeks. After this period, my recruiter contacted me via emails and scheduled me a third interview. Her email basically said to be ready to answer technical questions and questions regarding my past experience.

Now, you need to understand that interviewing at Google is a very stressful thing. I spent a lot of time reviewing algorithms and data structure for this third interview thinking that if I had made it that far, I really did not want to blow it. It turns out that wasn't really needed.

The interviewer was my future boss. He basically started the interview saying "Somebody probably told you already, but you have pretty much a guaranteed job at Google". Nobody had. I wish they had, it would have save me from a lot of unnecessary stress.

The third and subsequent interviews are, from what I understand, basically just a way of finding a team you'll fit in. You'll be asked questions about you interests and evaluated on things more specific to the team. My interview was mostly Java, JavaScript and compiler questions. The interviewer described the team and left me plenty of time for questions.

I said I was interested by the team and got a job offer within a week.

Getting ready

This is the boring and tedious part of the process. I needed a J-1 visa to work in the United State. This mean plenty of unclear government form to fill in, a background check and various fees to pay to different authorities (Google will reimburse me for those).

Google don't pay for a plane ticket or moving expenses directly, but they give you a very generous relocation package (I mean REALLY generous). The most difficult thing was finding a place to live, but I managed to find something that seems really good on Craigslist.


Last words

This is how it happened for me. I hope this prove useful for future interns and interesting for the rest of you. I'll be starting my internship on May 4 and will keep you posted on what it's like working for the big G.