One of the main problems with any software change, whether it's optimisation (=do the same thing as before, but somehow better, e.g. with lower resource consumption, or with code that's more manageable/understandable/robust/etc), new feature (=do something new or more than before), or bug fix (=make the software do what it promises to do), is that the change may potentially break something. There are automated testing methods and tools that help in this, but if the change is visible in the user interface, there's the additional burden of changing documentation etc. And even if all of this is OK, the change still needs at least one developer hour, which must be approved of by Management (or done without permission). From an organizational perspective, there are many ways to undermine this, and end up making a bad product. In a sense it's a miracle that there are any software products at all.
