One way intellectual progress stalls is when you are asking the Wrong Questions. Your question is nonsensical, or cuts against the way reality works. Sometimes you can avoid this by learning more about how the world works, which implicitly answers some question you had, but if you want to make real progress you have to develop the skill of Righting a Wrong Question. This is a classic, old-school rationalist idea. The standard examples are asking about determinism, or free will, or consciousness. The standard fix is to go meta. Ask yourself, "Why do I feel like I have free will" or "Why do I think I have consciousness" which is by itself an answerable question. There is some causal path through your cognition that generates that question, and can be investigated. This works great for some ideas, and can help people untangle some self-referential knots they get themselves into, but I find it unsatisfying. Sometimes I want to know the answer to the real question I had, and going meta avoids it, or asks a meaningfully different question instead of answering it. Over time, I've stumbled across another way to right wrong questions that I find myself using more often.
In programming there is the idea of return types — constraining and declaring the type of data structure that a given method or function will return. Having a return type means I can rely on this function not to mess up something else later down the line that requires a particular input. I can more easily interpret what the function is doing (or supposed to do), and can use it more effectively in my program.
I find this a useful metaphor when thinking about how to make progress on a difficult question. It is a different angle than the "go meta" approach; it routes around the self-referential nature of asking why I think some question is answerable and reframes the question to focus more on what shape the answer must take. To ask, "What's the return type of, 'do I have free will?'" is very useful. Suppose I