How do I ask good questions?

How do I ask good questions?

Have you explained your problem in detail to the nearest teddy bear?

Was that explanation coherent, or was it hard to make him understand?

If you can’t formulate your problem – you can’t formulate a question, so the first step is for you to properly identify your problem for yourself. After that, you are ready to ask us your questions.

Give a context – What is obvious to you, may not be obvious to us. We don’t know the whole situation. When we start thinking about your problem, it helps us to understand in what context the question is asked. What platforms, compilers, versions, technologies or techniques are in use?

Give exact details – We need the specifics of the symptoms as they happen. We need the actual error messages and not the approximate versions you think you remember.

If you post a picture, please explain in words what is wrong in the picture.  It might be obvious to you, but we might not understand that we are looking at a problem.

Be prepared to answer questions about your question and try to give good answers to these questions – even if they seem irrelevant to you. Our questions are a result of us trying to understand your problem.

If possible, come prepared with sample code that exhibits the problem (http://stackoverflow.com/help/mcve).

Note: I just jotted this down from the top of my head, so any suggestions for changes or additions are most welcome.