Take the 2-minute tour ×
User Experience Stack Exchange is a question and answer site for user experience researchers and experts. It's 100% free, no registration required.

Obviously a huge part of a positive UX is a fast, responsive design. The software I work with (Electronic Medical Records) is sometimes used on sub-standard devices (e.g. ancient desktop PCs) or in places with overloaded networks preventing data from appearing quickly.

Outside of having an entertaining 'loading' indicator (e.g. pinwheel of death, hourglass, etc...) are there any good UI/UX strategies to plan for or adapt to a situation where the software is handling sluggishly?

share|improve this question
2  
How bad? 6 seconds? 60 seconds? 600 seconds? (Realizing it varies.) –  peteorpeter Apr 9 '12 at 22:07
    
It definitely depends. I would say it can average ~ 10 seconds but can be up to ~ 60 seconds at times. Luckily our in-house system is about as slow as it gets so we have ample opportunities to experiment with different solutions. –  Andrew Shipe Apr 10 '12 at 13:45
    
What is it that is slow? Computing? Database access? Waiting for server to reply? –  JOG Apr 10 '12 at 14:08
    
@JOG it depends -- sometimes it's pulling a lot of data from a database and other times it is waiting for a server to reply with a small amount of data from somewhere far away. There are a few different situations that cause the slow UI and that's why it has been hard to optimize the software for a single situation. –  Andrew Shipe Apr 11 '12 at 12:45

4 Answers 4

up vote 10 down vote accepted

If at all possible, Asynchronous processes can be wonderful depending on what the slow part is. If you can keep the client-side GUI "live" instead of halting all use of the system between actions, your system can feel much faster and less frustrating.

As an example, I recently constructed a data-driven application which needed a responsive UI but needed to complete a slow (~1 second) update process before it the data could be operated on.

However the client side controls didn't really depend on the data; what I did was present the fully working client side GUI while the background process runs. This allows the user to start using the system to construct their query before the query can actually be performed; most of the time the users can't start their query before the background task even finishes; it's instant! In the other cases, the users simply have to wait until the background process finishes.

The system seems faster because I don't inhibit the user's actions while the system is still processing. This is ideal and makes your UI feel much more responsive, but it isn't always possible. Make sure you don't allow the user to begin any conflicting tasks, but if the user wants to perform an unrelated action (like bringing up a Help menu) while waiting for a background process to finish you might as well let them.

This won't work when the user needs the data to be loaded before they can do anything at all, but keep an eye out for things you can load asynchronously. If you're loading 3 views of data, loading them one at a time (with separate loading indicators) can feel much more responsive than loading all three at the same time even if the total execution time is the same.

share|improve this answer
    
That's very clever. There's definitely some optimization we could do to load the most relevant data first while other things pull from the server or are rendered. Thanks! –  Andrew Shipe Apr 10 '12 at 13:46
    
@AndrewShipe Gmail is a great example of this as well, if I have some time later I'll add some info about how they handle it –  Ben Brocka Apr 10 '12 at 13:58
1  
We are doing this with a large, UI-intensive application that has to run on crappy networks. Incremental updates as data becomes available, combined with a "not done yet" indicator, means the user can work while aware of his state. –  Monica Cellio Apr 10 '12 at 16:56

Is there any way you can return partial data to the user so that it's meaningful?

For example, if you are returning the medical history of a patient, return the most recent data first, or the most requested data (what ever that is). The user could then quickly verify whether this was the data they actually needed and either abort the transfer (if it wasn't) or know that their wait would be worth it. You might need to rearrange your data to achieve this though.

An analogy would be with a progressive image where the most blurred version is returned first and then gradually more detail is filled in. You often know quite quickly whether the image is the one you want.

share|improve this answer

Can you get it to produce an (optional) audio prompt when its finally finished loading ?

At least that way the user can go off to do something else without having to keep an eye on the screen ( or that window on the screen).

share|improve this answer

Here are four strategies we think would help:

  1. Make sure the system provides feedback and not just hangs.
  2. Preload data when possible. In many cases we can accurately predict what would be the user's next step
  3. Preload and cache data when app is not in use (ie. during idle time or when not used)
  4. Load data in batches and show what is loaded.
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.