Once you start solving problems in practice, you are probably no longer interested in the simple clean versions of the problem theoreticians think about. For example, instead of trying to find the shortest common superstring, you may be doing phased genome assembly. The problem is no longer unambiguously defined. The constraints and assumptions evolve over time, as the problem space becomes better understood and the nature of the data changes. While algorithmic ideas often transfer from one problem subtype to another, everything needs to be tailored for the specific problem.