Some software products have trodden this path of specialisation, with large benefits in cost and quality. Compilers and graphical user interfaces are notable examples. But many more systems and products seem to require ad hoc design because they fall into no established specialised category. Unfortunately, effective decomposition is not easy. Part of the cause is the lack of effective design heuristics or rules to distinguish between good and bad decompositions.
Good designers try to reduce a problem to a structure of previously solved problems.
But this practice is unsystematic and hard to teach. There is no accepted corpus of previously solved problems at the right level of granularity, and no repertoire of widely understood techniques for combining subproblem solutions. We lack adequate techniques both for analysis and for synthesis. A problem frame is a characterisation of a class of small problems, tightly constraining the problem, the solution to be found, and the characteristics and structure of the environment of which the solution must form a part. Tight constraint allows use of a specialised solution method, and also promises to make the difficulty of combining subproblem solutions intellectually more manageable.