Keep It Simple, Stupid!
That's right, I think we should remember the KISS principle when it comes to our rules.
Essentially, I think this answer says it best but I will elaborate a bit.
I have solved problem X this way and here's my code, but I know there must be a better way! How would you do it?
On-topic. You have solved the problem already, asking for alternative solutions is alright.
It has been stated in the chat room that:
I don't like that we're putting so much weight on the way users are phrasing the plain-English parts of their questions. All other reasons aside, it puts non-native-English-speakers at a significant disadvantage.
I think that sometimes it's just a question of mis-formulation, an OP might say one thing but mean another. For example, when you say "How would you do it?" you might mean the same thing as if you would ask "How could I do it better?"
I think the reason for why someone would ask "How would you do it?" is to find out the answer to "What is the best way of doing it?", which is essentially the same as "How could I have done it better?"
I have solved problem X but it runs slowly, and I suspect that I am not using the right tools and APIs. How do I speed it up?
- Problem X is solved
- There's a performance issue
If you say "I suspect that I am not using the right tools and APIs" that's alright, if we were always sure about what we were doing then there would be no need for this site. As long as you got the thing to work, that's all we ask.
Saying that you are unsure about how you did some things in your code is alright, that's almost like you have a semi-complete self-answer already, looking for if people agree with you on that or not is perfectly alright.
I want to build a library of utilities, this is my current API and protocol. Is it good?
I do believe that reviewing APIs can be on-topic. That said, it can sometimes be too less context to actually review it, and I'm not saying that all API questions are on-topic.
Can a bunch of interfaces be 'working code'? Yes. If you have chosen an interface that you feel is right for you, then you can have it reviewed. I do consider an interface itself to be working code, even if it is not technically executable.
Preferably though, you should implement your API before asking here and get the whole thing reviewed together.
I have this code that solves problem X. I don't know if the design is good, can the design be improved?
Not an example question in this meta-question but it is something we have discussed in chat quite a bit. As long as the code does what the code is supposed to do, reviewing design is perfectly alright.
By the way, when I say "design" I think that "design = how the code does it. Method signatures and interfaces are part of the how the code does its job and not the what the code is supposed to do" (in chat I've used the example of calculating probabilities in Minewsweeper)
I am designing an interface for some code. This is what I have. I want it to be able to support functionality X and Y. Will this interface allow that?
Whether or not the interface will allow that is probably something you should know before you ask the question. This sounds like a low-quality question that is probably off-topic, but it is hard to make a final judgement call on that from a simple two-line example question without any code.
As one of my most common comments say:
Code Review is about improving the cleanliness of existing, working code. Code Review is not the site to ask for help in fixing or changing what your code does. Once the code does what you want, we would love to help you do the same thing in a cleaner way!
That's really the summary of it all. If you have code that does what you want, you're on topic. If you have code that does not do what you want, you're off-topic.
What is 'working code'?
Code that works the way you want it to. Code that produces the results you want.