For most software companies the ability to ship new versions of a product that will preserve clients’ data and customizations is a matter of market share. Still, this is often an afterthought and there seems to be little documentation available.
This article is the first of a serie about managing backward compatibility in enterprise applications. This will not be a definitive guide but I will try to spot the common areas where incompatibilities can appear and give guidelines about managing them.
This first post is about the project management side of backward compatibility.
One of the most important thing to remember about backward incompatibility is that it is mostly a matter of process and project management.
In order to find the most accurate way of solving a compatibility issue you need to talk about it because the solution can be driven by technical, business or project considerations. Once a solution is accepted, the reason as to why this as been done that way must be properly advertised (this is of uttermost importance when only documentation is provided) and rolled-out.
As backward compatibility is a project concern it must be:
- Listed in the project risks list
- Considered at the project level
- Optionally considered at the product level (mostly when it has business impacts)
There are three ways to solve backward incompatibilities, they are listed from the most desirable to the one that requires the less developer work:
- Ensure binary compatibility – Work is done at the development’s level.
- Provide migration tools – Work is split between development and services but emphasis is put on development.
- Provide thorough documentation of incompatibilities and ways to overcome them – Work is split between development and services but emphasis is put on services
- Reject or postpone the change – Work is then at the product management level
Like for bugs, backward compatibility cannot be guaranteed at 100{5f676304cfd4ae2259631a2f5a3ea815e87ae216a7b910a3d060a7b08502a4b2}, the best thing a project manager can provide is a good measure of the risk upon it for a given version.
When a new version is released, incompatibilities, those that have not been foreseen or at least documented, must then be treated like any other bug and become part of the maintenance process.
In the following posts I will focus on what can make an application backward incompatible and give some guidelines in order to limit those issues and ensure binary compatibility.
See also Backward Compatibility on Wikipedia.