I have an app in development where I must know the last state if it crashes, or if the network fails. I have a regular update to a file of the current state, so that it is always recoverable to within a few seconds of the last action.
I have tried to normalise the data as much as possible. Where there are a set sequence of events, I save the events once, then save the index of the current event every time it moves forward through the sequence. Game config is saved at the start, and any extraordinary events are saved when they happen, or at specific intervals if they occur too often to practically save all changes.