I think the answer is our cargo-culted notion of a ‘user’ that we never go back and question:
• Users use the ‘same’ program.
• Changes to the program go out to ‘all’ users.
• Nobody knows how many users some aspect or feature of a program has. Including the authors!
• Understanding of how people use a program is poor.
• Users can only use programs, not modify them locally. At best they can suggest changes (including code), but the authors control when changes get ‘merged’.
• Programs have to be ‘compatible’ and not break existing users. This creates an implicit incumbency advantage where existing users get to lord it over future users. Even if they’re outnumbered by many orders of magnitude! We forget that potential is always greater than reality.
So even if you as a single user of a programmer have all your needs met, if somebody else has a feature request, and it’s accepted, you face ‘peer pressure’ to incorporate this feature in your local deployment of the program.
Coda or bonus: paying for software doesn’t help much with these questions.
Much of what I do involves questioning this social contract. Unfortunately all existing software is governed with this contract, so solving the social problem seems to involve a technical sub-goal. Or maybe that’s fortunate, since I am better at writing code than solving social problems. Maybe I just feel more useful/effective this way? 🤔