I wake up an hour earlier than the scheduled alarm. Despite being a late-riser, adrenaline started kicking in as soon as I opened my eyes. Today was the day. Dun dun dunnnn.
Hello, this is the fifth and last part of my Google Interview series. Please note that I cannot disclose any of the interview questions, as I have signed an NDA.
I chose to have the interview in Google’s Montreal office. I think this turned out to be quite good for Google - they didn’t have to reimburse any flights, hotels, or food!
It can be important to choose the right location for the interview. For example, the office in Mountain View will provide a laptop for the coding interviews, which means you don’t need to struggle writing code on a whiteboard. A few other major offices offer the choice of using a laptop or a whiteboard as well.
For me, the whiteboard wasn’t a big problem. I prepared enough and am comfortable with it.
I leave my place at 9:45 and walk down the busiest street in downtown Montreal towards the Google office. It was located a few blocks from where I lived, so it didn’t take me too long. The building is located in downtown-downtown, the center of it all. Google takes up a couple of floors in a commercial building located right across the metro.
I walk in and check in with the receptionist, who notifies my first interviewer. I wait only a minute before the interviewer arrives. He offers me coffee, which I gladly take. We walk through the kitchen to the meeting room located right besides it. It’s a fairly-sized meeting room, enough seats for a dozen people, tables laid out in a U-shape towards a large screen in the front of the room that was showing the Google Calendar info for the interview.
My first interviewer asks me general questions, to sort of get me relaxed and ready. He expressed that he wanted to help me I start off in a good mental state. So, we chat about general things for around 15 minutes before we get to the interview question.
The first interview goes quite rough.
I understand the question. I made sure by re-iterating it back to the interviewer. But oh boy, this is somewhat challenging. Not insanely hard, but hard enough to make me panic while talking out loud to my interviewer and keeping in mind that this is the FIRST interview but oh shit oh shit I’m struggling fuck fuck why am I so sweaty.
After going through the question and discussing edge cases, I’m on the part where you come up with a brute-force solution. And voila, I’m struggling. I’m losing focus. You see, as soon as I realized that the question was quite different than the ones I had practiced, I got quite nervous and begin to freak out inside my head.
But I didn’t stop communicating. I kept talking out my logical reasoning. “Well, this is A, and I need to find B. To do that, I will take the value of C and D, and let’s see what we get…”
And the interviewer was nodding along to my every sentence. Wow, am I actually on the right track?
I was running into dead-ends.
The interviewer begin to give me hints after I ran into 2 dead-ends. With the hints, I could discuss a working brute force solution.
And you know what part comes next - optimization!
Be careful though - they won’t always ask you to come up with an optimal solution. If you begin coding a solution without asking if that’s the one they would like to see you code, they will let you. Only to later tell you that they want a different and more optimal solution, but time’s already passed and they will just have to take your mediocre solution. Good luck!
I discussed multiple optimal solutions with the interviewer. Pros and cons of each one, like the time and space complexity. He chose one and told me to code it out.
I begin to write code, and here I struggled again.I am writing code at a consistent pace, but was unsure if I was on the right track. The interviewer kept nodding along and giving me hints, which was encouraging, but hey, this whole answer might be incorrect and he might be just going along with it, only to tell me so at the end. It’s something that happens often at Google interviews. You spend 45 minutes crafting out a badass solution, only to be told that you missed a detail in the question and realize that the solution is invalid.
Before I know it, I only had a few minutes left and I still haven’t completed the optimal solution. The interviewer sped up things by telling me to skip writing a section of the code “because it’s the exact same thing but reversed” as what I had written earlier. I finally finish writing the code, and start to debug and go through it, but the interviewer says that there isn’t enough time for that. So, he just tells me that there is a bug in my code, which I find. Discussion is good, but I’m having trouble fixing the code. So, he literally picks up the eraser and erases a line of code saying “Well, you don’t need thaaaaaat.” which is enough for me to go “ah-ha!”, and implement a fix.
My code is a mess. I started out in big letters at the top, failed to space things properly, scrunched out small letters at the bottom of the board, and wrote the 2nd half of my solution on the right side of the board, with a diagonal arrow to indicate that my solution “continues there”.
That was the first interview. What a mess. I really should have drank more coffee before I came here.
The second interviewer sat down and began asking me a lot of general questions. He questions me about the technology I use, the terminologies, and general tech questions. He is a lot more quiet than the previous interviewer, has very observant eyes, and keeps jotting down notes in his notebook whenever I say a word. There are no words of affirmations, agreement, or doubt to anything I say. Just a nod, followed by scribbling some words into his notebook.
After about 15 minutes, he asks me a coding question. It’s fairly straight-forward. I discuss the question. I end up speaking for a while because the interviewer just kept staring at me most of the time while taking notes on his notebook. He asks me some questions related to my solution. I answer. This goes on for a while. Finally, he asks me to code it out. I quickly code out the solution. My code is clean, and I debugged it thoroughly. Writing is very legible. I even spaced everything out perfectly! Quite the opposite than my previous interview.
The interviewer points out an edge case. We discuss it, and I propose a solution, which he nods at. Wait, he’s nodding? Coming from him, I have no idea if that’s good or bad.
That was the 2nd interview. I feel like it went okay, but can’t tell. I couldn’t read the interviewer’s face. He could be very satisfied or utterly disgusted with me, and his behavior would still make sense!
Last interview before lunch!
And here, we have a topic which I was HOPING TO DEAR MOTHER EARTH to NOT have, but alas, here we have it - probability.
We start off with a base case to make sure I understand the question.
Pfft, yeah right. Me understanding probability stuff? Stuff that I haven’t touched since finishing my probability course 2 years ago? Ha.
Verbal communication is still good. I tell him anything that’s not clear, and it feels like we are on the right track. We keep discussing ideas and land upon a solution. He asks me to code the solution. I code it. Code is nice, clean, efficient and all, but I’m missing an important detail… Probability!! My interviewer asks me a question about my logic. He is indirectly hinting a mistake with my understanding of probability. I don’t get it, so he asks me in different ways. I still don’t get it, so he asks me to go through a different base case, which makes me understand. I explain what I understand, which STILL isn’t 100% correct. So, he begins to write other examples on the board. After I understand, time is up and he points out another important detail that I missed from the question.
That’s my 3rd interview. Yikes.
After my 3rd interview, I am presented with another Googler for lunch. This is not an interview, but just a casual lunch with a Google employee. I get to ask them anything that’s on my mind and just have a fun conversation.
He is a pleasant guy to talk to. I ask him many questions over lunch, and get a tour of the office after. Google Montreal is a small office, but a very nice one. It packs quite a punch and I am quite impressed.
After lunch, I am led back to the meeting room for my fourth and final interview.
This time, it’s a team lead that’s giving me the interview.
He breaks his interview down to 3 stages - warm up, debugging, and coding interview question.
First, he asks me general question about a technology.
Then he shows me some code, asks me to understand and explain, and find a bug. I find the bug. We discuss a solution.
Then he asks me to write the code for it.
I write the code for it. I take care to make sure the code is clean. As I’m writing the code, I communicate the logic. Halfway through, I realize that there is an uncovered edge case. I discuss this, as well as the solution to it. I fix the mistake. I keep writing. The question is a little tricky, so I’m careful to consider each detail. I make sure each line of code is legit and bug-free.
I finally finish implementing and am about to debug my code when the interviewer tells me that the time is already up. I look at the clock in disbelief and alas, I realize that I have not been keeping track of the time very well.
It’s not the worst that could happen - I was debugging my code carefully while I was writing it because the problem was a little tricky. I found and fixed bugs in the code before I finished writing my last line, so I’m pretty confident that the code is okay.
Still, would’ve been better to finish early :(
Since this is the last interview before I am led out, the interviewer was graceful enough to answer any questions I had. So we chatted for 25 minutes past the schedule. After that, he led me out the door.
As the door closes behind me, I realize it’s done. It’s over. No more studying after work. No more going to Starbucks or the Guy Concordia library to grind on Leetcode. I can now do normal stuff, have normal hobbies, and have a life. Woot.
What I learned, what I could have done better
Here are some things that I could have done better at the interview.
- Drink coffee before the interview. Having coffee as soon as I arrive was not enough for me. I needed to be well into the “zone” before I stepped into the office. I definitely solve questions faster when I’m buzzed, and if I had drank coffee before I went, I think the first interview could have went better.
- Do less Leetcode, more mock interviews. In short, the Google employees don’t give a crap about whether I get the right answer or not if I don’t have the wanted “Googliness”, like communicating well, open to ideas, respectful of other people’s ideas, patient, thoughtful, etc etc. Some of the Googlers told me that they had and still do approve and send recommendations to the hiring committee even if the applicants don’t get the correct answer. Plus, some of the questions were very very unique and probably very hard to find similar ones on Leetcode. It would have been a better investment of my time to work on other aspects, such as working through a problem with someone.
- Apply to other big tech companies. I studied a lot for Google. Like, a lot. And only for Google. I didn’t have an interview with other big companies like Microsoft, Amazon, or Facebook. I feel like it would have been a better investment of my time if I had my bets on multiple options, not just Google. It’s not that I didn’t apply. I did apply on the general website to Amazon and Microsoft, but didn’t get selected. However, I have contacts in each of the big companies, and I should have assertively utilized my connections to get me an interview.
It took two weeks for the hiring committee in Mountain View to receive all the feedback from my interviewers, make a decision, and send that decision back to my HR in Kitchener.
I first receive an email from the Google HR, asking for a phone call for the next available day. Of course, I accept.
The next day, I’m sitting at home with a complicated mix of emotions. I’m nervous. What if I passed? What if I failed? My mind is oscillating between the best and worst outcomes every 3 seconds like a metronome. I would be thinking about passing and smile like a little schoolgirl, but then quickly find myself thinking of failing and reassuring me that life will still be okay.
I hope I pass, but I don’t put too much hope on it in case I fail and get disappointed. The bigger the expectation, the bigger the disappointment.
The phone rings, and I pick it up.
During the next 20 minutes of the phone call, the HR let’s me know that I did not pass the hiring committee.
I was very close in terms of the score. In fact, if I had done just a little bit better in one of my interviews, I would have gotten a recommendation.
I ask her the score of my interviews. She says that my first two interviews in the morning had a high score, and the two interviews in the afternoon were questionable.
Whoa. My first interview was a high score? What?
In disbelief, I ask her to confirm that she didn’t confuse my package with someone else’s, to which she says she didn’t.
She says since I had a pretty high score, she is going to keep me on the list of “people to watch for”, whatever that means.
After chatting about some other things, we hang up.
I feel a little disappointed, but didn’t feel that bad. I did my best, and that was it.
My Google Interview process lasted 5 months. 5 damn long months. During that time, I had an unbalanced personal life due to studying, frustration with some Google HR that took forever to respond, and gained a lot of weight due to stress, skipping the gym to study, and other shit. I didn’t feel too satisfied with the process. I would have appreciated it a lot more if the process (from the first screening to the last) was done in 1 month.
However, I find that my experience is on the extreme end of the spectrum; most people’s interview processes often last around just 1 month.
Despite some bitterness, this was the best goddamn interview of my life and holy shit, I loved the fact that I had this experience. Both the good and bad parts about it. It was one hell of a thing to experience. Some days I would feel super motivated, energetic, and dreaming big of my career while walking home at midnight on a Tuesday after having studied at a cafe. Some days I would feel tired and wonder if the interview is worth it for me to miss out on so many social events. I pondered with tons of questions, like the classic “Why even filter candidates by algorithm questions when they probably won’t use any of it at their actual job?“. All-in-all, it was a very nice experience that made my grow. I probably don’t want to repeat it again anytime soon, but I am very thankful for having it.
And I want to recommend anyone else out there to try - best case scenario, you get a dream job. Worst case scenario, you learn a ton of shit and you probably got good enough at coding interviews to get into another big company.
Thanks for reading my Google Interview story.