Although highly responsive applications can differ widely from one
another, they share the following characteristics:
-
They give immediate feedback to users, even when they cannot
fulfill their requests immediately.
-
They handle queued requests as users would expect, discarding
requests that are no longer relevant and reordering requests according
to users' probable priorities.
-
They let users do other work while long operations proceed to
completion— especially operations not requested by users— such as
reclaiming unused memory or other "housekeeping" operations.
-
They provide enough feedback for users to understand what they
are doing, and organize feedback according to users' abilities to
comprehend and react to it.
-
They let users know when processing is in progress.
-
They let users know or estimate how long lengthy operations will
take.
-
They let users set the pace of work, when possible, and they let
users stop requested tasks that have started but not finished.
Highly responsive applications put users in control by quickly
acknowledging each user request, by providing continuous feedback about
progress toward fulfilling each request, and by letting users complete
tasks without unacceptable delays.
Even applications with attractive, intuitive user interfaces can
lack responsiveness. Typically, unresponsive applications have at least
one of the following problems:
-
They provide late feedback— or no feedback— for users'
requests, leaving users wondering what the application has done or is
doing.
-
When performing extended operations, they prevent users from
doing other work or cancelling the extended operation.
-
They fail to display estimates of how long extended operations
will last, forcing users to wait for unpredictable periods.
-
They ignore users' requests while doing unrequested
"housekeeping", forcing users to wait at unpredictable times—
often without feedback.
You can sometimes possible to improve an application's
responsiveness without speeding up the application's code. For tips on
how to make such improvements, see Section 7.3 ― Responding to User Requests.