Recently, I had the opportunity to interview with Microsoft for their Software Engineer in Test position. The purpose of this post is to assist anyone who is about to interview with them, and hopefully provide them with some information that I did not have. First off, Microsoft conducts and very unique, and surprisingly challenging interview. Microsoft has the luxury of choosing just the right person for their job, and it may not have anything to do with their technical ability. I will use my experience as an example, because that is what I am most familiar with, but I don’t what to dwell solely on myself. I applied through my university’s career fair and secured a second interview on campus. After the second interview, Microsoft arranged for me to interview at their Redmond, WA facility. I will gloss over the details of the first two steps because they were pretty straightforward. Throughout the processes the interviewers will ask simple, yet revealing programming questions. On Florida Tech’s campus, I was asked the following question: two strings are given, remove all occurrences or the characters in the second string from the first string. For example: when given ”Interviews are challenging” and “ial” then output should be “nterviews re chenging”. I solved this problem, yet my solution was terribly inefficient. Nonetheless, I was granted a third interview in Washington.
The worst part about the interview was that I had so many different people telling me what it was going to be like that I had no real idea of what to prepare for. I cannot speak for all positions, but I am fairly confident that if you are interviewing for an SDET position you will have a similar experience as mine. First of all, to ease concerns, everything is taken care of. All expenses are refunded, and your trip will be a comfortable one. This is important to know, so that you can relax and focus on the important part, the interview! The interview day starts by meeting an overly outgoing concierge. He or she will try her best to make you feel comfortable. The first “interview” you will have is with you recruiter. This is the only person who truly wants you hired, no matter what. Your recruiter will explain to you what teams you are interviewing with (you will not know ahead of time) and generally what to expect during the day. Be sure to ask your recruiter a lot of questions, they are there to help! Mine was very helpful and suggested some great questions to ask my interviewers. After this, the difficult part of the day begins.
Your recruiter generally will set you up with three teams to interview with. I was only given two. These teams are chosen based off of your interests and your talents. Initially, you will have one interview scheduled with each team. As the day goes on, if a certain team likes you, more interviews will be scheduled with higher ranking members of the team. The more interviews the better. I ended up with five interviews. Each interview is an hour long except the lunch interview, which is an hour and a half. This is where they hit you with the “why do you want to work here?” and “what are your goals?” questions. I warn you, it is one of the most awkward lunches you may ever endure.
Every interviewer will ask you a programming question and you will either solve it on a white board, piece of paper, or a computer, whichever is most comfortable. You can find examples of these question all over the Internet. The questions are simple, but I recommend you practice them ahead of time. As the day wears on you will be pretty tired, and you will forget how to do these programs unless they are engrained in your mind. I was asked the following questions: convert ASCII to integer, find the nth element from the end of a singly linked list, convert integer to ASCII, reverse the order of the words in a string, find all combinations of strings a phone number can make (2 – ABC, 2 – DEF, etc), and finally, write out the queue and de-queue methods for a fixed length queue that is shared between two objects. As you can see, they get progressively more difficult as the day wears on, which means if you don’t practice you will fail towards the end. If anyone wants a quick walk-through of the solutions let me know. The point of the programming questions is to test fundamental computer science skills: mod, div, linked lists, recursions, semaphores, etc. These are important, however solving them is not necessarily the key. Microsoft is more interested in how you think about problems, how you approach them, and how you come up with a solution. Be sure to think out loud when solving the problems. Practice this ahead of time, since if you’re anything like me, you usually program quietly by yourself.
In the end, the same principles apply to this interview as with any other: ask a lot of questions, be interesting and interested, prepare, and get plenty rest. You have the skills for the job, you just need to be able to perform and demonstrate them. I must stress again to ask a lot of questions because you are interviewing with multiple teams, and there is a good chance that you may get an offer from more than one of them. Use the interviews as a chance to understand the teams better so you can make an informed decision. I learned some things about the Terminal Services team I really did not expect, and it scared me a little. If you have any questions, post a comment here and I will reply. Good luck!