Sunday, October 11, 2015

How to ask a good question

In any technical job, you will inevitably run into situations where you simply get stuck. You’ve tried to find the next step, but aren’t making any progress. Rather than waste time spinning your wheels, you decide to ask a co-worker for help. However, you don’t want to waste anyone’s time or be the annoying employee that can’t figure out anything on his own. Here are some tips for how to ask a question while still leaving a good impression on your teammates.

Before asking, be able to answer a few questions…

What have you tried so far? Make sure you do some initial investigation on your own before asking for help. You may find that five extra minutes of searching will get you the answer just as fast as asking someone else. When you do need to ask for help, make sure to share what you’ve already tried, so your co-worker doesn’t repeat the same steps.

What information do you have about the problem?Keep track of anything you think might be relevant so you can share it with the person you ask for help. Did the problem start happening right after upgrading a related piece of software? That’s probably worth sharing.

What are the next things you think you should try? It should be pretty rare that you get to the point where you’re truly out of ideas for how to investigate your problem. If your next step is “google the error message,” then you probably haven’t spent enough time investigating on your own. On the other hand, if your next step is “debug the source code of the OS kernel,” you’ve probably waited a bit too long to ask for advice. The trick is to make sure you’ve done your due diligence, but haven’t wasted too much time on a problem that your co-worker might be able to solve in five minutes.

Still stuck? Time to bring in the cavalry…

Start with a wide audience and narrow if necessary.Does your team have a group chat room? That’s a good first place to ask, since many people will see your question and be able to either provide an answer or point you in the right direction.

Don’t interrupt, if possible.If you need to target your question at a specific person, start with an instant message. This lets them respond to you when it’s convenient for them. Dropping by their desk unannounced may break their concentration or take them away from another important task.

Start with a short summary of the problem. There’s always a chance your co-worker has seen this before, so give them enough information to recognize the problem, but there’s no need to give a multi-page summary right off the bat.

Once you've asked...

Be respectful of the person's time. If you're asking about something that might take a while, like building the codebase or running tests, rather than standing at their desk while you wait to see if the fix works, you can collect a series of things to try. Write them down so you don't forget, and then go back and try them on your own. Feel free to send a message to the person who helped you to let them when and how things got resolved.

Pay attention to how the person helping you investigates the problem. What do they do that you didn’t? Sometimes they will just “know” the answer; if this is the case, ask them how you could have figured out the solution on your own. Could documentation be improved for the process? Volunteer to record your findings so others can benefit from your solution.

For coding-related questions, make sure your IDE/keyboard/etc are using standard shortcuts and settings. If the person helping you needs to use your computer, be ready to turn off vim mode and your Dvorak keyboard settings to make it easy for her to navigate and type.

Pay back the favor! If someone else runs into the same problem in the future, help him or her find the answer and share your findings. This is the best way to scale knowledge and improve the skills of your entire company.