I've spent more time than I would like to admit on various Q&A sites and forums related to development, where I have answered thousands of questions. Generally, the questions stay within the confines of such forums, however after waking up to my personal inbox being flooded with a string of questions I thought I would take some time to blog about it.

These e-mails and messages generally come from folks that I have never interacted with before, but they simply know that I "answer questions or solve problems". They generally look something like this :

I posted at link {here}. Can you fix?

hi, pls help here now {link}.

I have an important homework assignment due this afternoon at 5PM and it isn't working. Can you download it from here {dropbox-link} and get it working by then?

These are actual complete e-mails that I have received.

I don't have a problem with people asking for help, that's why I participate in such communities, my problem is that there are a lot of wrong ways to ask for help, specifically bad questions.

This post is going to cover a few of the reasons why such direct queries go unanswered, how to go about getting your question answered, and introducing a few steps that you should take before asking a potentially bad question.

Getting your question answered

There are a lot of unanswered questions out there across various forums and sites like Stack Overflow, and the primary reason: most of them are just plain bad questions.

If you want to go about asking a question, consider reviewing over the following checklist to hopefully reduce this risk of your question joining the unanswered ether:

Have you Googled it? Seriously. Just copy-paste your exact error message and spend a few minutes browsing through the results. This will resolve 90%+ of all issues that you encounter.

Okay, Google didn't help. What's next? I don't believe you. Search a bit more, try varying some of the search terms and removing anything specific to your exact scenario (i.e. project name, etc.).

Consider asking a colleague? If you work with a team of others, consider asking them for help. Two heads are often better than one at troubleshooting an issue, and it's usually much easier being able to sit side-by-side with someone as opposed to answering over the web.

No colleague? What about a duck? I know this might sound stupid, but often the use of Rubber duck debugging and help you come to conclusions or resolve your issues. Simply try verbalizing your exact issue to someone or something and see if anything clicks. I know it sounds stupid, but you'd be surprised how effective it can be.

Consider checking in "niche" locations . If applicable, consider checking out the GitHub repository for your specific issue or question. Or using the search feature in some niche forums or sites (i.e. "sending an e-mail in MVC" in the ASP.NET Forums). These sites may not be indexed as well, as thus harder to find in search engine results.

Still nothing. What do I do? If you are still out of luck, then it's probably time to ask a question somewhere.

It's still extremely likely that your issue has already been answered before, but the process of formulating a good question can be a great way to figure out your answer (often without even getting around to asking the question).

Asking the (right) question

Alright, so you've scoured the web. You've performed countless searches on every combination of search terms and synonyms imaginable, and still nothing.

It may be time to ask a question. Let's consider a few things that you should be mindful of when doing this:

The title is everything. A descriptive and meaningful title to your question is extremely important. The title needs to convey the core issue (i.e. Null Reference Exception in ASP.NET Telerik GridView when Paging) as opposed to "Help! GridView not working"). If your title is descriptive enough, people will read it, and if enough people read it, you'll be much more likely to get an answer.

Don't cast too wide of a net. You don't need to describe your entire application and its overall purpose. Keep things simple and focus only a single issue or use-case with your question. The more focused that you can be, the higher the likelihood that you'll get results.

Be specific. As mentioned in the title, be as specific as you can. Don't just state that something "doesn't work". Indicate exactly what you are trying to accomplish, what you have tried, and what the behavior you are expecting to achieve is.

... But not too specific. While it is important to include details, don't go overboard. Pasting a huge blob of HTML, CSS, Javascript, SQL, and other code that a user has to risk developing carpal-tunnel to scroll through is going to turn people away. Again - be concise and only include relevant details.

Don't guess with errors. If your particular question involves errors, try to include the exact error message from the system as opposed to "I think it did or said this". Specificity matters, and a compile-time error and a run-time error can be two entirely different animals, so let your potential viewers know what is happening and when it happens.

Is it reproducible? Then reproduce it. If your problem is something that can be easily reproduced, and more importantly shared, then take the time to do so. Either briefly explain the steps necessary to create the issue, or consider using an online code-sharing tool like JSBin or the snippets provided in Stack Overflow to create an example similar to what you are experiencing.

Read it, twice. Before you pull the trigger and press that likely green button to ask your question, read through it. Then, read through it again. If something sounds off or not right, consider rephrasing it. Mostly, focus on determining if it make sense, and keeping in mind that it needs to make sense to a complete stranger.

Done all that and still have a problem? Then ask your question and hope for the best. As people view your issue, you'll quickly discover which areas you did / didn't explain well, just be sure to follow-up with responses and edits as necessary.

