Me posing at Google Japan’s reception on a Sunday morning

My Google interview experience

Due to overwhelming demands I have finally decided to write about my interview experience at Google, where I had applied for the role of full time software engineer in 2015 during my second last semester in college. I went through all the rounds and was flown down to Tokyo to do my on-site. Unfortunately they didn’t move forward with the offer in the end.

In any case, this piece is intended to serve as a reference material for anyone who is also in the process of applying or intend to apply for software engineering at Google. Hopefully this can better prepare you guys for what to expect. I shall take a ‘no-details spared’ approach in my recount, complete with dates, email snippets and with occasional hints thrown in where applicable.

For the record, I had to sign an NDA with Google so I’m unable to disclose any of the interview questions. I can only share about the interview process and the experience it gave me. What I can offer you are the practice questions I had worked on to prepare for the technical interviews and they are available under my Github repos for algorithms and data-structures. I have also put up a collection of links to interview preparation resources under this repo.

Alrighty, here goes nothing!


Singapore

It was the 26th of June 2015 and I received an email from an APAC Google staffer (let’s call her “N”) which read

Hi Jin,
Thanks for sending across your profile for Software Engineering Role at Google.
I am pleased to let you know that we have shortlisted your profile & would be interested in setting up an Initial Technical Phone interview for a Software Engineering role at Google with you.
Please read through the attached Interview Preparation Document carefully after which Kindly provide me with the below details:
Time for a phone chat with me for Monday/ Tuesday
Potential Date for the Technical Phone Interview:
(Kindly let me know 3 dates so I can arrange for time with our Engineer)
Time Slots for the Interview (the interview is timed for 45 minutes)
Coding Language for the Interview (Please choose your strongest language amongst C, C++, Java or Python)
I look forward to your response and speaking to you soon.

This was the reply to my application which I had sent in after attending a Google Technical Interview Workshop at Google’s Singapore office (when it was still at Asia Square) on the 11th. I applied for the position of full-time software engineer at Google headquarters in Mountain View, CA.

I decided to give myself 2 weeks to prepare and indicated to do the interviews in Java since that’s what I did most of my CS classes in. I also wondered if there are applicants who choose to do the interviews in C and if they also eat nails for breakfast. The call on the following Monday was short and it was basically for the staffer to touch base with me and prepare me on what to expect for the next steps. Google’s interview process for software engineers typically comprises of 2 phone screens and 5 on-site interviews before an applicant gets hired.

On July 1st I received an email invitation from an Google APAC recruiter (let’s call her “p”) via a Google calendar event. The technical interview was scheduled for July 15th 10:00-10:45 PM SGT and would be conducted over Google Hangouts. The timing is late due to the time difference since the interviewer will be calling in from the US. Trust me, this is one of the earliest time slots available and I insisted on getting it because if my prior technical interview experiences with other companies and 4 years of CS in college had taught me anything, it is that my brain cannot solve algorithms very well after midnight.

The first phone interview on July 15th was conducted exactly as I had expected: A Google doc for me to code on along with Hangouts for me to converse with the interviewer but most importantly for me to think out loud. The interviewer was from Google’s office in New York. I reckon they couldn’t get a guy from the Bay Area that early so they grabbed someone from the East Coast instead. I almost felt bad for the guy because it’s 7 am for him and he was in his PJs and munching on cereal whilst I was punching the keys away. That’s a Googler’s dedication right there and it definitely earned my admiration and respect! I was aware that every interview should entail at least 2 questions — one for warm up and one being the ‘real deal’. I found the first question pretty doable though it’s a little tedious for warm-up especially since it concerned string manipulation and I was coding in Java. At one point I almost made a careless mistake by calling the wrong Java StringBuffer API but thankfully the interviewer was kind enough to hint “I don’t think that does what you think it does”. When I was done, I manually traced out the code to him and he accepted my solution. When it’s time for the second question, I think I was only left with 10 minutes to spare (the timing was very strict). Due to the time restrictions, he only had me solve for a sub-problem of the original question intended. Since I had so little time to think, I went straight into the most naive and mindless solution which I know will work but it also looked very silly with 8 selection statements. After a minute into it, the interviewer asked “yea that’d work but can you come up with a more concise solution than that?” Panic ensues. I looked at the clock and realized I had 9 minutes left. Somehow I managed to come up with the best solution in the end with a loop. When the time’s up, he simply ended the call right there. No questions about me or opportunity for me to ask about the company. He didn’t seem to be in the mood for chit chat either and I can’t blame him really, he looked like he could use a little snooze before work. I remembered being a tad bit nervous after that because it was far from the perfect interview I had hoped for.

