Late in December 2007, I received an email from a recruiter at
Google interested in discussing some software engineering positions at
the company. Despite being fairly happily employed, I decided to follow
up because, well, it’s Google! I forwarded an updated resume and
scheduled a phone interview for a few days later in which the recruiter
inquired further about my background, current job, and development
skills. He also asked about my research assistantship and my
publication from the lab. After I spoke for five or ten minutes, the
guy gave me an overview of the interview process (one or two technical
phone interviews followed by several on-site interviews) and explained
that the questions ahead would be very technical and difficult. To this
end, he inquired about my experience in theoretical computer science,
particularly algorithms, data structures, and distributed systems. I
answered honestly, stating that I did not major in computer science in
college, but that I had a solid foundation from high school, and that I
accrued plenty of relevant experience in the mean time. He seemed
satisfied and suggested I brush up on big-O notation and other comp sci
basics. I think I went to B&N one night and skimmed a few chapters
of Programming Pearls.

Technical Phone Intervew

For
the technical phone interview, an engineer from Google called me
exactly at the scheduled time, and conducted an interview for exactly
45 minutes. I was surprised at how punctual he was. For the first half
of the interview, he asked me about various items on my resume, honing
in on the applications I developed at the research lab, and also my
experience in video game development. He allowed the interview to flow
naturally, which was nice. E.g., at some point I mentioned Flash, and
he followed up by asking my opinion of Flash versus JavaScript, which
sparked a tangential conversation in web usability. A few times he
asked questions like “How would you do that better?” or “Do you have
any improvements on that idea?” I just tried to keep fluid throughout
the conversation, and it went very well.

The second half of the
phone interview revolved around a programming problem. He started off
by asking some easy questions about linear versus binary search
algorithms, and then presented a more difficult problem concerning a
variably shifted sorted array. To get the ball rolling, I rattled off
the obvious but inefficient solution, stating why it was inefficient
and seguing into the solution the interviewer was after. I whipped out
a pencil and paper and started drawing up a solution, making sure to
provide frequent updates to the interviewer about what I was thinking
or writing. In retrospect, the problem was not too hard, but having to
do it over the phone added a level of distraction. I had a rough
solution after a few minutes, at which point I recited the pseudo-code
line by line. When I finished he said “Good” and asked if I saw any
problems with the algorithm. I did a once over and identified two
mistakes in my code and corrected them verbally.

In the last few
minutes of the phone interview, the interviewer gave me a chance to ask
him some questions. I quickly asked about his role at Google, the
typical development process, and jokingly about the food and if they
have sleeping rooms for engineers like Yahoo. He said he works on
Google Finance, and that projects are purposely kept small and agile.
He laughed at my joke questions, confessing that the food is excellent
and that Google does not have any sleeping rooms.

On-site Interviews

Shortly
after the technical phone interview, I received a friendly email from a
different recruiter asking to schedule a day of on-site interviews at
the NY office. I was again reminded about the “caliber” of the upcoming
questions, and scheduled a date a few weeks down the line. At this
point they sent me a few forms including an NDA to fill out and bring
along to the interview. In preparation, I practiced developing
algorithms and writing code on paper without a computer, did a few
rounds at TopCoder, and skimmed some academic papers published by Googlers (specifically, the original Google paper, MapReduce, Google File System).

Unluckily
I came down with some illness right before the interview so I ended up
postponing it for another couple of weeks. Originally I was really torn
about postponing the interview, but when I called my recruiter she told
me it was absolutely no problem and that I did the right thing. I felt
a lot better. A few days before the second date, as if the universe was
playing a trick on me, I started feeling under the weather AGAIN, but I
wasn’t about to postpone twice so I committed.

On the morning of the interview, I did have a bit of a scratchy throat, but once the adrenaline kicked in I felt okay. [Travel accommodations expunged to preserve anonymity.]
I arrived way too early, so I decided to “people watch” at the entrance
for a bit. I got a cup of green tea from a street vendor nearby, took a
sip—disgusting—but continued using it as a hand warmer for several
minutes. It was very easy to identify which people entering the
building were Google employees; they were the young-looking ones in
jeans and hoodies. Finally I made my descent into the building, signed
in at the lobby, and took an elevator up to the main Google floor. The
elevators doors opened to a wide open lobby area. Behind the front desk
was a giant Google Earth display animating from point to point on the
globe. There was also an animation of search phrases projected on the
floor. (In the few seconds I was spectating, I saw the term “yahoo.com”
twice. Who does that?!) The receptionist instructed me to
sign in and wait for 15 minutes or so, as I was still very early at
this point. She asked for my interview contact, which I provided, but
she wasn’t able to find him in the computer. Apparently the original
recruiter I was in touch with wasn’t working at Google anymore. I gave
her another name I remembered from correspondence and she straightened
it out. I sat down, opened up my laptop, and hopped on Google’s free
wireless network. I IM’ed some people and took some deep breaths. I was
pretty nervous. A few minutes ticked by and before I knew it, my
recruiter was there to greet me.