Have a few hours gone by as you've sat there constantly refreshing the screen and still nothing? If you have a deadline quickly approaching, you might come to the realization that is the focus of the next paragraph: your problem is not their problem.

Your problem is not my problem

I know that might sound crass, but it's true.

All too often questions and requests are riddled with urgency. An upcoming deadline hours away, a project that is due in a few hours, etc. As much as I would love to help you, there simply isn't enough time in the day. I have my own deadlines, projects, and time outside of the development realm that I value more than anything.

Avoid any terms related to urgency within your questions such as "HELP!", "URGENT", or any other phrases that would match this regular expression: [A-Z!]+ .

As you probably remember from school, procrastination can be a terrible thing, and the same holds true in software. This is why getting a start early can provide ample time to get any major issues that you encounter resolved (either on your own or through an external site).

This is a lesson that everyone needs to learn at some point or another, but being in a hurry will generally not get your issue resolved any faster. Take the necessary amount of time to form a well-understood question and ask it in the appropriate venue, ensuring that there is enough time for folks to see it before you have to actually get the problem resolved.

Be a professional (not an ass)

Deadlines and urgency can create a great deal of stress, anyone that has developed software professionally knows this can be a huge understatement.

Stress is not an excuse to be an ass though. I cannot count the number of times I have seen the poster of an answer simply blasting someone that is trying to help them solve their problem. Shouting "that didn't work" in all-caps, or "that's a stupid answer" isn't going to win you any favors, and it certainly isn't going to lure anyone to stepping in the ring to provide you any more help.

Remember that these folks that are helping you are volunteering to do so. They are spending their own time and effort just to help you get through a tough spot, so keep that in mind before you go caps-lock on them.

Folks are taking their own time to answer your question, for at most a few imaginary internet points, so just keep this in consideration during the entire process.

This can be especially bad when you get a hold of someone's e-mail and decide to stop posting on websites and to start e-mailing folks directly.

Getting (Too) Personal

Let me preface this with saying, I don't mind getting e-mailed when people need help. I'll gladly set aside some time and get back with you if you do so - politely.

The most common e-mails that I receive generally point to an already posted problem on a forum or on Stack Overflow asking for help. And generally once I have visited the link, there's usually already a solution present, so no big deal. If not, I'll take a bit of time and try to help out if I can.

It's the other set of e-mails that aren't as fun to answer, and seldom warrant a response. This is because they don't follow any of the rules I defined earlier on asking questions.

This changes quite a bit when you are reaching out to someone directly. Some things stay the same, but this has its own bullet points :

Again - What have you done? If you haven't shown any inkling of effort to try and answer your question, I don't see why I shouldn't do the same (see "your problem is not my problem" above.

If you haven't shown any inkling of effort to try and answer your question, I don't see why I shouldn't do the same (see "your problem is not my problem" above. Is this the right person? Ensure that the person that you are directly contacting regarding your issue is the proper person that can help you.

Ensure that the person that you are directly contacting regarding your issue is the proper person that can help you. Don't get angry. Running into a problem can be frustrating, trust me, I get it. The problem is when you start deciding to vent by sending me an e-mail as if I am the one that caused it. This is a way to very quickly not get a response.

Running into a problem can be frustrating, trust me, I get it. The problem is when you start deciding to vent by sending me an e-mail as if I am the one that caused it. This is a way to very quickly not get a response. Be patient. Just as with asking a question on a forum, sending an e-mail my way isn't going to cause me to stop everything that I'm doing to answer your question. When I get a chance to look at it, I'll do so - just please don't bombard my e-mail with updates every five minutes.

I don't want to dissuade anyone from reaching out to an individual if you need help, but please, please ensure that you have adequately exhausted your other resources first. The last thing I want to do is see another e-mail as to why "jQuery isn't working".

Summary

I hope this post didn't come off as me just ranting about your questions, nor do I want you to think that this was specifically targeted at any one individual. The post was about just some of the steps that you can take to avoid asking a bad question, which will inevitably lead to bad answers, or more likely, no responses at all.

Being resourceful is one of the most important abilities that you can have as a developer, and if you can find your own answers or solve your own problems, then you'll likely spend more time getting things done than wondering why they aren't working.

If you do encounter a problem that passes the Google test again and again, and a solution continues to elude you, then you should ask a question. Just ensure that you have given it plenty of thought and actually taken the time to make the question worth answering.

And the question better not be "why isn't jQuery working".

CodeProject