What people see while systems catch up.
WHAT THE PROBLEM IS
A user acts, and the result is not immediately visible everywhere.
WHAT THEY CONCLUDE
That it failed.
WHAT THEY DO
Repeat it.
WHAT THAT CAUSES
Duplicates.
WHAT TO DO ABOUT IT
Show the expected result immediately, marked as in progress.
WHAT THAT REQUIRES
The interface holding a local view of the pending change.
WHAT TO DO WHEN CONFIRMATION ARRIVES
Update the indication quietly.
WHAT TO DO WHEN IT FAILS
Tell them clearly, and offer a way to retry.
WHAT TO NEVER DO
Show success before it is accepted.
WHY
It is a lie the user acts upon.
WHAT TO SHOW FOR LONGER OPERATIONS
Progress, or at least that it is still happening.
WHAT TO PROVIDE
A record they can check later.
WHY
It removes the need to watch.
WHAT TO DISABLE
The action that would duplicate it.
WHAT TO PREVENT SERVER-SIDE REGARDLESS
Duplicates, since the interface cannot be relied upon.
HOW
An idempotency key generated when the form is presented.
WHY AT PRESENTATION
It is then the same across every submission of that form.
WHAT TO TEST
Double submission, deliberately.