A spinner confirms that something is moving on the screen. It may not tell the visitor whether the file is uploading, the payment is being checked or the page has become stuck.
Name the work in ordinary language. “Uploading your document” supplies context that a rotating circle cannot. If the system can measure progress reliably, show it; if it cannot, do not invent a percentage that races to 99 and waits indefinitely.
Design the whole wait
- Starting: confirm that the action was received.
- Waiting: explain the current task and preserve the user’s input.
- Finishing: show a clear success state and next step.
- Failing: explain what is known, what was preserved and how to recover.
Longer operations may need a safe cancel option or a way to leave and return. Make those promises only when the application supports them. Closing a dialog should not secretly cancel work if the interface implies it continues.
Make status available beyond the animation
The W3C guidance on status messages addresses programmatic information about waiting, progress, results and errors. A visual change alone may not be announced by assistive technology.
Test with keyboard navigation and a screen reader. Avoid moving focus repeatedly or announcing every tiny percentage update. The message should help people understand progress without overwhelming the task.
Try slow connections and failed requests during review. If the same spinner remains after the request has failed, the interface is concealing information the system already has. If a retry can duplicate an action, the application needs a safe retry design as well as better wording.
A good loading state ends. The visitor should be able to distinguish “still working” from “finished” and “needs attention” without guessing how long a spinning circle is supposed to last.

