Hello! I just finished interviewing with Google and wanted to quickly catch you up on some interesting and frustrating steps of the process so that you can understand what to expect from Google interviews and the steps involved. I will also share some tips on how to prepare for the interview and mistakes to avoid.
If you’re looking for a success story, this is the wrong post for you. I actually failed the interviewing process, but the whole experience was pretty interesting for me and leads me on to another stage of my career. I will share more details on this at the end of the post. All names and identifying details have been changed to protect the privacy of Google employees.
Initial screening interview
My story starts on a rainy October morning. I received a message from Olivia, a Google recruiter, with the subject «Interested in solving high-impact engineering problems at Google?». At that moment in time I had recently finished several projects and was looking for new challenges. Working at Google seemed like a good opportunity that I didn’t want to miss, so I quickly responded, «Yes, definitely» and booked an appointment via Google Hangouts.
Our chat took place two days later via Hangouts. Olivia told me how exciting it is to work at Google, and what the hiring process looks like. When I asked about the details of the position, she told me that they were looking for someone for their new office in Warsaw, Poland, to support and develop Google Cloud functions for enterprise customers. I asked about the exact responsibilities that would come under my remit, and the team I would be part of, but she said it didn’t matter at that stage – I could select the desired team and position later on when all steps of the interview process were completed. That was frustrating moment #1 for me, but I decided that it was worth persevering.
Frustrating moment #1. What if there was no team at Google that I would like to join?
From what Olivia told me, the interviewing process at Google comprises three stages: first of all, there are two remote coding interviews on algo and data structures. If you’re extraordinary, you might just have one interview, but for an average software engineer it will be two. The next stage is an on-site interview in one of the Google offices, which includes several coding interviews (again!), a system design interview, and last but not least, ‘Googleyness and Leadership’. The last one detects how well you’ll fit into the company.
Tip #1. The Google interviewing process is difficult and will take up several weeks of your life. You need to go all-in to prepare for it.
In Olivia’s words, «Even if you pass all the interviews and reach the final stage, it doesn’t guarantee that you will get the job. Because Google’s hiring process has one more step, which will take place without you. In this last stage, several senior Googlers (who don't know you and have never spoken to you) will review your CV and feedback from the interviewers and decide whether you will fit into Google or not. Only with their endorsement can you land the job.» OK, it’s time for frustrating moment #2.
Frustrating moment #2. You can pass every interview with A grades and still not get a job, because a senior Googler decides that you're the wrong person to be hired.
After the screening interview I realised how low my chances were and decided that I would go as far as I could only for the sake of experience.
Stage 1. Remote coding interviews
Later on, Olivia booked me a first remote coding interview. In the meantime I went through several algo problems on the geeksforgeeks website and completed its «Must Do Interview Preparation Course». I can’t recommend it, because problems on this course are very abstract and the platform is buggy, but for the first coding challenge it was enough.
The call was via Google Hangouts. The interviewer briefly told me a bit about himself and asked me to solve a coding challenge. I can’t tell you the details of the coding challenge (it would be unfair and wouldn’t help you much anyway). The only thing I can share is that it was some sort of greedy algorithm in a chess game environment. I solved the whole problem in 50+ minutes, almost without any hints from the interviewer. The solution includes tests and code on Python. All coding for these types of interviews is usually done in some kind of shared notepad, and in this case it was Google Docs. Frankly, the interviewer himself and the challenge were interesting.
I was waiting for the results: had I performed well or not? The results were ready only after a week, and only when I asked the recruiter for an update. This would become a common theme for all the following interviews: the results would be ready only after a week and a message to the recruiter.
Tip #2. Don’t be shy about asking your recruiter for the results of your last interview.
Olivia said that the result of my interview was «in the majority positive». The only negative thing was the time that elapsed in solving the problem: it should have been no more than 45 minutes. Olivia therefore asked me to undergo another remote coding interview. At this point I understood that in the eyes of Google I was an average software developer, not an extraordinary one. But that’s OK – I decided to move forward.
The second remote interview was a week later, and it was pretty much the same as the first one. The coding problem was simple enough. It was a combinatorial problem and to solve it you had to come up with the math formula and think carefully about all edge cases. The solution took me only 40 minutes and I was super excited to have solved this problem in such a quick and elegant manner. I waited for the final feedback from the recruiter. The next step would be a trip to Poland for an on-site interview.
There was a week of waiting, during which time the recruiter didn’t answer my messages. Then Olivia replied that she was on a business trip and would respond to me when she was back in the office. Two weeks after my last interview, I got a voice call from Olivia. She said that my last interview had been «in the majority positive». The only negative thing was that I used a lot of pseudo-code. She also mentioned that I was good at testing (maybe it’s because four years ago I read a «How Google Tests Software» book, who knows?)
Tip #3. You should cover each and every line of code with tests in the coding interview. Just say it out loud when the interviewer asks you to test your function, and only after that, start writing your tests.
After such a promising beginning to our talk, she said that they didn’t know what the next steps should be so I should wait for a while. A week later I got a message from Olivia who said that from now my recruiter would be a George, another guy from the London office, and that I needed to pass another two remote coding interviews. I would get all the details from George in due course.
I had a call with George later the same day. He said that my coding interviews would be done remotely in a month's time and that I should select a date. He refused to say why these interviews would be remote, but mentioned that these coding challenges would be much harder than previous ones and if I passed them I would be invited for the remaining interviews at their office. I decided that I had already started this process and should see it through to the end.
Stage 2. More remote coding interviews
I started preparing for another two interviews. This time I was using HackerRank and its «Interview Preparation Kit». I highly recommend it – it’s really close to what happened at the interview.
Tip #4. HackerRank and its «Interview Preparation Kit» are the best resources to prepare for Google coding challenges.
Just after the new year holiday I received timeslots for my interviews – the first one on 20th January at 11a.m. (duration 45 minutes), and the next one 15 minutes later. Wow, that was unexpected. I asked George if we could separate the interviews by a day, and received an unexpected answer: «We will need to conduct these on the same day unfortunately Ilya, to minimise the number of steps in the process that you are going through, and to keep as time efficient as possible.» It was another frustrating moment. I had been waiting for them for several weeks, and now they wanted to be «time efficient».
Frustrating moment #3. Google doesn't respect your time.
This time the challenges were difficult for me. The first interview was about tricky searches on a graph. I only came up with a brute-force solution at first, and realized that it could be done with a graph later on – but it was too late.
The second interview was about the «2048 game». It was the first time I couldn't understand the task clearly, maybe because I hadn’t played the 2048 game at all. The questions were about a strategy to win in the 2048 game and an elegant solution to generate the next board state. Only two days later I realized that the 2048 game is some kind of «Game of Fifteen» and the solution could be found with the help of A* search algorithm.
It was clearly my fault – I didn’t pay a lot of attention to graph algos during preparation. So don't repeat my mistakes – as I said earlier, put all of your efforts into interview preparation.
After a week of waiting, George gave me a voice call and said that I didn’t pass the interview and I should improve my skills in big O notation and graph theory. He mentioned that I could reapply to Google next year.
What did I take away from the Google interviewing process?
When I started interviewing with Google I clearly understood that my chance of getting the job was not that high. What have I gained after all these interviews? Experience – a lot of experience – and a bit of an understanding about how Google works internally. Google has a myth that it’s a dream workplace. Maybe, but not for me. After several months of interviewing, I understood that Google is just another big enterprise company that has all these bureaucracy problems, opaque processes and weird rules. Further reading about Google’s other side can be found at the Michael Lynch post “Why I Quit Google to Work for Myself”.
What’s next?
After a tough interview with Google and several interviews with small start-ups and companies, I have concluded that employment is not for me. I want to be an entrepreneur and create my own company. The first obvious step for me is freelancing. I think I'm good at full stack web development (my preferred stack is Node.js/Javascript/React/Docker and you can check out what I've already done on the «My Projects» page).
Now I’m eagerly looking for clients and contracts. If you think you have something for me or you know someone who needs a remote full stack developer, let’s have a chat. I'm happy to talk business or simply give you some free advice.
Originally posted at ipirozhenko.com/blog/google-interview-2020