The best solutions don't come from hacking, but by grasping the problem and it's full scope, the chance raises that you find a solution that can not only be used for the current problem, but also for similar other problems. A good programmer always tries to find similarities and to reuse old solutions in as many other areas as possible, but not more.
Such a behavior also boosts the maintainability of the solution. On the other hand, when it is ignored, a solution quickly can become unmaintainable and the solution that was implemented so "quickly" can become a black hole of man power.
I personally experienced more than one project, where the source code has become in very short time so complex and so bug ridden, that development times literally exploded.