Passing a client-generated request ID through all these levels of processing, enabling end-to-end duplicate suppression and idempotence Making messages immutable and allowing derived data to be reprocessed from time to time, which makes it easier to recover from bugs (see “Advantages of immutable events”)