Optimistic UI beyond perceived speed
Optimism is a temporary claim the interface makes. Good product engineering defines how that claim can be corrected.
A fast interface should still make pending, confirmed, and rejected states legible. Rollback cannot feel like data silently disappearing.
Optimistic flows work best when mutations have stable client IDs, clear reconciliation rules, and copy that communicates uncertainty without creating anxiety.
I separate a local preview from a confirmed result. If the write fails, the interface should preserve the user's input, explain the failure, and offer a retry. Perceived speed is useful only when the final state is still understandable.