All software has bugs. If you think you are going to write a complicated program without any bugs, you are fooling yourself (or maybe you are lying to yourself). Space ships, medical devices, car accelerators, office applications. Some programs are worse than others but all software has bugs.
After a few releases, there are things that never worked right, things that broke recently and things that just dont make sense anymore. By the time you get to version five or six of your product, you only have one decision to make: Do you aim for perfection or stick with what you know? Given that you already have a list of known problems, do you try to do things the right way now or do you leave things well enough alone?
If you leave it alone, it will stay broken but at least you understand how it is broken and you have already lived with it that way.
If you try to do it the right way, you do so knowing it still wont be perfect (all software has bugs). If you forge ahead with changes, you dont know what those future problems will be so you are taking a risk but at least you tried to make things better. If you are going to have bugs anyway, why not at least try to do the right thing?
How you answer this question says a lot about you as a developer. How your team answers this question says a lot about your company culture.
One set of people want to manage risk. For them, the devil we know is clearly the safer decision because the other path is unknown. What if there are bugs? What if something goes wrong? How bad will it be? Much better to stick with what we know. Someday we can come back and do it right, but not now.
The other set of people want to pursue their vision. For them it is better to die trying than to live with the mediocrity they know. These people are motivated by a vision and the risks always seem small in comparison.
Most companies have both types of people and they are always at odds with each other because of how they feel about risks. Both types of people are intelligent and rational and both paths make sense. Part of the tension is that there is no right answer and once you choose one path you never know what could have happened if you had chosen the other path.
The only constant in this debate is that when it is all said and done, all software has bugs.









