A question often raised at /r/learn programming is how to ask questions. I recently replied to this one I’m losing myself guys

Especially this one struck me:

I am asking A LOT everyday, on almost every task I’m doing, it seems kinda frustrating to be in this position and just keep on bothering them with my questions.

I know that feeling! I’ve been there too. In my career I’ve helped a lot of junior developers with their code issues and helped them on their way. The most interesting thing for me as a mentor is how I can explain things and help my student as efficient as possible. Let me tell you how!

A lot of it comes down in how to communicate to each other and how to ask questions with the least cognitive load and strain for both parties.

Asking a question in a nutshell

In a nutshell, the best way to ask for help is the following:

  • Explain what you want to achieve from a functional perspective
  • Explain the solution that you pursue from a technical perspective
  • Explain the problem that you are experiencing in detail
  • Explain and show what didn’t work and what you’ve tried to solve it, make sure that all other distractions are gone when you show it to your colleague
  • Interpret the response and ask for clarity in the right way if necessary

Explain from a functional perspective what you want to achieve

A question I once got was ‘My ingress doesn’t work’. How do I fix it. This is kind of interesting question. Because my resulting questions are: How do you know it doesn’t work, are you sure its the ingresss, how do you know? What exactly doesn’t work? Does it not route traffic, or doesn’t it accept any connections?

If you explain your problem from a functional perspective it allows me to give you perfect advice on the problem that you’re trying to solve. Especially if you’re a beginning developer your approach might be totally wrong to solve something, and the path you pursue might learn you some bad practice. With this information i can guide you towards your solution.

Explain what you did and what didn’t work

Show or explain what you’ve tried before and what the results were. Try to make it easy for the other party to quickly build a context and mental image of the problem. For instance: ‘I’ve tried rerouting traffic from port 80 to 443 and i used this line in my iptables’ or ‘I’ve used docker -p 8080 to expose port 80 but it doesn’t look like its accepting connections on 8080’ because i get connection refused.

Show stack traces or code to clarify your point, try to boil down to issue at hand and remove all parts that do not contribute to your actual problem.

Make it easy for the other to help you

When you show code, make sure its easy for your helper to read and that you’ve cleaned your code paths.

Closed all tabs and windows that are unrelated to your issue. This really helps your helper with the context switch to only concentrate at the issue at hand.

Try to make sure your error is easy show able, and that everything is ready for the helper to reproduce your problem.

Use a pull request if you work remote, or use team viewer in order to let the other control your terminal, code if necessary

Asking too much questions?

That really depends on your helper. If questions are formalized and ready for me to answer I don’t really mind if people ask me questions. I can fairly easily context switch and it doesn’t frustrate me unless i need to keep asking for more clues on what you really want functionally.

When to start asking questions

Its normal to feel lost at your job. You might feel you want to ask questions all day long. Some questions are related to something genuinely not working. Some questions are more questions for affirmations “Am I doing this right? Is this the way to do it? How do I solve X?”

The latter questions can usually be solved by doing expert googling. Or with a super clear briefing for your superior. One big part of programming is actually learning to solve complicated problems yourself and being able to breakdown and isolate issues.

Agree on communication

Your superior can be also new to the game of helping or mentoring. It helps if you communication on how you want the communication to go.

For instance:

  • Agree that you’ll write down your non-blocking questions and ask them at the end of the day
  • Agree that when you’re totally stuck you’ll ask for help but make sure you’ve done it in this format and have things super clear and ready to take on
  • Agree that you let your superior work from 11:00-13:00 undisturbed

As I said, its really personal on what you need in order to make it easy as easy as possible for all parties!

Have fun asking questions!