One of the side tasks I do at Microsoft is interview college students for full-time and intern positions remotely. We do this over LiveMeeting. If you haven’t used LiveMeeting before, it is an application that allows you to allow multiple users worldwide to hear audio and view slide decks. It also allows the users to simultaneously modify a text document or whiteboard.
During the interviews, depending on what I see from a resume, I may ask either a design or coding question. This design area is one that a lot of colleges don’t focus on: how do you design software? I have found that having solid design skills can lead to a solid developer. You must be able to rationalize your thoughts before coding and one of the best ways to do that is to design your solution first.
I mostly ask intern candidates to code while full-time candidates get design questions. I expect that intern candidates may not have had many design projects in college yet. Full-time candidates, more than likely, have had the opportunity to design. Usually this comes from a senior project class. I’ll blog about coding questions in the future.
During the technical portion of the interviews, interviewers often ask a question and leave it vague. We want you to get more clarity on the issue we want you to solve. You should be asking questions to help understand the true problem. There isn’t a magic number of questions to ask. You need to understand the complete problem before trying to solve it.
Here is a sample design question someone could ask: Design an automobile.
Design an automobile? I thought this was supposed to be a technical question? It still is. How would you design an automobile?
There are lots of questions that you could ask about this design question. ASK THEM!
- Why do you want me to design an automobile? There are already plenty of automobiles in the market.
- Who is this automobile for? Know your customer!
- What type of automobile? Hybrid, truck, SUV, electric…
- Where will this be sold? One location may have certain requirements, like the steering wheel needs to be on the right-hand side of the automobile.
- When does this need to be release? There is always a timeline involved that will restrict how you use your resources.
- What is your budget and what resources do you have allocated to you? Money, human resources, space, etc… more constraints.
As you can see, these questions all start with the 5 ‘W’s: who, what, where, when, and why. This is a great way to get answers to a vague design question. However, you have to be the one to ask them. From here, you can come up with a feature list and a potential design for the automobile.
One thing to be ready for is to potentially turn a part of your design into code or your design leading into a coding question. I do this often during interviews to make the coding portion relevant to the design.
How could you make a coding question out of designing an automobile? Just about any automobile has a radio… and a radio has stations that you can program for easy access. How do you design a structure to hold a radio station for the automobile? Can you write the code for it and some helper functions?
We want you to be free thinking and understanding not only how to code… but how do you design great software that is maintainable, reliable, efficient, and reusable. You could add others there, but you start running into tradeoffs. If you see that you need to make a tradeoff, explain it in detail to the interviewer. We want to know what you are thinking and why. The only way for us to know this is if you to tell us. The interviewer may at times ask you to explain yourself or remind you to express your thoughts verbally. Don’t worry when this happens… we just want to understand what you are thinking.