Google: My interview experience
This post is the second in my mini-series about software engineering interviews. The first post was about my experience at Booking.com. This post will be about my experience with Google. A third post will follow about my experience with Amazon UK, the place that I'm going to join soon.
In this post, I'm going to describe my experience and give some insight into the internal processes. I'm going to leave technical preparation for another post but, for the moment, you can refer to my favorite resources: Cracking the Code Interview and InterviewBit.
Finally, to be totally upfront, I didn't receive an offer, but I'm a firm believer that sharing information can be beneficial to other applicants.
Google, like many other companies, uses the sourcer/recruiter model. In this model, the sourcer discovers a talent, touches base with him, and guides him through the phone screens. The talent is then picked up by a recruiter, who is in charge of explaining the onsite process, escorting the candidate around onsite, and communicating the final feedback.
At the end of August 2016, a US sourcer contacted me about Android roles in the US. I was thrilled about the company but I wanted to work in backend and in Europe, close to my family. During the call, it turned out the sourcer didn't deal with such openings but he was going to ping a colleague in London. After some more exchanges, that took more than a month and countless ping emails, London said there were no such open roles at the moment. Game over.
Or at least this is what I thought when I politely thanked the sourcer for his time. After about a month though, I realized that I had nothing to lose, so I attempted to loop in the sourcer, saying I was available for interviewing for Android US roles, barring I can relocate in 1-2 years. No answer. It took me another ping email to finally get the pipeline going. My first phone screen was scheduled for around mid-December.
The phone screen process is quite standard. A recruiting coordinator sends you an email with a link to a Google Doc. During the actual interview, you type code in the shared document. Some days later, in my case two, you get an email with a green light or a rejection message (or, sometimes, a phone call).
The actual interview was fairly easy, some basic Android questions and one coding problem involving recursion. I finished the exercise with about 10-15 minutes margin, at which point the interviewer starts chatting about random topics. Bad sign, I thought, there should be a second algorithmic question, this smells like I just bombed it. The bad though got worse after the interview when, after endlessly ruminating on my solution, I found some minor unaddressed edge cases.
After two days I received the feedback that the phone screen went great and I was moving to the onsite stage. Some practical tips for the applicant: in the Google doc, switch the font to Courier new, and practice indenting code. You are going to press tab a lot.
Things turned interesting here. The first recruiter call was very brief: I was being reassigned to Europe because of a shortage of US H1B visas. The second call was with a different recruiter and she let me choose between two different on-site processes. One process is for Android developers and consists of two algorithmic interviews, two Android interviews, and one big-app-architecture interview. The other process is for general software engineers and consists of four algorithmic interviews and one system design interview. I went for the second process, turning an application for a US Android position into an application my dreamed-after EU general software engineer role. Not too bad!
The recruiter also explained about an interview coaching opportunity. Basically, you can have a video call with an engineer that will help you with the preparation and answer any question you might have. Unfortunately, I was so caught up in my preparation and shuffling of deadlines that I completely forgot about this.
Travel and accommodation are also nicely covered. The flight is in economy class but not extra cheap. My 4-star hotel was located just behind the office and offered a welcome drink, free minibar, and complimentary coffee machine in the room. I also had a cappuccino with my name for breakfast. :) The hotel is booked for only one night, but Google offers the possibility to move your flights if you arrange your accommodation at your expenses. It also reimburses travel costs, and food costs up to 50$/day, which in Zurich is a bit tight for two meals.
The interviews day I was really nervous. I had prepared for about six months and was close to making it. I measured my heartbeat and it was over 120 (perhaps it was the cappuccino?). The recruiter welcomed me, gave me a bag of giveaways and some water. Then she went through the interviews order and asked me to point out questions that I heard of already. This is the same advice from Cracking the Code Interview: Google questions are always novel in some way, so if you saw it before and solve it too fast, it is likely that the interviewer picks on it and penalizes you in the feedback.
The interviews themselves were challenging but not impossible. Differently, from other interviews, I could never see the solutions right away. I spent about 10 minutes per interview just playing around with the problem and going through different solutions, first the brute force, then various optimizations. Then was coding time. I solved three out of four problems well, but not flawlessly. In the one that probably sank me, I saw that the solution was not optimal enough, but I couldn't optimize further. I didn't settle for brute force though. I had mixed feeling about my system design interview: I answered the questions but communication didn't flow as I expected.
After the interviews, I was walked out by the last engineer and enjoyed some more days in Zurich at my own expenses.
A week after the interviews, the recruiter informed me the feedback was collected and was being sent to the hiring committee. This is a good sign, it means that your score is high enough for the hiring committee's attention. In fact, in many, but not all, locations, the feedback won't even reach this stage if the average is too low (afaik 2.7 in MTV, with a scale from 1 to 4; not sure in Zurich).
After another four days, I received an email about another update and I get the dreaded rejection. I was being told that my system design interview went well but I need to improve my algorithmic skills. The recruiter also said I was borderline, which might be just a nice empty word from her, but made me feel better.