Compatibility

Summary: The ability of different versions of a system or data format to work together, which is essential for evolvability.

Sources: chapter4

Last updated: 2026-04-15


In distributed systems, it’s often impossible to upgrade all nodes simultaneously. Therefore, different versions of the code (and different versions of the data formats) must coexist. Compatibility ensures the system continues to function during and after these transitions.

Types of Compatibility

  • Backward Compatibility: Newer code can read data that was written by older code. This is usually easier to achieve, as the new code knows about the old format (source: chapter4, p. 112).
  • Forward Compatibility: Older code can read data that was written by newer code. This is more challenging, as the old code must be able to ignore additions made by the new code (source: chapter4, p. 112).

Importance for Evolvability

Compatibility is a prerequisite for evolvability. It allows for rolling upgrades (staged rollouts), where new versions of a service are deployed to a few nodes at a time to check for errors before being rolled out to the entire cluster (source: chapter4).