On this page
The core idea
People need to know whether an action was accepted and whether waiting is still useful. Different operations need different feedback. A short lookup may need a simple busy state; a long import may need progress based on actual completed work. Avoid simulated percentages that suggest precision the system does not have.
A practical approach
Step 1
Identify acceptance, processing and completion as separate moments. Disable duplicate submissions only when the control clearly explains the active operation.
Step 2
Use real progress when the total work is known. Otherwise describe the current phase and provide cancellation where it is safe and supported.
Step 3
Define a timeout or delayed-response message. Preserve context so users can recover without guessing whether the operation happened.
Worked example
A document import can report ‘8 of 20 files processed’ because it has a measurable total. A model response usually cannot truthfully claim ‘87% complete’ from elapsed time alone. A phase label such as ‘Preparing the answer’ is more honest.
A mistake to avoid
An endless spinner can conceal a failed request. Conversely, showing success when a job is merely queued can lead people to assume a resource is ready before processing finishes.
Try it yourself
Map one asynchronous action into accepted, working, completed and failed states. Write the visible message and available controls for each, including a response lost after the action completes.
Your implementation checklist
- Queued and completed are distinct.
- Progress reflects real work.
- Long waits have a recovery path.
- Duplicate clicks do not create duplicate effects.
Share or cite this guide
Innovate with Ajay Editorial (2026-10-04). Make Loading Feedback Honest about What Is Happening. https://innovatewithajay.com/blogs/make-loading-feedback-honest
