Tidbits on technical interviewing

I have interviewed a lot of candidates for various roles within Microsoft. They range from college graduates to automation testers.
I broadly qualify them under 2 categories:
1) college hires for driver development
2) Automation using powershell
College Hires of Kernel/driver development
For college hires my interview style was to make sure I give them questions which ar not easily available off the internet. For that purpose I always used questions or challenging problems which I was working on at that time. Also, I tried to keep my questions consistent to compare candidates and since I knew the approaches and solutions pretty well.

One question I asked which was typical of what that candidate would be expected to do was to give the candidate a help guide for a particular kernel API and then showed a snippet of code and asked him to figure out what was that doing. For eg: Given the help page for “InterlockedCompareExchange” ass the candidate to figure out what some piece of code was doing. It normally is a good test of understanding of code and kernel concepts.

Some other areas which I would quiz on for kernel/driver development positions:
1) IRQL’s
2) Synchronisation primitives
3) C coding
4) Virtual memory

If the candidate got through my coding question I would give some logic puzzles to keep it interesting. More coding questions sometimes just makes the interview dull.

Categorie 2 – Automation code developemnt
Recently we had a need to hire someone who could help automate some tools. I have realised over time that on of the best skills for automation is not C# but powershell. With the cmdlets support working with powershell makes for really fast development time. It has the caveat of no type safety but is great for smaller projects which need to be developed quickly. The typical thingsin our probelm space were parsing input in .txt, .csv files etc reporting as html output etc
For eg: I saw that for a problem of finding all 3rd party exes under “program Files” folder it takes a person around 2-3 hrs to solve in C# given a developer with 5 yrs of experience. However consistently most candidates solved under 1 hr using powershell.

There are several such examples I came across.

My goals were to wait for the right candidates with a good mix of technical skills (powershell experience of more than 6 months) and good soft skills (self starter, sincere and detail oriented etc). I let the recruiters know to do their own filtering thus reducing the onus on me as the sheer number of candidate resumes I was getting was enormous.
One way i decided to save time was to have a phone screen prior to meeting the candidate face to face. This saved me immense amount of time. My phone screen was to give the candidate an introduction to the position followed by giving him a real world problem to solve using powershell. All problems were the ones that I encountered while trying to automate and i would give the candidate an hour to solve. Some examples:
1) Parsing and reporting question(phone screen):
Given a .txt file parse it and then generate an HTML report with some tables.
2) Simple question – good to give the hiring agency
Given a root path create folders with iteration numbers every time the script runs. For eg:
If the root is c:\test. The first time a script is invoked create C:\test\1\
If the script is invoked a second time, it should recognise that c:\test\1\ exists and create c:\test\2\ and so on.

Things to watch out for:
The code shouldn’t take more than 20 lines of powershell in the worst case
Easily tested by powershell .\.ps1

3) ) In person interview
Find all 3rd part exes (this is not literal but just omitting Windows or Microsoft in the folder or exe name was enouh) under program files etc.
Things to watch out for:
Program files under 64 bit system has 2 folders for program files. Try running the powershell script on your own machine and see if it works and shows the correct output.

I gave the candidates normally an hour and kept the time consistent to compare candidates. Also, the goal was to not only look at their problem solving capabilities but also ability to ask for clarifying questions. If the solution was not well formed I would give feedback and see if the candidate had the inclination to send me an improved solution. This also showered some light on the candidates sincerity to improve and take feedback besides communication.

In the face to face interview I would more whiteboarding and sometimes focus on other soft skills lile being detail oriented and creative . I also woudl ask at least one more member of the team to interview in case the candidate had to work with him and also to get another picture.

Hope this helps as it has helped me tremendously to hire some great candidates. They are worth it as the extra amount of time spent in picking the right candidates pays very rich dividends when it comes to explaing problems and finding solutions.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: