Pages

Wednesday, January 23, 2013

My Microsoft SDET Interview Experience - Part 1

Introduction

Hi there! How are you? My name is Jim. I have been a Software Engineer for almost 7 years, mostly focusing on client-side mobile device development and writing test tools using C++. Today, I would like to share to you my wonderful experience of interviewing with Microsoft. I know that there are already tons of wonderful blogs out there detailing about how their interview experience with Microsoft went. However, I still want to share to you my experience as a way of giving back to the community. These blogs that I have read definitely helped me prepare for the difficult interview ahead (and to a greater extent, to not look stupid and embarrass myself in front of these smart people!) and so I would like to do the same and help others the way other people have helped me. 

Prior to this interview, I would rate myself as mediocre in terms of data structures, algorithms, and whiteboard coding as I almost never had to do or use most of these at work (no thanks to Google and auto complete for spoiling me). In fact, I can still remember freezing in front of a whiteboard, often sweating my armpits out, and finding myself doodling and rambling nonsensically in front of the interviewers when asked to code or design something on the whiteboard during past interviews that I've had (oh the shame!). However, if there is something that I am very proud of, it's that I am an extremely hard worker, I am very passionate about the things that I like to do the most, and I don't give up easily even if the odds are stacked heavily against me. These skills have gotten me past extremely difficult situations throughout my career and so I am hoping that these same traits of mine will also be the difference maker between me going home early and me acing the Microsoft job interview. So having said all of these, I would like to share with you the preparations that I did and how I trained myself from potentially having an extremely disastrous interviews with Microsoft into something that I can say was a very decent, exciting, and fun interviewing experience!


How it all started?

Well, my Microsoft adventure started last year, just 3 weeks before Christmas. I got a message from Kim - a recruiter from Microsoft - via my LinkedIn page and she was asking if I was interested in exploring potential opportunities with Microsoft in Redmond, WA as an SDET for the Windows team. After reading her message, my immediate reaction  was.."Windows.. WINDOWS!! Holy Cow!". I felt very excited.. and nervous at the same time. I mean we are talking about "The" Windows here - Microsoft's biggest and most widely used product!

During that time, I was also slowly starting to look for a new job as I was about to get laid off since our office here at Burnaby was closing down. Now I am very much familiar with how notoriously difficult interviews are in Microsoft that it even has its own Wikipedia page! Plus, I was a little bit reluctant in relocating my family to Washington since I have already grown to love living here in Vancouver. Moreover, I suck at data structures, algorithms, puzzles, and whiteboard coding and my initial thought was that I am only going to be eaten alive by these interviewers. Nevertheless, I told myself that I should give this one a shot - "I have nothing to loose and everything to gain!".. I told myself. "It's Windows that we're talking about here".. I also told myself. Also, my thinking during that time was that this interview will prepare me for the big job hunt ahead of me - and so I kept telling myself "If I can prepare myself well for an interview with Microsoft, then I would be ready for anything!". And besides, even if I don't succeed, I will get a 3-day "vacation" out of it.. That's right, when you have a baby, this counts as a vacation - albeit a stressful one :) And so after a day or two of pep-talking myself, I finally decided to say yes to Kim.


The HR Phone Screen

After sending my affirmative response to Kim's inquiry, she responded immediately and tried to schedule an HR phone screen with me. As it was nearing the holiday season, the scheduling proved to be challenging as I kept missing her calls and the time that I kept proposing to her would not always work with her schedule. Finally, we settled for a time that worked for the both of us. She rang my phone at exactly 11 AM and our conversation began. I was excited as this was my first time interviewing with Microsoft. She asked me a couple of questions about my work experience and if I had experience in using C++, C#, COM, Web Services, and Testing User Interfaces. I answered promptly that I did not have any experience with C#, Web Services, and COM  but that I was good with C++ and I have a lot of experience in writing automated tests. She also asked if I was willing to relocate to Washington if an offer was made and I said that it was an option that I am willing to look into if the offer is right. After that, she explained what the role was all about. She also emphasized clearly that this role requires a very strong programming experience because in Microsoft, SDETs are treated as first class citizens and that they are also 100% developers, just like their SDE counterparts.

After a few more minutes, we concluded our conversation. She asked me to forward my resume to her as well as to apply for the SDET 2 position on the Microsoft Careers page. She also forwarded me a word document containing some initial screening questions that I needed to answer. She clearly stated that this document will be given to the hiring manager so I should carefully think about what I put in there. I said "Yes, I will try my best to make this look good". She seemed satisfied with our conversation and so we said our goodbyes after talking for around 30 minutes.

