Sunday, December 13, 2009

Part 3:: Who I Want To Hire and Work With::Can they solve problems

How does this person think and solve problem?

Problem solving is really what we do on a day to day basis as knowledge workers. Whether we are doing new development, fixing defects, testing there is a problem that needs to be thought about and solved. Sometimes the computer and the tools do not have all the answers. :-) I like the way Andy Hunt said it: "Programming is all about problem solving. It requires creativity, ingenuity, and invention." (Hunt, A: 'Pragmatic Thinking & Learning: Refactor Your Wetware, page 2. The Pragmatic Bookshelf).

It is difficult to determine how a person solves problems in a normal interview. Interviews often take place in 30 minute to 1 hour segments with different people in the organization. How many problems do you have that get solved in that time. Solving is usually a process of thinking about it, discussing it with others, trying some ideas and failing and continuing this process until a satisfactory solution is found.

Here are a couple of ideas to try. The first is if you only have an hour or so for your part of the interview. The second and more beneficial idea is if you can bring the person in for a half or full day to 'inteview' with the whole team.

Given a situation where a common design principle is violated and is causing a problem, can they identify it and solve it?

Start with a class which has a dependency it creates itself and tell the interviewee the class needs to change to handle 1 of n types of this class based on user preference. This is an easy problem obviously. However, the answer to this question will help show the person biases and experience. If the person starts talking about what tool they would use steer them away from this by telling them it is in a different language. Maybe they think it should be done by injecting the class via spring. In this case tell them it is being done in Ruby. It is fine to have them write sudo code if they do not know a specific language you suggest because the point is how they solve it when it is a different situation than they are most familiar with.

The problem with any scenario for a one hour interview is it will either be so simple or so difficult that it is improbable that it will be solved in the limited time. Both cases have limited learning about the capabilities of the interviewee.

If possible I want them to pair with the team.

If you can bring the interviewee in to work with the team for a half or full day this is even better. Some people do not do well in an interview situation. Other people do great in a theoretical discussion but cannot apply the knowledge in a real situation. A full day will give the team a real feel for the persons ability. It will also give the person some time to relax and start thinking (hopefully). Have them pair with multiple people on the team. Let them write code and review code being written. Go to lunch with them. Have a design discussion for a tough issue. Put them in as many situations as possible.

The ability to solve problems is extremely more important than the APIs they know. If you can find someone who can solve problems you will find someone who can find or write an API that fits the situation. If you find someone who knows an API or a language well you are very likely to find someone who solves every problem with what they know, best fit or not. However, you need someone who can learn and is learning what I will try to cover in the next post.

No comments:

Post a Comment