Logo




Subscribe:
RSS 2.0 | Atom 1.0
Categories:

Sign In


[Giagnocavo]Michael::Write()

# Thursday, July 15, 2004
Interviewing at Microsoft

Anyone who knows me knows how much I like Microsoft. That company has repeatedly improved my standard of living. Since I spend too many hours a day using their products, they've made a huge impact on me. Sure, people can make their comments about MS, but the personal computer industry would not be the same had individual hardware makers (IBM) gotten their way (just think about if no one had a common software model to work against). Being a developer just really increases my fondness of Microsoft, since Microsoft loves developers a lot. Visual Studio is an amazing product. So, you can imagine how excited I was to interview for Microsoft.

I had been “hoping” to get an interview there someday, a hope that I really never expected to come true. Thanks to someone, I got my resume submitted via the internal site. Knowing that many hires come from internal referrals, my hope was now increased. My chances were now somewhere less than 1-in-the-length-of-a-whale-in-nanometers. Quite some time passed and I had heard nothing (as expected). Then, one day, out of the blue, I get an email from a recruiter asking if “I'd be interested in an opportunity at Microsoft”. I thought it was a joke at first, but after verifying that person does indeed exist at MS and is indeed a recruiter, wow was all I could think.

Now, let me tell you a bit about myself. Internally, my emotions are held in an signed 16-bit register (ok, it's technically more complex than that, as any 8th-year-neurosurgeon knows, but I'm making a point). Usually that works just fine. Well, not in this case. My excitement levels quickly overflowed and then I calmed down. And then I got excited again, and so on and so forth. This continued to happen over the next few weeks. Perhaps the closest experience was when I installed the first Whidbey alpha, where I promptly hyper-respirated, blacked out and fell out of my chair. At least I had soft carpeting.

Well, I responded to the recuiter, saying that “Yes, I'd be interested.” This was followed by a phone interview, to see what experience I have, what I do [not] well, and so on. I was told that I looked interesting because of my C# background. I also found out that I wasn't found in the internal database, but just by searching on the web. Wow. The recruiter was from HED, the Home Entertainment Division. This includes XBox, Encarta, and so on. I still didn't know what the position was, but I tried to find it on the online site, and thought it might have something to do with an XBox server, since that was the only posting that was geared towards a C# person. I don't have any experience programming games or 3D so this seemed a bit odd. The only info I had was that it was an SDE position involving C#.

