My Interview at Microsoft: Design a Kitchen
Right before I graduated college, I had an interview with Microsoft. The interviewer presented a hypothetical scenario that I will never forget. She said “I would like for you to design me a kitchen.” At the time, I didn’t quite see the relation to software development. Why didn’t she ask me about XML, Java, Unit Testing, and Design Patterns? So I I just started in… “Do you want a counter-island?, Do you want track lighting? Do you want steel or black appliances? What kind of flooring do you want? Do you like tile?” It was clear after I finished that I had failed her test. I’m sure there are some kitchen designers out there who may design a kitchen like this, but they’re doing it wrong.
I’ve been a software consultant for about four years. I just recently reflected upon this question and then I realized what I had messed up. When designing software, you need to think about three specific things.
Problems - What problems are your clients having? What problem are you trying to solve? Identify their pain points. I should have identified what my Microsoft interviewer liked to cook. Does she primarily bake? This would have helped me identify the placement particular appliances. Maybe she would have needed a second oven. Does she like to cook with others? Again, this would have helped with placement. I should have asked what her current kitchen looks like. What problems does she have in this kitchen? What are her favorite dishes to cook? If she likes to cook a lot of Japanese… maybe she would benefit from a Hibachi in the middle of her kitchen. I could go on and on. But you must identify the problems that your clients are having. You must observe these problems. They won’t always be able to articulate their problems.
Why - Why are your customers and clients making these requests? If my Microsoft interviewer requested marble tile instead of wood, I should have asked why. Maybe I would have learned that she lives in a tropical climate with a lot of moisture; tile typically lasts longer. This may have opened up the conversation to discuss more about environment factors and her current kitchen. I designed some software for trucking companies to plan which jobs their trucks should be at. The client mentioned that they would like a projector with the software showing the plan. I asked why. They told me that they wanted everyone in the office to know the plan. I mentioned that it would be possible to network the software and install a copy on everyone’s machine so that anyone could just open the software and see the plan. They were ecstatic. They didn’t think about the possibility.
This teaches us another lesson, customers don’t know what you can provide them. I’m reminded of Henry Ford’s quote: “If I had asked what my customers wanted, they would have requested a faster horse.” This demonstrates that customers and clients aren’t usually forward thinking in the solutions that you can provide. Ford would’ve learned that his customers’ problem was speed. This happens to us quite a bit. We typically get requests for mobile software development, but we don’t get much requests for web apps and desktop apps even though cumulatively, we have more experience in the latter.
Art - You are an artist. Very rarely should you present visible design choices to your clients. Obviously, there are exceptions to this. If I told you to design me a kitchen and you just gave me black appliances instead of stainless steel appliances, I may be a bit miffed. However, in the software world, I think it’s different. Very rarely should you focus on the details of the design with your client. It simply doesn’t matter. Many clients will present an abstract concept by talking about ‘buttons’ and ‘icons’… just ignore those request and figure out what they really need. Deliver art.
Go now and build beautiful software, for you are an engineer, philosopher, and an artist.
You can follow me on Twitter: @jprichardson