Most users don’t care what’s under the hood. They don’t care about how clean the code is. They don’t care about syntax. They don’t care about modularity. They don’t care about maintainability.
There’s a good argument to do these things, IF it enables you to deliver more value to the customer. But remember, what you, the developer, values isn’t what they value. Updating software takes time and effort, and I always feel a bit cheesed when I update an application, only to find that there were no new tangible features introduced… just refactoring under the hood. If you’re putting users first, refactoring should be a means to an end, not the end itself.
This kind of technical myopia seems to be especially prevalent in open source communities, which often share developer values, instead of user values. The communities that share strong design values are in a better position to win more users.