After our talk, I immediately forwarded my resume to her and applied for the SDET 2 job at the Microsoft Careers page. A few hours later, I received the word document that Kim promised she would send to me. It mostly contained legal and HR questions like "Why do you want to work for Microsoft", "What are your current compensation and benefits?", and the likes of that. I tried my best to fill up the form and then I forwarded it to Kim as soon as I can.

A few minutes later, I got back a call from her saying that the Hiring Manager already wants to speak to me after seeing my resume. I was ecstatic and surprised at the same time! Something in my resume must have caught his attention. Kim congratulated me in securing a Tech Phone Screen. She mentioned that she will be scheduling a 1 hour interview right away and that I should be patient as it is the holiday season so I should be expecting a little bit of friction with regards to arranging a proper schedule. I said okay and then we concluded our short talk.


The Dilemma

After some initial hiccups with the scheduling, Kim was able to setup me up with a Tech Phone screen interview with Rajeev, a Sr. Test Lead at Microsoft. After receiving the name of my interviewer, I did what a "normal" and "curious" interviewee would do - I Googled (or cyber-stalked :)) Rajeev. What I saw impressed me. This guy had done lots of very cool stuff in just a short amount of time. "Damn.. I have to start preparing.. as in right now!" ..was what I said to myself after realizing the predicament that I have just put myself into. Without thinking much about it, my initial, knee-jerk reaction was to cramp as much CS stuff into my brain as I humanly can.. and do that within 4 days! Later, I would find out the hard way that this was not the best approach at all - but more on that later. And so I went through as many elementary data structures as I can possibly fit into my small brain - Array, Stack, Queue, Binary Tree, Graph, Trie, and Linked List. I also went through well-known algorithms that I can understand like sorting algorithms (Merge and Bubble), tree traversal mechanisms (Pre, Post, and In-Order) as well as how to do BFS and DFS. I also visited sites like Career Cup and Glass Door to do some research what kind of questions Microsoft interviewers normally ask during Tech Phone Screens. I also rigorously restrained myself into coding in a notebook in order to prepare for those dreaded whiteboard (or online notepad) coding questions that these interviewers normally ask their interviewees to do.

Naturally, I burned myself just 2 days into my preparation for the Tech Screen. I was so overwhelmed with the amount of information that I had to go through within that short amount of time. Moreover, the interview questions that most interviewees received from their interviewers - as documented in Career Cup and Glass Door - scared the living hell out of me. At that time, I would not know how the hell would I deal with answering questions like finding if a tree is a subtree of another tree, those problems involving maximum sum of contiguous numbers in an array, and many other questions that I have never seen in my entire life. In my mind at that time, all I can think of was how the hell can I come up with an "elegant" solution in front of an interviewer under time pressure and of course, if faced with a problem that I have never encountered before. I did not have the answer to that question at that moment and so I proceeded with my naive approach of "brute-forcing" and even memorizing my way through all of the questions that I can humanly process.


The Tech Phone Screen

And so after 4 days of rigorous preparation, the day when I have to do a Tech Phone Screen with Rajeev has finally arrived. "Was I ready?", "Did I do enough to prepare for this interview?", "Am I just going to embarrass myself in front of this really smart guy?" Those were the questions that went circling around my head as I awaited for Rajeev's call. And so 15 minutes before the interview, I went to an empty meeting room in our office and locked the door. I had my programming practice notebook placed in front of me with a black pen for writing down notes and there, I took deep breaths in order to relax myself. Exactly around 2:00 PM, my phone start ringing - and it was from Washington. "This is it", I told myself. I answered the phone and it was Rajeev, the Sr. Test Lead from Microsoft.

Just a few minutes after we started talking, my nerves calmed down a bit. "Wow, this guy is very polite" - I thought to myself. I've always hated phone interviews because I've always had a hard time understanding what the other guy is saying at the other end of the line - especially when the line is very choppy. Moreover, I don't see their facial reactions and so it is hard to tell whether they liked my answers or not. Nevertheless, Rajeev was very accommodating with my relentless requests to repeat his question most of the time.

What went on with the phone conversation was a discussion about my experience at Nokia, one project after another. He was particularly interested in my background as a test engineer and how I developed automated tests for the products that I was involved in. He asked me about how I approached UI testing as well as how do I ensure that the test code that I wrote will not break as much if heavy changes in the UI were made. Rajeev also drilled down into my approach on how do I ensure that a code, module, and a system can be made testable and of course, how do I work with the developers in making sure that the code and the ultimately, the product that they develop is testable. For most of the answers that I had given to him, he would simply say, "I see..".

