Speed Patterns octocat github link burger menu

Optimistic Actions

By Joseph Gannon, Sergey Chernyshev · · Assisted by AI

Some user actions don't need to wait for the server to feel complete. Clipping a coupon, marking a task done, voting on a poll, adding to a wishlist — for actions like these, the user has formed an intent and moved on before the request even leaves the device. Designing the action flow around that fact is what turns a usable feature into one that feels instantaneous.

The Problem

Even fast servers add latency that the user can feel. A 200ms round-trip is invisible on a benchmark and very visible on a coupon-clipping list, where the user is trying to clip ten coupons in five seconds. Each pause between "click" and "clipped" stacks up:

The same shape repeats across every product: bulk-archive in an email client, add-to-cart on a shop, like-button mash on a social feed. The cost isn't a single slow action — it's the accumulated waiting across many fast ones.

Solution

Decide, at design time, that certain user actions should appear to complete instantaneously regardless of the underlying network. The action's visible outcome lands on the next paint after the user's input. The actual work — the request, the response, the persistence — happens behind that outcome, not in front of it.

This is the umbrella pattern; the specific rendering technique that delivers it is Optimistic Rendering.

Which actions are candidates?

An action is a good candidate for this treatment when all of the following are true:

A coupon-clip ticks every box. A "complete checkout" button ticks none of them.

Why This Matters

Google's RAIL model calls out the 100ms mark as the threshold below which an action feels instantaneous. The full 0–1s window is workable with acknowledgment, and beyond that the user disengages. Optimistic actions move the experience squarely under 100ms — not by making the network faster, but by removing the network from the user's experience of the action.

For repetitive workflows, this isn't just a perceived-performance win — it's a throughput win. Users complete the task faster, accumulate less waiting time, and leave the feature with the impression that it works.

Guidelines

Related Patterns

Resources