Characteristics of Responsive Applications

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.