Quick answer: When saves break after an update, it's because the update changed the save data format, and the new version's loading code can't parse saves written by the old version. The fix is save versioning and migration: tag saves with a format version, and on load, detect old-version saves and migrate (upgrade) them to the current format instead of failing. Always versioning your save format keeps future updates backward-compatible with existing saves.
Saves breaking after an update is a common and painful regression, players who updated suddenly can't load their progress, because the update inadvertently broke save compatibility. It happens whenever a code change alters how save data is structured without accounting for existing saves in the old structure. The fix is a discipline, save versioning and migration, that makes save format changes safe.
Why Updates Break Saves
Saves are serialized game state, and the format of that serialization is tied to your data structures and save code. When an update changes those, adds or removes fields, renames things, restructures data, changes types, the format changes too. Now the new version's loading code expects the new format, but existing saves are in the old format, so loading them fails (a deserialization error) or loads incorrectly. The update broke backward compatibility with old saves without meaning to.
This is especially common when save format changes are an unintended side effect of other work, you changed a data structure for a feature, not realizing it altered the save format and would break existing saves. The signature is unmistakable: saves that loaded fine before the update fail right after it, hitting players who had existing progress.
How to Diagnose It
The pattern is clear, save-load failures appearing immediately after an update, affecting players with saves from the previous version. Version-tagged data confirms it: load failures spike on the new version among players who had old saves. The deserialization error points at where the format diverged (the field or structure that changed). If you know what your update changed in the save-related data, that's where the incompatibility is.
Bugnet tags reports and crashes by build version, so a wave of save-load failures right after an update, concentrated among updating players, immediately signals a save-format regression, the version correlation is the giveaway. This lets you catch it fast (ideally before too many players hit it) and connect it to the update that caused it.
How to Fix It
Implement save versioning and migration. Tag every save with a format version number. On load, check the version: if it's the current format, load normally; if it's an older format, run migration code that upgrades the old data to the current format (filling in new fields with sensible defaults, transforming changed structures) so it loads successfully. This makes old saves loadable on the new version, fixing the break. For the players already broken by the update, this migration recovers their saves.
Going forward, always version your save format and add migration for each format change, so updates stay backward-compatible and never break existing saves again. Test loading old-version saves whenever you change save-related data, before shipping. And keep a backup of saves so a failed migration can fall back. The principle: save format changes are inevitable, but with versioning and migration, they're safe, old saves are upgraded rather than broken. This turns 'updates break saves' from a recurring disaster into a handled, routine concern.
Saves breaking after an update means the format changed and old saves no longer parse. Version your save format and migrate old saves forward, so updates upgrade saves instead of breaking them.