Latency Lies: The UX Fail Behind Duplicate Orders open.substack.com
This is one of the least discussed biggest UX design mistakes because it doesn’t look like “bad design.” It looks like a normal loading state. Yet it creates some of the most expensive outcomes: refunds, chargebacks, duplicate tickets, support calls, and churn driven by distrust.
In collections of famous UX fails, the stories that go viral are usually dramatic—confusing rebrands, broken onboarding, or a settings update that locks users out. But a quieter pattern shows up in real-world UX failure examples across ecommerce, SaaS, and fintech: unclear system status plus no recovery path. The user isn’t failing; the product is failing to communicate.
Why this mistake is so persistent in 2026 products
Teams often assume a spinner is sufficient feedback. In practice, spinners answer none of the questions users actually have:- Is the action registered?
- How long will this take?
- Can I safely leave the screen?
- What happens if I press back?
- If something goes wrong, will I be told clearly?
- Buttons that don’t change state If “Pay Now” still looks tappable, the interface is implicitly inviting a second tap. Disabling the button helps, but only when paired with clear text like “Processing payment…” rather than a vague loader.
- Optimistic UI without truthful reconciliation Optimistic updates (showing success before the server confirms) can reduce perceived latency. But if the confirmation fails silently—or the app later “corrects” itself—trust collapses fast. Users will overcompensate with extra taps the next time.
- Background processing with weak visibility Many apps offload processing to background jobs. Fine. The failure is not giving users a durable receipt: a visible transaction history entry, a pending state, and a timestamp. Without that, people keep trying because they can’t verify.
The misconception behind it
A lot of common UX design mistakes come from treating “feedback” as decoration. Modern products need feedback as a contract. It must be specific enough that users can make a safe next decision. If you want a quick way to map this to established principles (and see where teams misapply them), this page is a helpful reference: modern UX laws explained. It’s useful for connecting these latency issues back to ideas like system status visibility and error prevention—without pretending a “law” fixes implementation details.What good looks like (and why it reduces support)
A robust pattern is simple but strict:- The primary action changes immediately (disabled + “Submitting…”).
- The UI shows a named outcome state: Pending, Completed, or Failed—not just “Loading.”
- Users get a durable record (order number, receipt, audit log entry).
- If a repeat action is attempted, the product explains what’s happening (“We’re still processing your last request”) rather than throwing a generic error.