Wednesday, 21 December 2011

Landing a Job At Microsoft, Part3: The In-Person Interview, Impress Them!

I know it’s been a while since the first 2 posts, but I’m finally getting around to writing the 3rd part of this series, which I hope is helping you, dear reader, to prepare yourself to get your dream job ;)

So, after writing your rock star resume, and after making a great first impression in your phone interview, you should be asked to do an in-person interview, or rather in-person interviews (as I had 4 of them ;) ). This is what you’ve been working for in the first two steps of the process. An opportunity to tell your story in your own words, to demonstrate your skills, to meet the people involved and to ask any questions YOU have.
In the email I got from Microsoft congratulating me for making it to the last stage of the process, they gave me some useful resources to prepare for my interview. Here’s the list:
Now, these are all good resources, but I’m not writing this post only to list them like this :P Instead, I’m going to give my own story, and how I prepared for my own interviews.

You’ll notice that the resources mentioned above are for both Software Development Engineer (SDE), and Software Development Engineer in Test (SDET). This is because I had to interview for both positions. Big surprise is, I didn’t know much about what’s the job of an SDET until then :P

So, as soon as (well, actually before) I got the email I started working on my preparations. First thing I did was to check out the “job descriptions” (more specifically what they’re looking for in someone who’s interviewing for the positions) for both positions again. Here’s the link.

As you take a look at the lists of “qualifications”, you can see that there are some items that are common for both positions. These include:
  • Excellent programming skills. Experience with object oriented programming languages, preferably C, C++, and/or C#
  • Familiarity with data structures and algorithms

So I started with those two. I’ve already been working on my graduation project using C#, so I didn't have to do much there, but I started reviewing data structures and algorithms and dusting off my C programming skills. At this point, you should be rightfully asking “How did you do that?”. My answer follows.

Studying/Refreshing/Reviewing


The best thing I should have done was to read some of the aforementioned books. Unfortunately I didn’t have any of them, and I couldn’t buy one either; not to mention that there wasn't that much time!. The second best thing I could do was to use my Googling-with-Bing skills to find good refreshment courses on Data Structures and Algorithms. I found what I was looking for in this course from Auckland University. It starts with Programming Strategies and touches on many things including Data Structures, Searching and sorting. I found it quite useful. I hope it would be the same for you. As I was going through the course (quite rapidly, by the way, since I didn’t have much time), I was also trying to implement the stuff I was learning about in C. 2 birds with one stone :D

As I was advancing through the course, and to avoid getting bored with theory, I started testing my skills with real programming interview questions. Googling with Bing again, I stumbled upon this website, which contains A LOT of technical interview questions, including many about Data Structures and Algorithms in C/C++. Solving those problems, even the simplest ones, gave me a taste of confidence which kept me motivated to go on.
This website is also interesting because it contained something else I was looking for, because I knew it could appear in the interviews, which is “brain teasers”, or puzzles. They stimulate your brain and make you come up with innovating solutions to problems you’ve never faced before. Even if you didn’t have puzzles in your in-person interviews (and I didn’t), you should find them useful.

As soon as I finished the course, I got a reminder email about my interviews. It was less than a week! and guess what? I haven’t had read anything about testing yet!! I almost panicked, but thought “what good would that bring? I should just start RIGHT NOW learning about testing, and hope for the best!”. And that was what I did. I found the book “Testing Computer Software” by Cem Kaner, and started reading it as well and as fast as I could (kind of contradictive, I know, but what else could I do? :P). Anyways, the book is good, obviously, and I learned a lot from it, even though I didn’t have much time to go much deep into it.

If you’ve never learned anything about testing, like me, I highly recommend you start right now (maybe with that particular book, or maybe an online resource. Just do it ;) ). Even if you’re not after a job in testing, it can open your horizons on new things and give you a new perspective on how testers are going to try and break your code, and maybe helps you prevent bugs from sneaking on into your code ;)

This was my preparation. Now let’s get to the actual event, shall we?

Scheduling


Let’s start with the interview date. I had mine scheduled for October 5th. My flight was in October 4th’s afternoon from Algeria. 8 hours of flight time (passing by Istanbul), add to that 3 hours of difference in time zones and I was to arrive in Dubai after midnight! I tried to ask for the flight to be rescheduled, but got a negative response (they said that it was the best fit they could find :( ). Imagine my horror when my recruiter said that my interview will be at 8:30 in the morning!! Fortunately though, after replying with a terrified S.O.S, I was told that it was only an innocent mistake and that my interview is for the evening. 1:00 PM to be exact. Not a lot of time, but about enough to rest :)

Arrival


I got to Dubai at about 1 o’clock in the morning, but had to spend more than an hour fixing a problem with my visa, and only got to my room at the hotel after 3:00 AM. Horrified that I won’t get my rest, I couldn’t sleep until after 4 :P. Point is, it’s crucial to have a good night’s sleep before your interview. If you think your flight time is inappropriate, you should speak up to your recruiter. The guys in the recruitment team are there to ensure you have a great interview day. Fortunately for me, I woke up after 6-7 hours of sleep pretty refreshed, and in good shape for the big day :)

