Use a hybrid state model: acknowledge the operator immediately, but reserve completed language for server-confirmed outcomes.
Show reversible local feedback immediately—selection, queued status, and temporary list changes—while preserving a rollback path. This makes the interface responsive without presenting the external mutation as finished.
Keep external side effects in a pending state until the server confirms them, and attach an idempotency key to every retryable mutation. A retry can then remain visible and auditable without risking a duplicate charge or duplicate workflow run.
If the request fails, restore the previous client snapshot or replace the optimistic state with an explicit error state. Never leave an optimistic success indicator in place after the authoritative request fails.