On July 24th, “N” called to inform me that I did very well for the phone screen and will be progressing to the next round, much to my relief and surprise. She explained that the next round for me should be an on-site interview. That’s incredible because it means that another phone screen wasn’t necessary. To my knowledge this only applies to candidates who have ‘shown enough’ on the initial phone screen and needless to say I was stoked and beyond flattered. She also explained the uncanny situation that I’m in. Because Singapore didn’t have an engineering office, the usual arrangement for Singapore candidates was to gather everyone who made it past to the on-sites, schedule a common day, have a couple of engineers fly down to the Singapore office and then interview all the candidates in one sitting. However for me that wasn’t going to be the case and she didn’t really explain why. It was uncanny because it means either no candidate from my batch made it to on-site after the first round or that I was the only Singapore candidate who applied to Google at the time, both of which are highly implausible. Whatever the case was, she just told me that the likely arrangement for me was to do a Google Video Conference (GVC) call from the Singapore office with an engineer from the Tokyo office. She also informed me that further communication will be handed over to an APAC recruiter (let’s call him “J”) who’s based in Tokyo and handling fresh grads in Asia applying for roles in Mountain View. She also asked if I was applying to any other companies at that moment, to which I told her I wasn’t. After the call ended, “N” made an email introduction to me and “J”.

4 days passed and on July 28th I still hadn’t heard from “J” so I wrote an email to “N” to inform her. On that day, “J” reached out to me via email. He apologized for the delay and explained that they had some recent changes in the team. He also sent me a Google calendar event requesting for a quick call the day after. The call was not only for him to touch base with me but also talk about the possibility of flying me down to Tokyo. I then followed up with “J” via email the periods when I’ll be free to travel for the interview. On August 3rd, “J” wrote to me that he has made some changes to the interview process and requested for another call the next day. “J” didn’t call on the 4th and wrote to me on that evening apologizing that he had backed out and asked for a call the day after instead. I guess it is hard being a Google recruiter and I was just glad that things are moving forward for me. When we talked again over the phone, he basically informed me that my next interview is on-site but will be conducted in Singapore’s office via GVC, just as “N” had preempted me previously. We then scheduled that on August 20th.

The interview on August 20th was almost a nightmare. A delayed hospital appointment I had in the morning could’ve left me embarrassingly tardy. Thankfully I risked my life and took a speeding cab down to Asia Square and reached Google Singapore on the dot. I was hosted by “P” who was a really lovely and hospitable lady. I must’ve looked frantic and disoriented because she kept asking if I felt ready and that if I didn’t, they could push back the timing for me. I reassured her that I was alright and she gave me some snacks and drinks from the pantry to help me ease up a little. How nice of her! She then synced up with the interviewer from Tokyo and got the GVC set up for us. When the interview started, I was 5 minutes late for the scheduled time but the friendly Englishman on the other side of the line reassured me it was fine. Knowing the sacrosanctity of punctuality in the Japanese culture, I was so relieved to hear that! GVC was essentially an internal Google Hangouts used within the company. The process was exactly like the first interview except that he noticed I was wearing a Pied Piper shirt from HBO’s Silicon Valley (which I’m a huge fan of by the way) and so started the conversation by chatting a little about the TV series. That helped to ease up my nervousness a lot! The first question he gave was pretty straight-forward but I still took a little more time than I should’ve. When the second question was asked, I was left with only 20 minutes to spare. To make things worst, the Google docs connection got lost a couple of times when the interviewer was typing on it for illustration so precious time was wasted on just trying to convey the question across. I must admit, it was quite a hefty question. It seemed like an graph question concerning solving for components but it was really a data-structures question although it wasn’t obvious to me from the outset. As there wasn’t much time to code, I just verbally discussed how I would approach the question and the various caveats I would run into. When the technical part ended, we exchanged some questions with each other and had a bit of chit chat about Google. At the end of the interview, I thought I was done for because technically I’ve only coded out the solution for one question. The second question was a complete disaster in my opinion.

