An apparatus for synchronizing state between a primary process and a backup process (100 B), comprising: at least one memory configured to maintain a plurality of output buffers associated with a respective plurality of epochs of a synchronization process configured to synchronize state information of the primary process (100 P) with state information of the backup process (100 B); and a processor communicatively connected to the at least one memory, the processor configured to: compute state update information for a current epoch, the state update information representing changes to the state information of the primary process (100 P) since a previous epoch; buffer output messages generated during the current epoch in the output buffer associated with the current epoch; initiate a new epoch independent of receiving, from the backup process (100 B), a state update acknowledgement for the current epoch acknowledging receipt by the backup process (100 B) of the state update information for the current epoch; and release the output messages generated during the current epoch from the output buffer associated with the current epoch based on a determination that the state update acknowledgment for the current epoch has been received from the backup process (100 B); characterized in that the processor is further configured to release the output messages generated during the current epoch from the output buffer associated with the current epoch further based on a determination that output messages of any previous epochs have been released from the respective output buffers associated with the previous epochs. at least one memory configured to maintain a plurality of output buffers associated with a respective plurality of epochs of a synchronization process configured to synchronize state information of the primary process (100 P) with state information of the backup process (100 B); and a processor communicatively connected to the at least one memory, the processor configured to: compute state update information for a current epoch, the state update information representing changes to the state information of the primary process (100 P) since a previous epoch; buffer output messages generated during the current epoch in the output buffer associated with the current epoch; initiate a new epoch independent of receiving, from the backup process (100 B), a state update acknowledgement for the current epoch acknowledging receipt by the backup process (100 B) of the state update information for the current epoch; and release the output messages generated during the current epoch from the output buffer associated with the current epoch based on a determination that the state update acknowledgment for the current epoch has been received from the backup process (100 B); characterized in that the processor is further configured to release the output messages generated during the current epoch from the output buffer associated with the current epoch further based on a determination that output messages of any previous epochs have been released from the respective output buffers associated with the previous epochs. compute state update information for a current epoch, the state update information representing changes to the state information of the primary process (100 P) since a previous epoch; buffer output messages generated during the current epoch in the output buffer associated with the current epoch; initiate a new epoch independent of receiving, from the backup process (100 B), a state update acknowledgement for the current epoch acknowledging receipt by the backup process (100 B) of the state update information for the current epoch; and release the output messages generated during the current epoch from the output buffer associated with the current epoch based on a determination that the state update acknowledgment for the current epoch has been received from the backup process (100 B); characterized in that the processor is further configured to release the output messages generated during the current epoch from the output buffer associated with the current epoch further based on a determination that output messages of any previous epochs have been released from the respective output buffers associated with the previous epochs.