I hate capricious projects that change at the drop of a hat.
I hate projects which are overly complex trying to maintain backwards compatibility.
- Where is the balance?
- When maintaining a project, what should one take into account when deciding to break backwards compatibility or not?
- How much effort should one put into conversion utilities and advance notice?
Followup:
A lot of great answers, thanks! Still, the balance question seems unattended. Some projects might stall because they can't add new features and maintain backwards compatibility, but they don't have the resources to provide a long upgrade cycle (ie, depreciate it for two releases, then make the change) or they may not be able to make utilities to convert.
Some answers intimate that there's an implicit promise between maintainer and user not to break backwards compatibility without providing a relatively easy upgrade path with a lot of notice.
- Is it ever ok to break this promise, or should a project hold off on new features until it has the resources to provide an easy path?