In the first week of September, I was informed that Google will be bringing me to the next round of interviews, which will be on-site in Tokyo. This took me almost completely by surprise, especially after how I felt about my last performance. The interview was scheduled for Friday the September 11th at Google Japan’s Tokyo office. It also happens to be polling day in Singapore which I was forced to miss because there just weren’t better dates available. According to “J” in his email, the arrangement for me was laid out as thus

What to Expect:
Up to 5 interviews with Software Engineers (45 mins each) with one focused on a System Design question. You will have lunch with an Engineer which is a chance to see the office, and find out more about the teams, projects, ask more about the role and responsibilities of Engineer at Google from a technical stand point, as well as any other questions that you have. :) The interviews will still be quite generic, although we will match interviewers from similar backgrounds and skill sets, as well as potential teams that we see as a potential fit to you.
***************************
Updates:
After the interview it can take around a week to collect the feedback from the 5 interviewers, and then we also have to have this reviewed by a Hiring Committee. I will update you as soon as I have information, but please don’t hesitate to reach out if you have any questions or concerns!

Hey wait a minute! Why are there still up to 5 interviews on the day? Didn’t both “N” and “J” mention that my GVC was an on-site interview? I shot him an email to clarify but never received any reply on that.

At this time “P” was coordinating the travel arrangements for me in Singapore. The process was very simple, all I had to do was to fill up a Google Candidate Travel Form and everything was all set and handled by a third party business travel management company called Carlson Wagonlit Travel. I decided to depart from Singapore on the 9th (Wednesday) and depart from Tokyo on the 13th (Sunday). I chose to land 1 day prior to the interview on the 10th because being in a foreign country meant that I needed time settling in and getting accustomed to the public transportation and that indeed turned out to be a good decision. I also decided to stay in Tokyo for 2 days after the interview to squeeze in a little R&R. No surprises here! It was an almost all-expenses paid trip because Google covers the air fares (SIA and JAL to choose from), 2 nights accommodation at Hyatt Regency hotel and transportation expenditures. Google will also provide a 45 USD per day food allowance at a reimbursement basis throughout my stay. I’d be lying if I said I wasn’t over the moon with the arrangement.


Tokyo

At 6 am JST on Thursday the September 10th, I landed sheepishly at Haneda Airport (羽田空港). I had barely caught a wink on the plane because my mind was just going through all the classic dynamic programming questions to warm my mind up. Truth be told I hardly had any time to prepare for the on-site interview because I was just clearing up my schoolwork up until the point I flew. This is the first time I’m in a foreign country all by myself while being surrounded by people whose culture and language I knew little of. It made me feel like an alien, until I stepped out of the airport and saw the thunderstorm, I realized I was really Godzilla.

The thunderstorm as seen from within my taxi

Since I wasn’t carrying much luggage, I had initially wanted to take the train down to my hotel but because I was so cranky and lethargic I chose to take a cab instead. That turned out to be a very very costly 30 minute trip which amounted to 7520 円 or equivalently 68 USD. I had also made the mistake of not purchasing 2 very crucial items at the airport: a tourist pass for the metro and a traveler's SIM . It was something that I would soon regret in the days to come.

Hyatt Regency Tokyo at Nishishinjuku (新宿区) as seen from its porch

At 7 am, I arrived at Hyatt Regency and went up to the counter, gave my booking information and credit card (thankfully I brought that along!) and then collected my key cards. It was a quick and smooth process! I was also very lucky to have an available room for early check in, and at level 17 it had a nice view to go with it too. Once I checked in to the room, I washed up, shot “J” an email to tell him I’ve arrived in Tokyo and just crashed till noon. The rest of the day basically involved me alternating between naps and frantic last-minute revisions.

