The most important skill for a developer to master
Tags: beginners, productivity, codenewbie
Published: 2021-04-07 09:08:07

Life as a developer primarily consists of solving problems. They might be in different sizes and shapes, but it all comes back to solving problems. Even experienced senior engineers will have problems they cannot solve on their own. Don’t worry if you are at the start of your career, and think if you want to be an experienced developer, you need to solve all problems on your own. This blog-post will help you learn the most important developer skill to master, asking good questions.

It might surprise you that in my opinion, this is a more important developer skill than some of the “hard skills” like writing unit tests or knowing your design patterns. This is because solving problems and asking the right questions can be applied to all other areas of your career. In this blog post, I will take you along with the lessons I learned in my career as a developer, and how you can use those lessons to your advantage! Let’s go!

Imagine yourself working on something and you run into a problem. You are not sure how to proceed and you ask one of your co-workers to assist. You formulate your question and send it through Slack, the questions look something like this:

>     "This code does not work, can you help me?" 
~ Me, at the start of my tech career

While I do get some bonus points for asking a question, and not just dumping an error message, these types of questions usually don’t get a lot of response. Another thing that you would like to avoid is explained in [No Hello](https://nohello.net).

![Frustrations of no hello](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7utc00wrw5jsx375r2c2.jpg) - When someone just sends Hello, and does not respond for the next 30 minutes

I noticed that these types of questions don’t get the attention a properly formulated question gets. The reason is that the person who you are asking actually has to put effort into getting all the pieces of the puzzle that is your problem. To not bother developers more than is needed, and to get answers quickly, the most important developer skill to master is to ask the right questions.

If we would try to see this from the perspective of the developer who is trying to help, I immediately have follow-up questions. What does not work? What are you trying to do? What does the error message tell you? What have you tried yourself? Are there any things you can rule out? And many more. 

## Getting the basics right

The first important part of asking a good question is to try to get understand the problem you are having. Don’t worry if you have no idea, that is where the next few steps come into play! Let’s take a look at how you can get a better idea of your problem. If you are lucky they might solve your problem, but at least it will make sure you can ask a better question. That seems like a win-win situation!

 ### Error messages

While it might not look like it at first, error messages are there to help you. Most of the time they will contain some information on what is going on. Do you get an error message you cannot get the length of a property because it is undefined? Try to debug to see why it is empty.

I have to admit, I do get asked questions from time to time that can be answered by replaying back the error message. It is no big deal if it happens occasionally. The ability to properly read an error message and act on it, is a very valuable skill in your developer toolkit. 

### Googling

Knowing how to formulate search queries for your favorite search engine is almost like a superpower for a developer. There are many articles on the internet on how to improve your Googling, here are some quick tips:

* If you get no results that does not mean there are no results, try to change your search queries to get different results. Try some synonyms.
* Instead of searching for your problem, try to formulate your search query to the answer you would like to find.
* Use the filters available. Search for an exact match, or hide results that do not contain a specific word.

Places you would like to look for in the search results are 
Github issues, Stackoverflow questions, or even a blog post from a developer (like this one). Most of the time there will be another developer that has run into an issue as well. Unless you are working with cutting-edge technology you are not the first.

During your searches on the internet, there is a trend to discover. Github issues usually follow templates, Stackoverflow questions get more responses if your question is elaborate. You can use the way these questions are asked to your benefit to formulate your own questions.

### Ruling out things

Following the steps above should give you more clarity on what your problem is. Sometimes you already fixed your problem by now, sometimes you don’t. No need to feel bad. We have all been there!

The goal of this step is to reduce the number of root causes for our problems. This will narrow down your problem, which will eliminate all the things that do not matter.

Maybe your code is in a big class that is depending on a lot of conditions or you did not load a dependency correctly. Comment out some code, maybe even move it to a new file that is just the isolated version of your problem. Sherlock Holmes said it the best, try to eliminate until there is only 1 possibility left.

>     "Once you eliminate the impossible, whatever remains, no matter how improbable, must be the truth." 
~ Sherlock Holmes

### Pinpointing the problem

It all comes together in this last step. By narrowing down your problem in the previous step, means you should only have a few areas left which could be the root cause of your problem.

This is awesome! Instead of having a super generic problem with code that does not work, we were able to narrow it down to a few points. This will make it much easier for a developer who is willing to help us, to pitch in.

![Diving into the problem with the pointers above](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3ohkca6oikvfz6xo7bf2.jpg) - Diving into the problem with the pointers above

## Writing the questions that get answers

By completing the steps above, you should have a clearer picture of your problem. Let’s put all the gathered knowledge together in a question that will get you the answers! The goal of this question is to make it as easy as possible for someone the respond to your question. Include your idea of the problem, what you have tried, which area you think it might be in, and any other things you think might help. An example of a question like this is the quote below.

> "I’m not getting the correct calculating shipping costs in project X. I’ve seem to have narrowed it down to be related to international taxes. Is there anyone that can help me with fetching the right international tax treaties?" ~ Me later in my career

In our original question, I would not be triggered to help, especially if it was posted in a public channel where multiple people can react (shared responsibilities are no responsibilities right?). In this specific case, I know in which area the issue is, and if I am likely to have experience with international taxes, I would likely be able to pitch in. And if I did not, I can at least forward you to someone who might have that experience.

As you can imagine this will help you in solving your problems faster! That is why I find asking good questions to get the right answers, to be the most important developer skill you can master!

## Wrapping it up

In summary of this blog-post, the most important developer skill to learn is to ask the questions that get answers. To properly ask a good question, you need to narrow down your problem, understand what is not working, and formulate a question that is easy to answer for the developers you are asking. Try to be as specific as possible.

If it all plays out a developer will read your question and provide you with your much-needed answers. Don’t forget to thank them! They took time out of their own day to help you! Even if you can’t figure out a solution together they still took time to help you out. Thanks are well appreciated!