Another tip that I appreciated following is to have a nice breakfast. I got up just in time to not miss mine at the hotel. Circumstances made it so that I didn’t have time for lunch afterwards, but even apart from that, having an empty stomach (that could start screaming in the middle of an interview) isn’t a good idea ;)

Dress Code


Dress appropriately to your interview. Some interpret this as “wear a suit and tie”, but I would say “not necessarily”. Well, if they say it IS necessary, then who am I to say NOT, but if they don’t, as if they said “wear comfortably”, or “wear casually”, I would say take advantage of that and go in with what makes you comfortable (if that is “suit and tie”, then by all means ;) ), but just don’t overdo it ;) (shorts and slippers aren’t such a great idea as they might seem at first :p ). I went in dark pants and a light blue shirt. Found out most of the interviewers wore similarly :)

Getting There


I looked for the itinerary I had to take from the hotel to Microsoft’s office in Dubai’s Internet City. Departed 2 hours before my interview’s time, most of which I spent looking around and asking for directions, while under Dubai’s VERY HOT sun, after I got out on the wrong metro station :P Miraculously, I arrived at the office just in time :D. Well, in fact I was 10 minutes early ;)
So, my next tip is: make sure you know your way from your hotel to where you’re going to have your interview. Take into account the traffic and always plan to arrive early, but not too early. If you do arrive too early, however, you shouldn’t go directly to your interview’s location. Go to a cafĂ©, have your breakfast if you didn’t already, and relax.

At my arrival, I met my recruiter along with 4 other interviewees. We introduced ourselves, wore name tags to identify each other and then headed to our first interviews.

We got two interviews with Devs and two with testers. Each interview lasted 45 minutes, and we had 15 minutes of “rest”, to relax and listen to the recruiter tell us how it was to work for Microsoft :)

Finally, the Interviews


The interviews started with the interviewer presenting themselves and talking about what they did at Microsoft. They then would ask some questions about my resume, and some of my experiences.
After that, it was CODING TIME! :D In each interview I had to solve 2 to 3 problems, coding the solution on a whiteboard. Now this was something I didn’t prepare for! I knew I would have to write code, but I haven’t had written much code on a whiteboard before. I suffered from this in my first interview, and I couldn’t finish the problem I was asked to solve. Fortunately, this didn’t get to me, and I kept my cool during the following interviews. In the contrary, I used that experience to develop a strategy to make this work. I would start by asking as many clarifying questions as I could (I thought I’d asked too much, but I got the job, so that wasn’t a problem ;) ), then I would start modeling the problem, and then start coding the solution while discussing it with the interviewer (and still asking questions where necessary). All this time, I would also be thinking out loud and explaining step by step my thought process. I made sure to listen to any hints from the interviewers, and this helped me several times.

I was very blessed to be completely at ease during all this period. I was relaxed, talked freely with my recruiter and interviewers and even had some good laughs with them. This is very important. Remember that “confidence” I talked about earlier in this post, and in the first part of the series? This is where you need it most. They want someone who’s confident in his skills. Someone who’s not afraid to tackle new challenges, and someone who’s not afraid to admit when he doesn’t know something, and who’s willing to learn.

At the end of every interview, I asked the interviewer as many questions as I could. This is an opportunity for you to get to know what it means to work in that particular position or team, and to get a feeling of what makes these people tick, what makes them happy and motivated, and to get an insight into the company’s culture. You should try and go prepared with some questions in hand ;)

And it’s done!


After my last interview, I received a guide to Seattle, and warm goodbyes from my recruiter.

At MS Dubai

A couple of days later, I emailed them my exit stamp (to show that I arrived at my home country), and the following day the big news came. I LANDED A JOB AT MICROSOFT :D

Resources:


This concludes the series. My main purpose for these posts is to help people who intend to endeavor such an adventure. And if YOU don’t intend to, you should ;) because my second purpose is to show that it isn’t impossible for YOU to land your Dream Job at your favorite company ;)
Many people who read the first two posts said they liked them a lot and this is what kept me writing, and I hope you liked this 3rd post as well. I also know many people who are already going through the first stages of this process, and some who started but didn’t make it. For the former I say “Good Luck”, and for the latter I say, well, “Good Luck” as well in your future endeavors, and you should never give up as new opportunities come by every now and then ;)

7 comments:

  1. thank you for a great post, could you please mention some of the coding problems they asked you at the interview?

    thanks again

    ReplyDelete
  2. @heshamwhite: I don't really remember the specific coding problems, but they were of the same sort as those in http://technical-interview.com/default.aspx . I found those very useful myself ;)

    ReplyDelete
  3. I wanted to ask, if I must study datastructures and algorithms in c++ or any other language will be enough?

    because my study is on java? so what do you think?! .. Thanks.

    ReplyDelete
  4. Well, Data structures and Algorithms are general concepts, so if you know them in any language you should be alright. However, you'll find that many books and online resources will teach those concepts using C/C++.
    Hope this helps.

    ReplyDelete
  5. you mean that's no need to learn those concepts in c++ and the interviewers will take care of that right? ..

    ReplyDelete
  6. yeah, for me I did my interviews using C#, and no one asked me about C/C++.
    You should check the job description to see if C/C++ are required though.

    ReplyDelete