It can be challenging to understand which kinds of changes to files and databases are compatible and which ones are incompatible. Further complicating things is that there are two different categories of compatibility: backward compatibility and forward compatibility.
A data format is backward compatible with its predecessor if every valid file under the old structure and format is still accessible and readable without error (therefore valid) when accessed and read with the new format.
There are issues with ensuring backward compatibility.
There may be a cost associated with supporting old software. This is considered one of the major drawbacks to ensuring backward compatibility. The associated costs of backward compatibility are further increased if hardware is required to support a legacy data storage system or an application. This makes everything associated with being backward compatible more complex.
One also needs to look forward and consider forward compatibility.
Forward compatibility or upward compatibility is a design characteristic that allows a system to accept input intended for a later version of itself. The concept can be applied to entire systems, data communication protocols, file formats, and application programming languages.
Forward compatibility for the older system usually means backward compatibility for the new system. This means that the new system or format can access and process data from the old system. The new system usually has full compatibility with the older one by being able to both process and generate data in the format of the older system.
If a change is both forward and backward compatible, then it is called fully compatible. This means you can run any combination of readers and writers without breaking anything.
This diagram illustrates backwards and forwards compatibility.
“What counts in making a happy marriage is not so much how compatible you are but how you deal with incompatibility.”