My on-site interview on Friday was scheduled for 10:15 am to 3:00 pm JST. I got up at 7:00 am and for breakfast I had some sandwich and instant ramen I purchased from 7–11 the night before. I did my morning routines, got dressed and left the hotel at about 8:30. Since I didn’t want to risk being late for one of the biggest interviews in my life (up till that point), I decided to take a cab and I was glad that I set off early because it provided just enough time buffer to battle Tokyo’s rush hour traffic. The trip costed 2980 円 or equivalently 27 USD.

View of Mori Tower at Roppongi Hills from the ground level

Google Japan is located at Mori Tower in Roppongi Hills which is a posh and sprawling complex housing offices, restaurants, an art museum and an observatory. The area feels almost like ION Orchard in Singapore. Mori tower also happens to be Tokyo’s fifth-tallest building and one of the world’s most advanced earthquake-resistant buildings in the world, which we’ll see why this is relevant in a bit. What I also discovered, much to my frustration, was that Grand Hyatt hotel was only just beside Mori Tower and directly accessible. If only Google had instead arranged for my accommodations there, I wouldn’t have had to travel so far to the office for interview and perhaps even clocked in 2 more hours of beauty sleep.

Following email instructions, I arrived at Google Japan at about 9:30 and was greeted by “J”, a bubbly American guy who was visibly overwhelmed by his list of schedules and stack of interviewee resumes, so much so that he initially mistook me for another candidate. Apparently “J” was expecting a Japanese candidate who was late because he was travelling from another prefecture and got delayed by the ongoing typhoon in the area. I thought: Phew! That was close, I almost did an interview for someone else! “J” looked at his documents and reassured me that it was going to be a short day for me. He may or may not have mentioned that I’ll be doing about 3 or 4 interviews but that was certainly the impression I had after meeting him at the reception. After climbing up and down the stairs and getting lost a couple of times in Google Japan’s office maze, “J” got me to my interview venue for the morning.

My first on-site interviewer was a tall and friendly European guy. He came in to the room, shook my hand and looked at what’s presumably my schedule and remarks. He then turned to me and told me that “ah this should be easy for you.” In that moment I just thought to myself, wow I’d love to find out the remarks my previous interviewers wrote for me. We sat down and started with a little chat. When the technical interview started proper, he offered me the option to either write out my solutions with pen and paper or on the whiteboard. I chose pen and paper since we were sitting down but in hindsight I should’ve picked the whiteboard because informal scribbles and cancellations on paper combined with constant re-orientations (he sat across me) just resulted in a complete mess at the end. I wasn’t informed that all my answers will be recorded down by the interviewers and I felt that it was something that should’ve been communicated with me early on because it affects how I balance presentation and communication. So anyways this interview came in 3 parts, an algorithm question, a mini design question and a spot-the-error-and-correct-the-algorithm question. They were relatively non-tedious questions but I did receive some helpful nudges along the way. The interviewer explicitly stated that I don’t have to be too strict with the syntax, which I thought was nice. For the last question, I first came up with a workable solution which could be optimized. It’s a well-known algorithmic subroutine seen in many algorithms but I’ve always implemented it in my own habitual way which yields 1 more comparison per iteration. The interviewer prompted me to improve upon it which I eventually did but maybe I was penalized for that because I might’ve looked a little unconvinced. Truth is, in time complexity, my algorithm shares the same Big O as the undisputed optimal solution but I didn’t want to argue because it’s never wise to argue with your interviewer.