The New York Google office is
huge. It spans an entire city avenue. We walked for a minute or so to
my interview room, passing all sorts of fun areas: offices, conference
rooms, kitchens, play rooms, giant blue bouncy balls, all very “open
air” style, very welcoming. The interview room itself had two glass
walls, which were considerably friendlier than the usual closed-doored
interview rooms everyone is accustomed to. The recruiter gave me a
prospective overview of the day—2 or 3 interviews, lunch, and then X
additional interviews—claiming that they didn’t know the schedule for
the second half of the day just yet. In actuality I think this was just
their way of saying, “We may decide you suck after 2 or 3 interviews,
at which point we’ll quit wasting our time on you and kick you out.”
The recruiter told me to help myself at the kitchen nearby and to ring
him if an interviewer didn’t show up within a few minutes. He left the
room, and I did a set of push-ups to blow off some steam. In a few
minutes, my first interviewer showed up.

The NDA prohibits that
I talk about the guts of the interview, but each interview followed the
same format as the original phone screen: 5 or 10 minutes of
resume-centric discussion and then a programming problem. I had 2
interviews in the morning, then lunch accompanied by an engineer, then
4 additional interviews after lunch. For the last interview, two
interviewers were present. Compared to the phone screen question, the
programming problems for the on-site interviews were much more
difficult, but manageable. In many of the questions, I stated the
obvious “brute force” solution, but quickly set off on the “smart”
solution. The interviewers wanted you to employ clever data & CPU
optimizations, recursion tricks, and heuristics. A few of the
interviewers concentrated at least briefly on non-programming questions
(class design, system design, usability, asymptotic analysis), and one
of them focused on obscure JavaScript (which I nailed, WOO!). I gave
myself an A or B+ for most of the interviews, but I did need some
prompting at two or three points throughout the day. Overall, the
questions were on the level with what I anticipated, and I was happy
with my performance. The Google interview process lasted all day and
was very exhausting, and I felt an awesome wave of relief when it was
over. They also gave me a cool Google T-shirt before I left.
Unfortunately it’s way too big for me, but it’s a great memento.

No dice

A
few weeks later, I got a vague email from the recruiter asking for a
convenient time to “talk.” Immediately I got a bad vibe from this and
braced myself for rejection. Sure enough, when the recruiter called, he
informed me that I did very well, but that the hiring committee was not
going to move forward at this point. He told me that the bar has been
incredibly high for engineers lately, and that they are only accepting
candidates who received enthusiastic reviews across the board (hinting
that one or two of the interviewers gave me a less-than-stellar
review). He apologized for not being able to provide more detailed
feedback, and encouraged me to apply in a year or so when I felt
motivated. Bummer.

After all that stress, it’s downright frustrating to not have any clear feedback. Looking back, I can only think of one
instance where I didn’t get the answer, and maybe two or three
instances where I needed a slight “push” from the interviewer. I can
only assume it was one of those guys who gave me the negative review. I
definitely remember more instances of “nailing it” than struggling,
but, like the recruiter said, they are looking for aces.

Even
though I didn’t get an offer, I’m proud of myself just for making it to
the end of the process. I think I would have been a good fit at Google,
but for now it’s behind me.

George
on
3/25/2008 10:45 PM
The ridiculously lopsided applicants to positions ratio (and the whole "working on cool projects for less pay than square projects") reminds me a lot of new PhDs looking for jobs as professors.I interviewed at a first tier math department (not Princeton, but Tier I according to the AMS) and they had 1200 applications for 5 jobs. I ended being #6 on their list.In situations like this, the only way to stay sane is to realize it's not about you and your intrinsic professional worth. It's about them trying to fit together the best team they can, while putting finite resources into evaluating a mountain of candidates, most of whom are well-qualified.

Dirk
on
3/26/2008 6:04 PM
Your experience sounds eerily familiar. While I haven't heard back yet, I didn't exactly nail it so my expectations are low. Like you, I am lucky to be happily employed so I don't have much to lose by trying. Overall though, I am proud of how I handled it. Having 15+ years of experience, it was disappointing that they didn't even look at my resume. With 2 weeks to prepare for the interview, I drove myself absolutely nuts brushing up on my comp sci.

Doyle
on
4/28/2008 4:05 AM
Nice post, and bad luck on not landing the job - sounds like you don't need it anyway.I would never submit myself to Google and ask them for a job, or even accept their offer for an interview if they wanted me actually.I guess they have no reason to accept anything but the best of the bestSo glad to be in a satisfying job right now....

Egerton
on
5/28/2008 10:28 PM
I recently had very similiar interview experience as you with google. I thought my interview went pretty well, there were only a couple of times when the interviewer would give me some hints, and I was able to give them the answers they were looking for. So my guess is that they probably are cutting back by only hiring candidates that can 'wow' all interviewers. I actually have a friend who joined google last year and she told me she definitely failed to answer some questions and she still got in. Probably it is just harder to get in this year.