Problem Space vs Solution Space
There is a colleague of mine who starts proposing solution as soon as a problem is described to him. This is a natural phenomenon not only for him but also for many others and ‘others’ includes 2 types of people.
- Who knows deep about the architecture; have knowledge of all the flows and algorithm used and can give great insight by putting their suggestions.
- Who starts thinking about the solution as soon as problem is stated and not try to find the actual cause first.
This man belongs to second category and start thinking about the solution without completely understanding the problem, investigating about the root cause, thinking about side-effects of proposed solution (hack in most cases) and thinking of a better way to solve it actually.
The goal of this post is not to bash a person but the process of solving the issue at hand. One, who belongs to the second category above should first think about the actual problem and then start thinking of solving it. A good developer is the one, who doesn’t write more code but the one who writes code to address actual problem.
Debugging is a process, which require a deep digging in to the material you have, finding the root cause and then start thinking about its solution. We can see the actual behavior as shown in following chart.
But actually, these people start thinking to fix the bug ASAP and expand the VIOLET pie to the GREEN rectangle as the goal. Which is the worst thing we can do and can devastate the system. Due to this:
- Hacks come into the picture; rework is being done again and again
- People need to clean up their code; less productivity
- Understanding doesn’t develop
- Every time a problem happens you need to start all over again
In short we can say that one can never convert from category 2 to 1 (as described in the beginning). If you want to lie in the first category, follow above pie chart step by step. If you are not following percentages (approximately) as given, you are not doing in right.
Basically debugging the problem in ‘Problem Space’ is as necessary as fixing the problem in ‘Solution Space’.
PS: I found a very nice example of the side effects of this behavior here.