After a lot of preparation, I recently interviewed at Microsoft. If you are interested in the preparation part, read my earlier post. This post is about my interview Experience at Microsoft. I will have another post dedicated to my Amazon interview experience, too.
While I was preparing to interview at Microsoft, I read a lot of write ups (and even videos) detailing people’s interview experiences. Some of them were stories that made me excited, and prepared, while others made the whole process seem like an impossible dream. Regardless of the differences, the overall process is definitely very taxing, and mentally, quite challenging. Here is my version of the “Microsoft Interview Experience”.
DISCLAIMER: This post is intended to recount my interview process, the flow and the steps. I will not be disclosing the interviewers’ names, and the questions that were asked to me. Ethically, it is not the right thing to do, and legally, I am bound by Microsoft’s Non-disclosure Agreement. So if you are looking for interview questions and answers, you have come to the wrong place. If you want to know how the process goes, and what I thought of it (with lots of real pictures), then read on.
I was initially contacted by a Microsoft representative about a few months ago. She wanted to share a couple of opportunities she had at Microsoft’s Windows Phone Division that she felt I would be a good fit for (How did she get a hold of me? I have covered the “getting noticed” part in my earlier post here). I was traveling out of country to Kathmandu the very next day, so we couldn’t really schedule anything at that moment. We decided to get back in touch after I was back in the U.S. While I was in Kathmandu, I was approached by another Microsoft Talent Sourcer who had a different set of opportunities based on Mountain View, CA and Redmond, WA. I got back in touch with her when I came back, filled out a brief questionnaire about my work history, skills, academics, and work status and then I got my first interview scheduled!
This interview was with the sourcer. We talked about the available positions and teams, and in general, about working at Microsoft. Then we spoke about my work, projects and other stuff from my resume. We also talked about team work and such. Then the interview moved on to the technical side of things. I was asked about a few OOP concepts, some data structures and a few things on testing. I was given a question and was told to email the solution back to her within an hour, which I did.
Within a week, I was informed that one of the teams from the Windows Live Division was interested in me and would like to schedule another phone interview with one of the team members. I was also introduced to a recruiter who would manage my interviews from there on.
I was called by one of the engineers from the team. I was a bit shaky and nervous, as this was my first fully technical interview in a while. But she was a very nice person, and made me feel at ease. We talked briefly about the team, and my work, then moved right into the coding question. The online code sharing tool we were supposed to use, went down that day, so I wrote the code in my computer on Notepad and read it to her. I stumbled a bit initially, but once I got the “aha” moment, it was pretty straight forward. I emailed the code to her then we discussed about it briefly. We found a few bugs, which I fixed promptly. Then the focus shifted to testing. We talked about testing a particular product for a bit, and once she was satisfied with my answer, she opened the interview up to any questions I may have. I asked her a few questions and we were done. I felt that she did a great job in prompting me to think out loud, and also to make me comfortable. It felt like I was solving a problem with a colleague, and not an interviewer.
Within just a few days, I was contacted by the recruiter of the team informing me that they would like to invite me to Microsoft HQ in Redmond for a full loop of on-site interviews!
Before Flying Out
I was immediately contacted by a travel specialist and I was expected to give them a window of 3-5 days when I could travel to Redmond. Once the date of the interview loop was fixed (which was a week or two into the future), I was sent a special link to fill out a travel form which let me specify when I wanted to fly in and out of Seattle, if I needed any special accommodations and the form of transportation I would like to use while in Redmond/Seattle (cab, airport shuttle or rental car). I was also asked to sign a NDA. Once I filled that out, I received a booking for my flight and hotel within the next few days, which I had to confirm. I went ahead and did so, and that is it, the scheduling was all done.
My flight was direct and fell exactly within what I had specified in the travel form. I was booked at the Marriott at downtown Redmond for two days and two nights. All-in-all, the scheduling process was very swift, and completely effortless.
The On-Site Loop
My flight was at 12.50 PM on a Sunday, so I left my house at around 10 AM in a cab. I ate some Chinese food at the airport then boarded the plane. The flight was approximately 4 hours, so I decided to make use of that time to do some final brush up. I reviewed all the data structures, common implementations and time complexities. I skimmed through the entire Programming Interviews Exposed book before I landed.
The view of Seattle from the plane was already quite different from what I was used to seeing landing on to Chicago. Instead of the concrete jungle, there were snow-covered mountains, lots and lots of trees, many lakes, as well as the ocean!
Once at the Seattle-Tacoma airport, I took a cab and headed to the Marriott at downtown Redmond. On my way, I had a nice chat with the cab driver about many different topics, from the grunge era in Seattle to the explosion of baby boomers. The Seattle/Redmond area is quite different from Chicagoland. The feel is that of a vacation destination. Redmond seemed pretty residential, and very clean and quiet for my taste. At that point, I was already thinking to myself that I would probably live in Seattle if I got the offer.
The check-in to the hotel was pretty quick — they seemed to have a different process for Microsoft recruits as Microsoft takes care of the complete bill for your stay — dry cleaning, Wi-Fi, food, gym, taxi, and of course, your flights as well — so, everything. I took a shower then called a cab to head out to downtown Seattle to meet with a friend.
I was at Bell town, which if I am correct, is the northern side of downtown Seattle, which has a very San Fransicoesqe vibe — the hilly streets, outdoor dining culture, and the hippie-ness. We strolled through downtown to the Pike Place Market, which is apparently one of the best places to get organic food. The place seemed pretty happening, even taking into account that it was a Sunday evening. There were lots of restaurants and bars, shopping places and even mini-parks integrated into the concrete environment. We eventually strolled back and decided to dine in at a Thai restaurant called Golden Singha. I then boarded cab and headed back to Redmond.
Typically the ride from Redmond-Seattle and vice versa, is 20 minutes. However, both I-90 and 520 (I think) were closed that weekend for some reason. While trying to find alternate routes, the cab got lost and we ended up taking about an hour to get to the hotel. The initial plan was to review some algorithms, but it was already 10.30 PM (12.30 in Chicago time), so I was pretty exhausted. So I just decided to call it a day.
The next morning, I woke up at around 6 AM and reviewed some common algorithms, and even did a few questions on paper (timed) to get the gears moving. After that, I reviewed stuff from my resume, and practiced some behavioral questions out loud. I then ordered a nice breakfast, then took a shower, ironed my shirt and was ready for my 11 AM interview at about 10.15 AM.
Redmond is basically all-Microsoft. From what I heard, their campus has more than 150 buildings. My first interview was at building 50. Since building 4, 5 and 6 were right next to the Marriott, I decided to walk in to one of them and ask for a shuttle to building 50. The shuttle arrived in about 3 minutes and a nice gentleman dropped me off at my destination in about 5 minutes. I walked in, and checked myself in with the receptionist. She informed my recruiter and within minutes, she was out to get me.
This wasn’t much of an interview, but rather a nice conversation about the interviews through the day, my schedule, about Microsoft, so on and so forth. She was super nice and gave me some nice tips for my interviews. Microsoft does a few things differently. Unlike most other companies, you are not given your schedule in advance. And even when you find out about your schedule on the day of your interview, you only know about the first three. Your fourth and fifth on-site interviews will be scheduled on the fly, if and only if you do well on the first three interviews. Also, there isn’t a room where you sit all day being interviewed. Since everyone at Microsoft has their own offices, you actually go with your interviewer to their office to do your interview.
Anyway, this HR interview lasted for about 20 minutes, and at the end, she asked me if I needed any drinks. I asked for a can of Coke so she took me to the kitchen, grabbed a can of Coke then dropped me off to the waiting area where I would be picked up by my interviewer. She wished me good luck and then set off.
Exactly at 11.30 my first interviewer came to the lobby to pick me up. We then walked to her room, which was pretty well-decorated, with pictures and a nice futon, plants etc. We chatted about my resume for a bit, and focused on my recent work experience. Then she asked me a coding question to be done on her whiteboard. I asked a lot of questions as the problem she gave me was pretty vague. Once I had a rough idea, I explained my approach. We talked back and forth about it for a bit after which she was happy. I cooked up the pseudo code pretty quick, verified it worked, then translated it to some Java code. While coding, I realized that I had made some assumptions. I admitted that, followed up with her, and then quickly fixed the issues. She then asked me to write detailed test cases for it, which I went ahead and wrote down, aiming mostly at boundary/edge cases, and maximum code coverage. We also discussed about other possible testing scenarios. She seemed pretty happy, and opened it up for any questions I may have — and I did have a few. We talked about the team, some of their new products, etc.
It was a great start. She asked me to wait for 15 minutes for my next interviewer. Another thing Microsoft does differently is that each interviewer shares their notes and feedback to the next one, so they know what has already been asked, or what to delve deeper into if the need be.
He arrived on time, and mentioned that this would be a lunch interview, although I already knew that from the schedule. He told me that the cafe at building 50 was being renovated, and offered me a choice between the food trucks outside, or the cafe at building 25. I picked Cafe 25. He then offered me a follow-up choice of taking a shuttle or walking. I chose to walk as it is nice to have a conversation while walking. On our way to Cafe 25, we talked about Microsoft, and some behavioral-type things about the company, the position and such. He got some pasta, and I got a nice Rosemary Lamb Burger for lunch, which was paid for by him 🙂 The food was exquisite, but the prices were amazingly low, say around 4 bucks for almost anything. And of course, all drinks are free.
While eating, we talked about some of the skills I had mentioned in my resume, specifically what I like about two different programming languages. We also talked in-depth about some of my past experiences. He then asked me two technical questions which I solved in the notepad that I had brought along. We talked some more about general stuff while walking back to building 50. Once we got back to his office, he looked at his watch and said that since we still had 2 minutes (yes 2 minutes!), he was going to ask me one more coding question. It was pretty simple, and since time was short, he told me to just write the pseudocode, and then quickly test the pseudocode with the tests that would be most important given the short time. I did what came to my mind, and he seemed happy. Although the interview was almost 2 hours, it felt very conversational (even the technical ones), and I was pretty comfortable most of the time.
He then asked me to wait at his room while he grabbed my next interviewer, and obviously to share his feedback as well. While I waited, I looked around his bookshelf to see a couple of nice achievement awards, nicely molded in glass and signed by Bill Gates and Steve Ballmer. I thought it would be a nice thing to have. As he arrived with my next interviewer, I asked him what I needed to do to get that award. He smiled and didn’t say much.
This interview was with the Principal Engineer. I think the employees higher up in the command-chain have nicer offices because his was a corner room with phenomenal views. I commented on the stunning office, and he politely said that he forgets sometimes what a nice room it is, and ends up complaining about having too much light. After the brief chit-chat, we talked for a bit about software quality, then headed straight to the coding question. As he started to explain the question, I realized that I had already done this same problem the past week. So I mentioned it to him. He verified that I in fact knew the solution. Once I explained it, he thanked me for my honesty, then modified the question.
The question wasn’t too hard, but just by the look of it, you could tell that it would have a few loops and conditions that could have a lot of corner cases. So I was on high-alert for bugs. Like always, I cooked up a pseudocode quick, then translated it to Java. I got stuck at a few places as I lost my train of thought while going from pseudocode to actual code. He was very nice and helped me out every time I was stuck. We then tested the code, and talked about some broader test scenarios. Since there was more time left, he modified the problem with a follow-up. I tried a few approaches, and every time I went down the wrong path, he would tell me to think differently. Eventually he nudged me with a few hints to the actual solution, and he seemed as excited as me for me getting to the “aha” moment. It was a great interview, and he played a big part in it being so nice.
At this point, all three of my interviews had gone very well. But this is as far as my interview scheduled went. I knew that there would be two more interviews if I did well. But I was really nervous and hoping that he would not tell me that I am done with my day. Well, he did not send me back. 🙂 He told me to ask any questions I may have, as he walked me to my next interviewer. We talked for a bit, and once again, I was waiting for my next interview in the waiting area.
This interview was a bit different as we started off with any questions I had. We talked for a bit about random stuff, and then he said, “Well since this is Microsoft, let’s do a coding question.” It wasn’t very tricky but he added a constraint to change the references rather than the data, which was my initial approach. That threw me off a bit, but I eventually got somewhat of a working solution. It did have a lot of bugs, which I kind of struggled to solve. But all the while, he was very nice. He gave me hints and pointed me to the right direction. Eventually, I fixed the bug and ran a couple of test cases, and he seemed happy.
He then mentioned to me that I would be having my next interview with the most senior person of the team. But, since he was really busy, I would have to wait an hour. It was already 5 PM, but I was enjoying it a lot! I sat at the waiting area yet again, browsing Facebook and such.
My final interview started at around 6 PM. We talked a bit about him, then my resume and then moved towards the coding question. The question was pretty challenging and I had a very hard time solving it, which got me a bit nervous, and then I ended up making silly mistakes, some pretty embarrassing ones. However, he was quite patient and guided me towards the solution. At the same time, regardless of how hard the problem seemed, and how tired I was, I did not want to give up as all my other interviews had gone really well and I did not want the last one to ruin my hard work. So I soldiered on. Eventually, after struggling a lot, I reached a working solution, then like all other interviews, ran through some test cases and scenarios.
We then talked about some behavioral questions. He was very straight-forward and up to the point. At about 7.30 PM, I was done. He ushered me out, called a shuttle for me, and wished me good luck. After a total of 8 combined interviews, lasting almost 10 hours, I was absolutely exhausted, but happy that I was done.
All I wanted to do at that moment was go back to the Hotel and crash. However, this was my only day to get to see Seattle once again. So I took a quick shower and cabbed it to Seattle. I met up with my friend from the day before, and we went to a fancy Mexican restaurant in downtown Seattle called Cactus. I ate a seafood enchilada with a nice Baja Margarita. We walked around downtown and he gave me a tour of the nice Amazon buildings as he works in Amazon, and I was also interviewing with them.
By the end of it, I could barely open my eyes. I grabbed a cab back to Redmond, and crashed instantly. I woke up early next morning, packed my bags, and then headed to the airport. I realized that I ended up getting to the airport an hour early. So I ate a nice breakfast at Chili’s and reflected on my amazing experience with Microsoft over a few Coronas.
Part of me said the interviews had gone well, but part of me was a bit skeptical due to the final interview. Even if all went well, you can never really be sure because they are looking for so much more than just coding skills — things like teamwork, attitude and culture fit. So I kept my fingers crossed. Although I had my Amazon.com interviews coming up pretty soon, I decided to take a rest on the plane by writing a post about preparing for technical interviews, which you can find here.
In about 3.5 hours, I landed in Chicago. When I turned my phone on, I already had a voicemail from the recruiter stating that she had some updates for me. I called her back even before I got out of the plane. That is when she gave me the good news that Microsoft would be extending me an offer. And that was it — 2 months of hard work, 10s of books, 1000s of pages of practice problems, endless hours of whiteboard practice, 100s of videos and not to mention just loads and loads of coding practice — and it had all paid off, and I could finally take a deep breath, and relax.