Quick answer: Unreal SaveGame archive failing to deserialize older save files? Adding a UPROPERTY breaks binary compatibility - implement Serialize override with version handling.
Patch added a new inventory slot count. Players' old saves now load as 'corrupted'.
Override Serialize
void USaveData::Serialize(FArchive& Ar) {
Super::Serialize(Ar);
int32 Version = 3;
Ar << Version;
if (Version >= 3) Ar << NewField;
else NewField = DefaultFor(3);
}Version field lets old saves load with a sensible default for the new property.
Or use FCustomVersion
Engine-level versioning system. Tag your serializer with a GUID; engine handles back-compat lookups.
Validate on every release
Save a 1.0 file. After every release, verify it still loads. The test is cheap; the regression is expensive.
“Save format evolution is forever. Each release inherits the obligation.”
Build a save format migration test suite from day one. Tomorrow's release is easier when yesterday's saves still work.