A question is usually about how to do something to something - ie. the stress is on a verb. It helps to understand what that really means by defining what it is about - ie. the nouns. Defining the nouns is usually pretty straightforward, and often reveals what it is that has made the problem difficult to think about. For me, the nouns are often an input data structure (eg. a grammar + constraints), and an output data structure (eg. another grammar, or a particular function with certain qualities).
I tend towards being anti-functional programming, but I have to admit this is pretty much a declarative, mathematical, functional approach. It even feels functional, in that you end up creating new "variables" for new states (ie. immutable not variable), and although there's an explosion of names, things become very clear to express when you have a convenient and precise name for everything (ie. every noun).