Tips for improving software responsiveness

There are a few software responsiveness techniques I pick up from GUI Bloopers 2.0 book, and I think it may be useful for other UI designers/programmers as well as for myself.

The basic principle is responsiveness is different from performance. Performance is about how quickly the software process and display the results, which we usually can achieve with faster hardware, while responsiveness is about how the software provides timely feedback to users on what it's doing and prioritizes the feedbacks based on human perceptual, motor and cognitive deadlines (i.e. providing a progress bar or completion status). Therefore, a software can have high performance, but less responsive, and it can be responsive even it's slow to produce results. Most of times, we see both slow performance and low responsiveness :-(

Here are the tips for making/improving software responsiveness:

Provide timely feedback

  • Acknowledge user input immediately (within 0.1 second)
  • Provide busy or progress indicators (for operations taking > 1 second)
  • Show important information first
  • Fake heavyweight computations until final

Parallel problem solution

  • Delay low priority work until there is time to do it
  • Do some work in advance if possible

Queue optimization

  • Reorder the input task queue for efficiency
  • Flush tasks which are uncertain or may no longer needed

Dynamic time management

  • Monitor event queue, adjust strategy or resources if too far behind
  • Monitor time compliance, decrease quality or quantity to keep up
  • Predict response time, decide how to perform task
  • Predict time compliance, negotiate quality, whether to do task at all