Around the 30 minute mark and after some more questions, he seemed to be satisfied with all the answers that I have given to him. At this point, I was still waiting for the dreaded coding or perhaps a notoriously ambiguous puzzle question but then, he said that was all that he had for this interview. "What's this?" I silently asked in my mind - "Was I not worthy of at least a string reversal question?" "Did I screw this interview up? It had only been 30 minutes - this was supposed to be 1 hour.." I thought to myself. He asked me if I had further questions about him or about the organization - to which I responded "So how do you test something as big as Windows?". Rajeev chuckled a bit and he said that 1 hour was not enough to answer this so he gave me a brief answer that revolved mostly with the proper collaboration of People, Processes, and Tools.

That was all the question that I had during that time and so we said our Thank Yous' and Goodbyes' after 40 minutes of talking. After the call, I was a little bit uncertain about the result of the interview given the expectations that I had set for myself for the Tech Screen and so I sent a mail to Kim immediately noting that the interview was finished and that I thought it was shorter than I expected. A few hours later, she replied back saying that the interview went really well according to Rajeev but since the hiring manager is already away for the holiday season, they will be figuring out the next step once he comes back next year. I was so happy to hear that and after the call, I did my celebratory jump and a fist pump :) Sure, there were still a lot of things that I needed to figure out for the next round of interviews but right now, I felt that I needed to do a little celebration for the small victory that I had just achieved and so I aptly rewarded myself by watching "The Hobbit".. in 3D at the theater close to where I live :)


The Calm Before The Storm

I had just lost my job at Nokia due to layoffs during this time and so I decided to relax a little to recover from that experience and focus more on my family and our new born baby boy. Besides, the holiday season was coming fast and some relatives are coming to visit our 4 month old baby - what can be better than that!

During this time, I was definitely glad that I took a break out of this interviewing mode. I shifted all of my focus into my family and there, we had a very enjoyable Christmas and New Year. I had completely forgotten about the dreaded Microsoft interview during this time and I'm glad because I had a stress-free holiday with my family and loved ones :)

I was hoping that this relaxation mode would last for a few more weeks more but I was in for a reality slap. A week after January, Chelsea, from Microsoft staffing, sent me an email telling me that they want to fly me over to Bellevue, Washington (aka the Mothership) for their infamous back to back to back (and if you are lucky, to back to back) interviews with the hiring group. As it turns out, the more they like you, the more interviews you'll get! I've also read that some even got as many as 7! As excited as I was at that point, I knew what this message really meant to me - that I needed to face my algorithm, data structure, and coding problems again and this time, I'd better make sure that I do it right. After reading this email, I immediately knew that I had to snap out of my holiday slump as soon as possible and get into shape as soon as I can as this will be a very hard battle that I need to prepare.. the hard way. 

And so with a strong sense of urgency, I started to gather myself up to prepare for battle. I provided Chelsea and her staffing team with all of the documents that they needed in order to setup my travel to Bellevue. They needed a copy of my passport as well as copies of my transcript of records. They also asked me to digitally sign an NDA form in order to prevent me from leaking out sensitive information that the hiring committee will potentially be disclosing with me during my interviews with them. After I have done all the required paper works, they finally confirmed my interview date and issued me an e-ticket for my flight between YVR -> SEA. They also booked me a hotel room for 2 nights at Courtyard Marriot in Bellevue. I had 6 days to prepare for the next round which is not that long considering the amount of things that I still needed to go through. And so, I had to come up with a "battle plan" and dig deeper into myself in order to find out a way on how the hell can I survive Microsoft's notoriously hard interview.


Dilemma No More

Before I went out for the holiday, I had this big problem of how to solve programming problems on the whiteboard that I have never seen before without having to overload my brain into memorizing all possible questions and solutions scattered all across the internet. Well, I started out Day 1 doing exactly just that again (toink!). I can still remember that after that day was over, I almost did not want to go to the interview anymore. I told my wife that I would just be making a fool of myself and that I would just be wasting my interviewer's time by coming in unprepared. She tried to talk me out of it and well, I said that okay, I will try again tomorrow.

