While working on a solution for a problem, we try to find a solution which works in all conditions or situations. There are egos built-up on which solution is better or solves all the problems. But rarely have I seen a solution which fixes the problem completely with-out any side effects.
What usually happens is we
move the problem (or issue) from one area to other area.
Example :– In database normalisation we improve performance of add/update by normalising but causing read performance issues.
solve one problem at the cost of introducing another problem.
Example :– We introduce redundancy to gain retrieval performance at the cost of multiple updates (due to redundancy).
This shows that problems are not really solved but just moved around or converted to a different problem.
But we still find and use solutions you might say. Yes, we do and we do it by trading off one type of problem to another type of problem.
So the Art of finding a solution to a problem is identifying problems you are willing to live-with and problems you can not compromise on.
In fact, I have found different solutions by just compromising on a dimension of existing solution and to find a new solution.