Before modifying data, write the change to a sequential log. If crash occurs mid-operation, replay the log to recover. This converts random writes to sequential writes (faster on spinning disks).
Used everywhere: databases (PostgreSQL WAL), file systems (ext4 journaling), distributed systems (Raft log). The log is the source of truth until changes are checkpointed to main storage.