And so the morning after that, I started to think about the adjustments that I needed to make because I know now (I had to learn the the hard way) that overloading my brain with all the CS stuff that that I can search on the web was not the right way to go. Also, I noticed that after I finished my preparation for my first round of the interview, I would always feel tired during the evenings which led me to getting burned out a lot quicker. Clearly, something had to be done to fix that as well. This required a lot of thinking and soul searching and finally, at the end of the Day 2, I had discovered what I had to do. I'm pretty sure these things have been said before by a lot by the people across the blogsphere but they really are just sentences made out of words until you realize what the problem really is and then all of a sudden, you get a deeper understanding of what that those sentences really mean to you. 

Suddenly, everything was bright again. No longer did I feel that I am incapable of surviving Microsoft's second round of interview. I now feel more confident about my skills, knowing that I have a good battle plan that I can rely on. I just need to practice it to perfection!  Simply put, my "battle plan" was simple:

1. Understand the problem. Don't start writing any code until you know what you have to do. Write a step-by-step outline of what you need to do if you were to solve the problem by hand and write some use cases to validate it. This is very important and I cannot stress this enough. This will probably spell the difference between being able to figure out the solution to a problem that you have never seen before problem and just going in circles while you write your code on the whiteboard.

2. Stick to the fundamentals and make absolutely sure you know them from the inside and out. I focused mainly on Array, Linked List, Queue, Stack, and Binary Tree. Know how to implement them by hand and then repeat again in order to have a good grasp of how they work.

3. Practice coding on the paper. This is the only way that you'll be able to write a good code on the whiteboard. The good thing is that you don't have to memorize the entire STL library too. You just need to learn the fundamentals and learn them good (e.g. Pointers, References, Arrays, Passing Arrays to function, etc.). If you need a hashmap that uses int to to store the key and the value, just say to your interviewer that you have a hashmap that looks like this: HashMap - no need to fuzz over the exact syntax as it is defined in the STL specification.

4. Examplify. In order to gain an understanding of how to solve a problem that you have never seen before, use simple examples. Eventually, once you have worked out a couple of these simple examples against the problem that you are trying to solve, a pattern will eventually emerge and you'll be able to work from there and do Step #1.

5. When you write your solution, prioritize a working solution over an optimized solution. Most of the time, optimized solutions require much more thought and the path to it is usually not that straightforward. A working solution is easier to derive given the amount of time that you have to code and it is a lot easier to discover how to create an optimal solution if you know what causes a non-optimal scenario in the first place and you usually discover this when you prioritize writing a working solution first. As with the real world, it does not need to be perfect at the beginning.

6. Practice makes perfect. It is through practice that you gain confidence to solve more difficult problems. Don't try the same mistake that I did by memorizing solutions to problems - it will do you no good. Instead, try to work out simple problems first. Do not look at the solution until you have solved the problem yourself. It is by going through this pain that you get to grow and understand how to properly solve problems. Eventually, your intuition will just kick in and you'll be able to recognize patterns that will help you solve harder problems.

7. Exercise. I know, who has time for this right? Well doing all of these things not only require mental toughness but also physical toughness! If you are going to do these all day, you'd better have a strong body to support it as well! I find exercising extremely helpful in releasing stress especially when you are at a point where you are completely stuck at a problem. Also, it gives you a break from all of the things that you have been doing so that you can come back to it with a fresh mind.

8. Family. If you are at a complete breaking point or at your absolute low, don't give up. Remember that no matter what, your family is there to support you. In fact, they are probably the only ones who will root for you regardless of how hopeless the scenario is. So remember to draw strength from them too.

So there you go. These are what made me realize that "Hey, perhaps I really do have a chance at passing Microsoft's interview after all!". Of course, this literally took days of hard work - I would take care of the baby in the morning and then in the afternoon until evening, I will run over my coding exercises in my notebook. After that, I made sure that I would go to the gym to de-stress myself and maybe spend some time in the sauna to reflect about the things that I have learned. And then after that, I'd do more coding usually until midnight or until I am satisfied with my progress. 

Well this has been a very long post. If you have made it this far, I thank you for reading it :) I will probably write another post detailing my Second Round of interviews at Microsoft so as not to make this post any more longer than it needs to :) But until then, good luck and I hope that this post will help you as it had helped me.

Click this link to see Part 2 of my SDET Interview Experience with Microsoft

1 comment:

  1. Thanks Jim! This is the most detailed Microsoft interview process blog post I've read so far. Going for my on-site interview this weekend. This definitely gave me a glimpse of what to expect and did calm my nerves a bit. And btw, your link to your part 2 interview in your part 1 blog post leads to an invalid page.

    ReplyDelete