The next interviewer was a middle-aged Japanese guy who didn’t seem to be too fond of me, though it’s not like there was any reason for him to be. It’s just that he appeared very impersonal. It was evident that he was a pretty senior Googler. He walked into the room expressionless, shook my hand and started writing out the problem on the whiteboard. He spoke with a heavy accent and basically the code was our common language for communication. It took a little back and forth and some examples before I really comprehended the question. It’s one of those problems which are not difficult to understand but is hairy to describe. I begin solving it right away the moment I grasped the problem and immediately raised questions about 2 ambiguous corner cases. He praised me for catching those and told me to ignore them. That was a confidence booster and it definitely made me a little less nervous because it means I have fully appreciated the problem. I went ahead and wrote out the solution which was a little verbose and tedious. I then traced it out for him manually to prove that it works and not only that it works, it was also the most optimal solution in terms of time complexity. He was convinced and then started asking some follow-up questions. There were two blocks in my code which were doing similar procedures but iterating a list in opposite directions so he said “these two parts are very similar,” to which I foolishly agreed. I don’t know if it was the joy and complacency of coming up with a solution to a hard-to-describe problem, or if it was due to my mental fatigue or whatever, but I had completely missed out on his hint for me to refactor my code! Thinking back now, that moment of folly might have costed me greatly. Still, a straightforward request would’ve been so much more helpful. He then asked me if I could provide a more naive solution along with its time complexity, and I did. The interview ended with that and I remember politely insisting to clean the whiteboard for him (since it was mostly my writing) but he sternly refused. Before he left, I shook his hand once more, took a subtle bow and gently said arigato. He didn’t looked too pleased and I wasn’t sure if I had unknowingly offended him in any way.

The next interview was my favorite of all. It was a cheerful skinny Japanese guy. Although he too spoke with a thick accent, his approachable and personable nature made me feel at ease communicating. He gave me a huge design question and the whole interview was basically just that. We had a very pleasant and insightful discussion on the problem. Before I started laying out the components, I asked for his permission to ignore strict syntax for the sake of brevity and presentation and he permitted that. It took several iterations and ongoing discussions to reach a reasonable design and by then the whiteboard was covered almost entirely in code and drawings. In hindsight I probably should’ve better partitioned the whiteboard before tackling the problem head on. The interview ended with me asking him about his role at Google especially since he worked on Search, a division that I’m particularly interested in. I felt great after being done with that interview and it concluded the morning set of interviews on a high note.

Next up was lunch! However unlike what “J” had promised me previously, I’m actually not having lunch with an Engineer. My lunch chaperone was a middle-aged Japanese gentlemen who works in Google corporate relations (if I remember correctly). There are two cafeterias in Google Tokyo, one serves Japanese cuisine and the other serves non-Japanese food. Of course being in Japan, I picked the Japanese cafeteria and also because I have a friend who works in Google Tokyo and I promised to meet her over lunch and she strongly recommended the Japanese cafeteria. I trust her because she’s a huge foodie. So in the end, the three of us had lunch together and it was terrific! The food was amazing and I had to consciously remind myself not to over-eat so as not to get too sleepy after lunch. Our conversations were still somewhat formal but it did prove to be insightful. I found out that my Google chaperone actually holds a PhD in supply chain management but switched out from academia because he loved helping businesses solve their problems and also loved the company culture at Google. I then learnt more about the engineering team structure and dynamics at Google from my friend who is a software engineer. Hence technically speaking, I still had lunch with a Google Engineer in the end so it’s all cool.

After lunch, my Google lunch chaperone brought me to my next interview venue. I asked him how many more interviews am I left with and I was told there were two more. So I thought, this is gonna a long day after all huh? I felt very dismayed that I was mentally led into expecting a short day, but ended up getting a really long day with 5 full back-to-back on-site interviews. Regardless, I remained optimistic because I was already done with 3.

The fourth interviewer was a shrewd-looking Japanese guy who spoke well and was part of the Chrome team. That interview started with verbal questions testing various conceptual computing knowledge which I thought was great since it was just after lunch and my mind needed some warming up again for algorithms. After we were done with that, he moved on to ask for a very simple algorithm question involving implementing a mathematical procedure (one that you’ll learn in secondary school) but I tripped on it a little because to my embarrassment I had forgotten how to work out the math by hand. After some clarifications with him, I solved the problem and we ended the interview with some calculations and discussions on computing optimizations.