I soon got an email from the recruiter with details on the position (it's a new product), and asking when I could meet with the hiring manager. About a week later had an interview with the hiring manager, the person who would be my boss if I was accepted. This was more technical, asking about specific technologies, having me explain some design decisions I'd make, and a technical question. I thought I was doing pretty well up until the technical question. It was a trivial question about linked lists, but it seemed like it took me forever to answer it. I suppose it was only a few minutes, but I sure was sweating. We then talked a little bit about the order of complexity of the solution. At least the asymptotic analysis came quickly to me.

After the question, I figured I had blown it. I thought that surely even a half-year CS student could answer it in 5 seconds (something that I later found not to be to true of many people). I never did much formal education, dropping out after grade 10 or 11. So I haven't learned or memorized any “basic” CS stuff via any normal channels, but instead mainly through experience. The next question confirmed it: “What's your education level?”... “Umm. None. I've just been using computers since I was 3 or 4.” “Ok, I see. Well, the recruiter will follow up with you...” I wasn't going to take that for an answer. I really wanted to know “Was I a total dumbass?” The hiring manager then said that it was not a negative (not having formal education, that is), and that he would like to move forward with me, but that the recruiter needs to handle those details. Ok, so I wasn't being blown off.

Soon I get an email from the recruiter, saying that they'd like to move forward and fly me to Redmond for interviews. Wow. A dream come true. I'm actually going to Redmond. I had only been there once before, for the Global MVP Summit. It was extremely impressive, to say the least. During the next week, we got all the details arranged. Microsoft buys you the airplane ticket, hotel, rental car (although I can't legally drive in the states, ok, well, I can't legally drive anywhere, but at least in Guatemala a few bucks fixes that) or reimburses you for taxis. They also reimburse you for food and other expenses. However, they do not reimburse you for gambling expenses, haircuts, alcohol, or other “personal entertainment”, which includes the pay-per-view porn at hotels. They make this very clear on their website, leading me to wonder how many people tried to pass of a $10,000 bill for a complete makeover, champagne, and a couple of call girls. Their websites handle everything, including making your appointments. Very smooth (it'd have to be, with the number of people they interview).

I had a trip coming up, so it was actually about 3 weeks before I could get out there. I re-read “How to move Mount Fuji”, which was o.k. Some of the answers were wrong (I had read it a year earlier, just for fun) though, and it doesn't cover any technical questions. Nice flight out, easy taxi over to the Marriot Courtyard, which is just a block away from campus. The night I got there, I met up with a friend from MS, and had some Pho'. He was very reassuring, telling me about his interviews, which was quite helpful. I didn't get to sleep until quite late, and I slept quite poorly as well. Due to the time change, I also woke up quite early too. Not a good start. I went down and had a few cups of yogurt, and noticed that my hands were shaking. Quite a few other people were there on Microsoft-related business. Maybe the whole hotel was rented by MS. Who knows.

First off, I had to meet the recruiter. That building was not on campus, and was actually about 4km away. Not being able to calculate the time a taxi traveling at 50km/hr would take to go 4km, I left about an hour an a half before my appointment, promptly arriving 1.3 hours early. Well, better early than late, eh? I nervously paced around the waiting room, perhaps annoying the receptionist who was frantically trying to reschedule a meeting room she overbooked. I think I finally got a bit calmer, somehow. Or maybe I just thought I was calm. Finally, I was entered into the sacred building and sat down in the recruiters office.

He gave me a brief overview of what I was here for, telling me the routine. One piece of advice I was given “Do not bullshit these people. They are very smart, and it will not work. Don't even try. Just be yourself.“ I had 3 interviews scheduled. The second one was a lunch interview. From what I had heard, they give you a few interviews. If you suck, they don't give you any extras, or come up with an excuse like “The next person to interview's kids just got hit by a truck, so he won't be in today. So you can go.” If you don't suck, then you'll get “bonus” interviews. Without much ado, I got on the shuttle and headed over to the (or one of the) Encarta building(s).

My first interview was with a dev lead for Encarta. The entire interview was writing code on the whiteboard. Most of it was writing a string-lookup function, so we dicussed dictionaries, hashtables, and so on, as well explaining some .NET-specific code (since string interning can be used). I think I did alright there. Very friendly and nice person. Right before I left, I had to write a simple C++ function to deal with linked lists, mainly to make sure I knew what pointers are and how they are used. No problem there.

My next interview was with another dev lead for Encarta, this time on the online version. We went to an Indian restaurant, and the food was great. I had never had Indian food at an Indian restaurant before, so that was quite enjoyable. Looking back, perhaps I enjoyed the food too much and maybe shouldn't have eaten, so as to answer more questions. On the way over, I was asked to explain things about garbage collection, disposing and finalization. I was on solid ground there. In fact, that's a question I ask many people I interview. During lunch, we talked about ASP.NET, different kinds of controls, caching strategies for search engines, and so on. When we got back, I had to write some code to do some caching, making it syncronized so that data is never retrieved more than once. I also did a small “reverse a string“ sample in C.

The next interview was finally with someone who was on the new product team. A good portion was spent talking about what the product actually was (since I was still rather in the dark). Then I had to write some code to randomize a deck of cards (in other words, randomize an array order). We had some fun discussions about random output and probability. I did well there too. By that I mean I was correct, and I'm pretty sure he thought the same way too. I say this, because in another discussion with someone else, they pointed out an “optmiziation” to an algorithm when we were leaving (so I didn't get a chance to rebut it) that was based on a false assumption, and was thus wrong, especially in light of the optimizations the JIT engine does.

One troubling thing revealed was that it was not sure that C# was going to be used. Apparently, Microsoft suffers from internal politics like any other company and due to some situations out of this team's control, having the .NET Framework was not a given. I told them this was utter crap, and that the other team should fix their thinking (in fact, I told this team that they should do so during the last beta of their product), and they seemed to agree. But that didn't change the situation that we might have to use C++. I'm not that good with C++. I haven't done much work in it for a while, and the last time I did use it, it was Managed C++. Of course, I'd write in C++ if they wanted me to. I told them that for MS, I'd write in Cobol, Ada, Prolog, or even Brainf*ck. At this point, my hopes went down. There are definately more experienced people for the job if they want a C++ Windows application. Considering that a reason the recuiter called was for a “C# expert“, this was quite a letdown.

However, I did get a bonus interview, to see if I was smart enough to really do a good job C++, or to see if I was just a .NET-groupie. This time, I met with a dev lead on an educational product. She posed quite a few different design questions, asked about order of complexity, different algorithms, explaining dictionary versus hashtable (and what is the “HybridDictionary“ .NET class), and so on. I had to write a search function for a binary tree in C++, which I did alright, except for one syntax mistake at the end (hey, I told them I hadn't used C++ for a while). I think I did well overall, because I got another bonus interview: The End Boss.

The first think the hiring manager asked me when I sat down with him was “How are you doing?“ to which I responded “Well, I'm seeing you, so I guess I'm not doing that bad.“ “Oh, so you know how things work here...“ We dicussed more of the project at hand, talked about my past experience (“What was the hardest non-technical thing you've done?“). Then the technical question. Before I describe this, let me note that I had only slept about 5 hours the night before, and had been up since 6 or 7, and interviewing since 11. It was now 6:30PM. This would throw me off my game any day, but adding the pressure and excitement of being on campus, and well, I wasn't in my top-coding mood by now. I might not have realised it unless he had pointed out that it was late (I was doing o.k. in the last interview). Anyways, up to the whiteboard.

“Find the smallest element in a circular array.” I chucked internally -- damn, this was easy. I instantly knew how to approach it, so set about it. He takes one glance, and “Nope, that doesn't work.“ Red Alert. After a few off-by-one errors, I thought I had it. “Nope, still doesn't work, but you fixed another small issue.“ Panic mode. Hmm, should I open my wallet and take some Xanax? Nah, it was too late. The pressure was already on. I wish I had brought Xanax. “Hmm, that, no, I don't think, nope. Still wrong.” This guy was smart (as was everyone else, but I didn't embarrass myself as much in front of them). I felt like he could see right through my mind, laughing at each weak neuron. He gave me a simple hint, and it was a small, obvious thing, a particular case. Something I would have caught in VS in about 10 seconds. Of course the code didn't work. So I added some checks for the case. “Nope. Still doesn't work.” Fixed a few other issues with the recursion. “Yea, ok, that's more or less it.“ I had lost. Perhaps it worked, but the whiteboard was a mess. “Well, you're tired, it's been a long day, and it's late.“ Then I made the biggest mistake of the day.

“Look, give me another question, so I can prove I'm not a dumbass.“ And another, retardedly easy question he gave me. And at that precise moment, my brain decided to stop functioning. Somehow, 0xF5 got sent to the part of my brain that does coding and thinking. HLT. How simple can it be? “Write a non-recursive function to do inorder traversal of a binary tree.“ Nothing that should take much time at all. But boom. I profusely apologised and promised to email him the code. He said that was ok.

For the next 48 hours (which consisted of sleeping, riding an airplane, and sleeping), I could do nothing but berate myself. I got seriously depressed/annoyed. Not because I blew my chance, but because I felt so utterly stupid. I could handle “We are looking for a different skillset.“ I couldn't handle “You're a bloody idiot. Give us back the hotel fare.“ I finally sat down, spit out the code, make a quick pass at refining it for elegance, and sent it off. At least I had done it. Now all I could do was wait. The recuiter promised to get back to me within a few days.

Well, a few days and nothing, so I pinged him. “They haven't made a decision yet. However, if they don't want you, I'll look for another position for you.“ A week later (which was last week) “Not for that position. They have another opening soon, maybe there. I also am sending your data to two other managers for other positions.“

And that's where I stand. I know these things take time, so maybe I'll get some good news. Looking back on everything, I'm not sure how bad the last interview was. Maybe they were just looking for someone, who, say, knew how to write a Windows app in C++ already. I'm guessing if I totally flubbed it, they'd tell me “You sucked, no thanks.“ From reading The Moon Gals Blog, I know it'll take time. At any rate, I'm feeling great now. Interviewing was more than I had hoped for, so that's pretty cool in and of itself. I'd love to be hired, obviously, but at least the suspense is over.

Misc. Technology | Personal
Thursday, July 15, 2004 3:02:10 PM UTC  #    Comments [6]  |  Trackback Tracked by:
http://www.ogmaciel.com/index.php?p=61 [Pingback]
"http://coppohq.biz/bob-hope-theater.html" (http://coppohq.biz/bob-hope-theater.... [Pingback]


Thursday, July 15, 2004 3:36:38 PM UTC
Very interesting to read. Best of luck, Michael!
Thursday, July 15, 2004 3:58:24 PM UTC
Wow, I'm incredibly happy for you! I really hope you get this. Like you, I've been really hoping for an opportunity at Microsoft. Your experience is what I'd expect, but coming from someone you're rooting for, it's all the more fun.

Keep us posted!
Thursday, July 15, 2004 4:50:11 PM UTC
Good luck and don't give up. WRT the smart interviewers... keep in mind that with frequent interviews a lot of us ask the same questions over and over again. Believe me, every line of code in a requested task has been reviewed and re-thunk in front of us a million times. It becomes just wrote memory to spot the flaws and every person I've given a hire to has made a couple.
Thursday, July 15, 2004 10:08:22 PM UTC
I don't know your specific situation, but from your description it sounds like you must have done well if the recruiter is continuing to send your information to other Hiring Managers. Keep us updated!
Friday, July 16, 2004 1:42:05 PM UTC
Well you did a lot better than I would have. I have often dreamed of working for them too but I choke in interviews. I would have forgotten my mother's name by about the second hour there. I hate interviews. Mostly because I really suck at doing them. Good luck on your next try for any other position they let you know about.
Sunday, July 18, 2004 1:20:08 AM UTC
Congratulations on your interview.

Having been on both sides of the interviewer's desk, I can tell you that the last person you interviewed with wasn't really trying to determine your ability to write code and solve circular array problems. That will have been vetted by the first few interviews. What he wants to know is if you and he have the right chemistry. How do you handle pressure? and do you have the right attitude? Otherwise, he will accept the recommendations from the earlier interviews.

I assume you followed all of the interview ettiquete, such as writing a follow-up thank-you note, etc.

So good luck, and be patient. The bigger the company, the longer it takes to make an offer.
OpenID
Please login with either your OpenID above, or your details below.
Name
E-mail
Home page

Comment (HTML not allowed)  

Enter the code shown (prevents robots):

Live Comment Preview