We can think of problem-solving in any domain as having at least a generic structure. There is a problem, which has its own structure that suggests either some gap or some apparent inconsistency. There is a path from problem to solution, which requires certain kinds of activities. And then there is the solution itself, which has its own structure corresponding in some appropriate way with the problem it solves. This gives a way to start sorting out the different kinds of strategies and approaches that can be used to solve problems in general.
Problem-solving is a practical activity and therefore has a means-end structure. The structure of the problem is what we have to start with; from this we get a general idea of the solution, our end, and have to work out together both the means to the solution and the particulars of the solution's structure. So solving a problem requires identifying the features of a problem relevant to solving it and doing so in the right way. This gives us the first family of problem-solving approaches, that of transformation of the problem. Problems have different aspects and they are not always immediately noticeable. So one thing we can do is shift the problem in some way -- either generalize it, or restrict it, or rework it so that it is equivalent but differently expressed.
In recognizing something as a problem we recognize in a very general way what would be required to solve it. This gives us another family of problem-solving approaches based on the desiderata. A problem requires some things of its solution, and there are, in addition, things that are not required but would be beneficial if they could be had. (A problem could in fact be seen as a structure with a set of desiderata.) So one takes this general profile of what a solution would have to involve and develop and transform its structural features in the hope that the path and the details of the solution become more clear.
The first family looked at how the problem itself was structured, the second at how the problem tends toward its solution. But one can also look at how the problem relates to other problems. That is, one can find analogies to other problems -- usually, of course, to other problems that have already been solved. Structurally similar problems are likely to have structurally similar solutions; problems with similar desiderata are likely to have similar solutions. But even if the other problems aren't solved, analogizing to those problems may have a similar effect to transforming the problem itself -- i.e., it may make it easier to determine what in the problem is important to the solution.
When trying to determine the path from problem to solution, one could simply try out the alternatives already available one by one, by ordinary trial and error. Or one could try out alternatives according to one's prior experience by using commonly successful methods, i.e., ways of solving problems that are known to have been useful in other problems, even if those problems were considerably different. The difference between ordinary trial and error and commonly successful methods is analogous to the difference between simple enumeration and more sophisticated forms of induction.
On some occasions there is only a very limited number of possible solutions to begin with, so one works backward from each candidate to find which goes with the problem. This reverse engineering of possible solutions could also be called 'extraordinary trial and error'.
The interesting question, of course, is whether all problem-solving approaches are members of these six families. What do you think?