When it was time for my 5th and final interview, I was dead beat and I’m not going to lie. My 5th interviewer was a cool Japanese dude who spoke fluent English with a strong American accent. The first question was a pretty standard dynamic programming problem but I was so absent-minded that I made a very careless and amateur mistake in handling the conditional for the base case, so the code won’t actually terminate. And when I traced out my code, of all the things that I should critically examine, I actually took that base case condition for granted and so I missed the bug completely. It was not until he gave a hint that I realized the mistake and fixed it on the spot. After he accepted the solution, we talked about optimizing it and that solution was rather straight forward. The next question was just a verbal discussion with some back-of-the-envelope calculations. That went really well and I solved it pretty quickly. So I ended up finishing all the questions ahead of time and we just spent the remaining 10 minutes or so chit-chatting about Google, the 80/20 rule and why I wanted to join the company etc.

Of course there’d be an Android in kimono!

When the last interview ended, I was led out by the final interviewer. He tapped out my temporary pass at the kiosk and guided me out of the company. I was little surprised by how abruptly the day ended for me because I thought that he would hand me over to “J” and that I would receive some kind of a guided tour around the Tokyo office. There was none of that but fortunately for me, I had my Googler friend and so I asked her for a tour of the office on Sunday and I was so glad she obliged.

At 5 am the morning after my interview, I found myself being almost thrown out of my hotel bed. It turns out that Tokyo was hit by a 5.4 magnitude earthquake with its epicenter at Tokyo bay. At that point I had no doubt in my mind that I am indeed a Godzilla because that’s a Godzilla-worthy welcome right there! I felt really lucky that the quake happened the day after the interview and not on the day itself because it would’ve robbed me of precious sleep. I spent the remaining time in Japan wandering and discovering Tokyo mostly on foot. I won’t detail my itinerary here because this piece is after all not intended to be a travelogue. All I will say is, Tokyo is a charming city with a very distinct beauty! I flew back to Singapore on Sunday evening via Narita International Airport (成田空港).

Taken from Narita’s observation deck

Singapore

After being back, I was rather optimistic because I felt I had done much better in any of my on-site interviews in Japan than my first two online interviews combined. It’s just much easier being face to face with the interviewer to speak my thoughts to and having a whiteboard to work on. I was told that the Google executive committee still manually review every single software engineer application till this day and so the final decision would take a while. I ended up waiting for almost a month.

On October 5th, I was in my database tutorial class when I received the email from “J” which had a subject that read “Results and apologies”. The email was as follows

Hi Jin,
I hope you are well, haze still around?
As you know, I was OOO for some time due to an injury, so I needed to postpone some meetings.
I did receive your feedback last week, but I wanted to speak with the committee before speaking with you.
The results where that they will not be moving forward with an offer at this time.
I was surprised because as you said the interviews went well, and the phone screen results were quite good.
After trying to get some details, it basically came down to the code. Some of the interviews had quite good feedback, where others commented on your code not being at the level we are looking for.
It was said in all the interviews that your communication was great. Your design also had good comments.
Very sorry again for the slow response, and please let me know if you have questions. It was requested from the committee to stay in touch, and to please apply again after you feel your coding skill has improved.
Please add me to hangouts!
J

I remember my heart sank when I was reading that. It really didn’t sit well with me, because the reason stated didn’t seem to add up. I know I had manually tested all my codes on the whiteboards before confirming my solutions and most interviewers did give a verbal acknowledgement of acceptance for my code (e.g “Yes that would work”). As for syntax, the only interviews where I didn’t code in strict syntax was the first interview where he said it was okay not to and for the design interview where I asked for permission not to for the sake of brevity and discussion. My first instinct was to ask if they had mixed up my interviews with someone else’s and so what I did was I sent “J” an email recounting every on-site interview I did to check if it tallied with his record. According to “J”, he raised that issue to the hiring committee and forwarded them my email. After a second review, I was told that the outcome remains the same which boils down to “code quality” and I was invited to apply again once I feel I have improved.

I was completely bummed out by the whole outcome and if there was one thing that I have come to accept, it is that the standards expected from interviewing candidates appear to differ greatly across different Google offices.


Thank you for reading up until this point! If you are currently applying to Google as a software engineer, I hope my experience won’t discourage you in any way but instead you offer a better perspective to the entire interview process so you could better manage your expectations. As for me, I am currently not intending to apply to Google any time soon because I decided to start my own tech company Mooder! ):)

If you’re interested to find out about my feelings during the entire interview process, you could see them on Mooder here.