This is the first post of several about being an intern. At some later point, I may not be able to talk about everything I’d like to (we’ll see), but I will do my best to maintain an open record of the experience. This post discusses the bits of the process I saw at each company I applied to, sorted by the time I found out my result.
Between late 2010 and early 2011, I submitted this resume to Hulu, Facebook, Google, Microsoft, MRX, and Pixar. Responses came (or did not) across a variety of timescales, and the results were mixed. Hulu did not ever respond. Facebook put me through four levels of phone interviews before rejection. I had one phone interview with Pixar before rejection. Microsoft flew me to Seattle (I’m a past intern, which allowed me to skip the first phone screening), then rejected me. I travelled to MRX in Hamilton for one interview, and received an offer, and I had five phone interviews with Google, and received an offer.
Rather than speak about mistakes I (or interviewers) made, or the exact problems encountered, this post will focus on processes. I apologise for the factual, step-by-step presentation!
I submitted my resume via the submission form in the careers section of facebook.com in October of 2010. Within a week, a recruiter contacted me by email and arranged the first level of phone interview. This was essentially a pulse test, asking things such as “what is the ‘new’ keyword used for in C++?” and “Explain what inheritance means.” After this phone call, a second phone interview was arranged, where I was given some high level design problems and some low level code problems. The same was true for the third and fourth phone interviews – each occurring about a week or two apart. Each interview was about one hour long, and given by a developer. Generally, they had worked at Facebook about a year, and the people I spoke to were friendly and helpful. For sharing code, we used a cool (but slightly flaky) tool known as collabedit. I heard back fairly promptly about the decision each time, and have a fair understanding of why I did not progress beyond the fourth phone interview. High point: hearing about cool projects people work on at facebook. Low point: interviewers completely forgetting they were supposed to phone, which was a fair waste of time.
I noticed Pixar’s internship posting through InternMatch, and submitted my resume in early February. They got back to me within about 10 days to set up a phone interview, which had to be rescheduled once. The interview was half an hour long, and was between myself and two development leads at Pixar. I spoke to them in the midst of the third day of the Guelph Seven, and everything went great. They told me a bit about development at Pixar, then asked some interesting questions (pretty high level) that I’d never thought about before, and seemed very pleased with my responses. We got along well, but I heard back about a week later that they decided to move forward with a different candidate. I’m not certain what I could have done to improve, but I still feel positive about the process.
I submitted my resume online to Microsoft in October of 2010, and didn’t hear anything back from them. In February of 2011, a snow storm cancelled a seasonal job fair, and I was motivated to find and contact the Microsoft recruiter for my region. About two weeks later, she got back to me and had me respond to some questions by email, mostly about my interests and past experiences. From here, I was brought forward to the flight to Redmond, which was scheduled for sometime during March (it was 48 hours after the end of the Guelph Seven).
I had three in-person interviews, each consisting of a brief introduction and coding on a whiteboard, and one of them involved lunch, which is really awkward, because you’re supposed to eat and talk at the same time. The interviewers were mostly senior engineers, and they were all friendly and helpful. Two interviews focused on code, and one on design (with some code thrown in). I have heard that 4 interviews is an indicator of success, while 3 or fewer indicates failure. Among my 3 separate times interviewing as an intern in Redmond, I was successful with 4 interviews, rejected with 4, and rejected with 3 – add that to your data as you wish. I received my rejection within a week each time, and my first time there, received my acceptance the day of my interviews.
One day, I would like to write about my past experience as an intern at Microsoft. I had a surprisingly complex task assigned without significant guidance, and fell through a lot of the internship process’ cracks. Particularly, I did not receive my final internship review until 9:00 PM on my final day of employment, despite the intention that it be completed at least a week prior to an employee’s last day, and a meeting between recruiter, employee, and supervisor is supposed to be held to discuss it and future steps, which never occurred. I learned many lessons while I was there – few of them were related to code, and most were about things not to do in my future. I also met some amazing people, but could have been more social.
I submitted my resume to MRX in mid-March and worked out a time to travel to the office. I met with the development lead and two senior members of the development team for about an hour, and had a mix of non-technical questions and questions about my experience. I felt like I would get along with these people and fit with the team really well, and I received an offer from them approximately two weeks later.
Short version: I did 5 interviews with Google and received, then accepted an offer.
Long version (much better story): I submitted my resume to Google in October of 2010 (at the same time I submitted to Facebook, Microsoft, and Hulu), and aside from an acknowledgement email (and a form), I did not hear back from them until the middle of February. They requested two full months of availability for interviews, and we had a bit of a rough start.
My first two interviews were back to back 45 minute technical interviews, using Google Docs to share code. It used to suck a lot for this, and while still not perfect, it manages. The first interview went well, and the second interviewer forgot to call. My questions were algorithmic coding problems, and I was allowed to answer in whatever language was comfortable (I chose Ruby). The wait for the second interviewer gave me an awesome opportunity to properly finish and polish up the code I’d written, which was really fun. I did this in my own vim window, and copied back to the Google Doc every time I’d fixed a major issue or added an interesting feature, and the code ended up looking nice. I’m not quite sure why, but the interviewer was present in the doc for several hours afterward, so I think they saw my polished result later. The second interview was rescheduled, had similar content, and also went well. The interviewers were helpful and pleasant. Again, I enjoyed thinking about the problem enough that I polished up my code until it worked really well after the interview, and I believe the interviewer saw it (but have no confirmation of that).
My third interview was scheduled for the day after I returned from Microsoft, and on that day, I asked for it to be rescheduled (I’d been awake for 40 hours or so on airplanes and coding in McDonald’s). I rescheduled it for the following week, and then ended up being very, very sick the day of my interview, in a way that robbed me of sleep, tore my focus in half, and made moving my arms feel like fire was consuming them. I emailed a request to reschedule. My recruiter phoned me not long after to inform me that rescheduling at this point would severely limit my chances of finding a placement, but after I described my situation, she understood, and we decided to try another day. I hung up, relieved and delirious, and the phone rang again. It was my interviewer.
The problems were technical and began with code, then progressed into some more mathy stuff. I was sluggish and could barely type, and didn’t feel like I had much clue what was going on. The interviewer was forgiving of my condition, but assured me that he could (and would) not take into account my claimed state of mind while assessing my results. I did not find the answer to the final question, and even after I hung up, despite a lot of pacing to keep pain at bay, and discussing the problem with my likeminded friends, no solution arrived. Our shared stumpedness made me feel better, and I managed to go to sleep.
The next morning, my second thought was “I feel excellent!”, and my first thought was the fully formed mathematical answer to the problem from the day before. I quickly googled my interviewer’s name and found his email in a google groups discussion, and sent him a message outlining the correct solution, with some possible optimizations. I briefly considered coding it and putting the code onto github, but decided that would be too elabourate and time consuming. He responded favourably, and I heard back positive news within a few days. I’d made it ‘in’ – such redemption! Now I had only to find and interview with a host.
Next, I sat in the candidate pool for a few weeks.
I eventually emailed my recruiter, asking whether I could assist in finding a suitable project, and she responded very soon after, to let me know I’d been set up for a non-technical interview to determine my fit with a potential host, and they might make an offer over the phone if things went well. I was thrilled!
My non-technical interview ended up being a regular technical interview, only with less time than usual (just 30 minutes). My interviewer seemed like a nice guy, but I didn’t feel like our thoughts were quite lining up. After my interview, I contacted my recruiter inquiring about possible next steps.
One week later, I received both an offer from MRX and also word from Google that my previous host had moved forward with a different candidate. I’d fought so hard for the Google position at this point that I wanted to see the process out, but I did not want to keep the people at MRX waiting, because I knew I’d love to work with them.
Through an amazing effort of the recruiter assigned to me, an interview was arranged for the morning of the 18th (monday) with the Chrome team. I checked out the Chromium source tree, built it and ran some tests, and hung out in the #chrome IRC channel, and then waited for several hours by the phone. My host had fallen ill and couldn’t call that day – so we pushed the interview to the next day. My host was still sick, and not able to interview.
Again, through the amazing effort of my recruiters, things came together, and a different interviewer contacted me for the team. He explained some information about the position, what sort of tasks might be involved, what the team was like, and I asked him a few questions. Then we thanked each other and that was that. Not a surprise technical call, just a discussion of what work gets done by the team and what things they’re going to do. It also turned out I’d read a blog post by my interviewer the day before! I spoke to my recruiter again, and late that evening (post midnight for me, post 9pm in the pacific), a verbal offer was made. I can’t thank the people involved enough for being so prompt and diligent; they’re amazing through and through.
A common theme throughout this year’s internship hunt was that I had to be the first to act. Generally, things seem to sit still until you poke them. I have been fortunate to not poke someone and get an angry response, but I guess it’s often up to you to stoke your own fire.
Another takeaway is that the interview process, while fun, sucks in so many ways. Everyone I did phone interviews with had at least one scheduling change or issue, and everyone I did >1 phone interview with had someone completely miss a call for no obvious reason. If this kind of thing happens to you, the best you can do is maintain professionalism, accept that mistakes happen, and push forward in a constructive way. Contact your recruiter to let them know what happened, and try to work as a team to bring the process back under control.