Gretchen and Zoe and Heather have been blogging about the process Microsoft uses for recruiting and hiring. Once you’ve made it past the recruiter gauntlet, but before you go through the formal interview loop, my team puts the candidate through a technical screening.
The recruiter will usually dig into your background in an effort to weed out people whose technical skills aren’t strong enough to make it worthwhile for us to spend our time talking with you (if you can’t code, then sorry, but you don’t have a place on our team), but just because you pass muster with the recruiter doesn’t mean you have what it takes to survive here. We use the technical screening to give your technical skills a thorough beating.
And beat on you I do. My typical screening goes something like this:
- Typical “Hi, how are you, would you like something to drink” getting-to-know-you chit-chat. This is a blatant attempt to make you comfortable while I prepare my attack. <g/>
- Design/coding question. I use a real-life task I had some time back. It’s not especially hard, but it’s not easy either. As is often the case when coding, there is no one single right answer.The straightforward answer is a procedure or two. There’s also another solution that is ever so much better. This is the second most important part of the screening. I’m looking at such things as:
- How do you approach the problem? Do you ask a bunch of questions and then code non-stop, or query and code in a continuous intermix, or code without any further investigation into the problem, or…?
- How do you write code, and what kind of code do you write? Do you start with pseudocode, dive right into your language of choice, or some mixture thereof?
- What language do you decide to use? How facile do you appear to be with it?
- Do you start at the beginning and work straight through to the end, start at the beginning and take various detours on your way to the end, start at the finish and move backwards to the start, start at a random point and work out from there?
- Do you think about topics like security and internationalization?
- Do you follow accepted coding standards for the language you are choosing? Coding in a .Net language and not following the .Net Design Guidelines (http://msdn.microsoft.com/library/en-us/cpgenref/html/cpconnetframeworkdesignguidelines.asp) is a major black mark against you.
- How do you debug your code?
- Whenever you decide you’ve finished: Tell me how you would test the code you just wrote. Bonus points for talking about this without prompting from me — especially if you tested your code as you wrote it.
- OO design question. There are several obvious answers that are also wrong, and a somewhat-less-obvious answer that is what I’m looking for. However, there is another answer that would make me very happy.
- What programming language do you know best? What programming language do you like best? Why? Compare contrast both against C# (or C++, or VB, depending on your answers).
- What are your technical strengths?
- What are your technical weaknesses?
- Define the tester mentality.
- What would be your optimum mix between manual testing, writing test automation, and writing test frameworks?
- How do you test your own code?
Not the easiest hour you’ll ever have, eh? Those last few questions may seem somewhat out of place. Others will drill into your testing skills in much more details, certainly. However, I’m not only evaluating your technical skills — I’m also evaluating how you will fit in with my team. Understanding what you think testing is all about helps me do that.
I said earlier that the design/coding question is the second most important part of the screening. The most important part isn’t a particular question but rather your overall attitude. I’m looking for passion: passion for testing, passion for design and coding, passion for the customer — passion. Why do you want to be a tester? What side coding projects do you have going? Curt over at The Occupational Adventure (sm) has helped me realize how important passion is and how much more productive someone who is passionate about a topic will be than someone who is just doing their job.
If you’re a stellar tester or designer or coder but don’t have passion for the work my team is doing, you don’t have a chance of joining my team. If, on the other hand, you demonstrate abundant passion in areas where we are working, but your testing or designing or coding skills aren’t quite up to par, you have a good chance. We’ll help you grow your skills if you have the passion to make doing so worthwhile.
And if you a stellar tester and designer and coder, *plus* you have immense passion for the areas we’re in, well — email me right away! <g/>
*** Comments, questions, feedback? Or just want a fun job on a great team? </g> Send two coding samples and an explanation of why you chose them, and of course your resume, to me at michhu at microsoft dot com. I need testers, and my team needs a data binding developer, program managers, and a product manager. Great coding skills required for all positions.