User Experience Stack Exchange is a question and answer site for user experience researchers and experts. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

In the old version of our application, the operations performed during loading were sequential. We indicated progress by updating a single-line text string with the component that was being loaded. Eg:

Loading <Module 1> ...
Loading <Module 2> ...

In the new version of our app we now load the modules in multiple threads, which speeds up the loading times, but still takes a while.

What would be a better way to indicate progress?

share|improve this question
Is the new one a GUI or a text-based interface? – Erion Oct 5 '11 at 2:07
It's a gui interface. – Fuzzy Purple Monkey Oct 5 '11 at 2:57
up vote 7 down vote accepted

Why not show a single progress bar? Ask yourself whether the information given while loading is something that the person will act on. If not, then it isn't needed.

If however, you need to show them all this information, you can show it as a table of sorts. Something like this (but prettier) maybe:

enter image description here

share|improve this answer

It does seem like a single progress bar would be sufficient. If more context is necessary, perhaps use a dynamic text message like "3 of 9 modules have loaded successfully". Similar to MS Outlook Send/Receive.

Outlook progress bar

share|improve this answer

To play devil's advocate, why do you need to show individual progress bars in the first place? If the user just needs to know how soon the application will start, a single application bar that accounts for all processes would be better.

If, on the other hand, the user needs to look at the performance of individual threads, and see where there are weaknesses and bottlenecks, you need a set of indicators that make visual comparison very easy. For this, I'd use wide horizontal progress bars situated as close to one another as possible, with very clear right-hand edges. This makes it easiest to see which threads are trailing behind others, and with what sort of margin.

share|improve this answer

I'm very fond of how Transmit handles it. They have two bars that overlay each other. The dark one is for over all progress and the light one is for the current task. When the light one reaches the end of the dark one the dark bar increments its progress.

Transmit Progress Bar

share|improve this answer
That's a nice pattern, but it wouldn't work well unless the bar was constantly filling. If I saw that pattern when it was static, I'd be a bit confused. I'd probably assume the white bar was 'finished' work, and the grey bar was 'in progress' (as it's translucent in the context of your example). Good answer, though. – Jimmy Breck-McKye Oct 6 '11 at 14:51

How about n circle pie charts (one for each thread) that fill up to show progress. When they are full they could change color (eg to green). The circles could be layed out in a line or arranged in a circle (circle of circles).

Multi thread progress!!

(My color scheme not great but gives the general idea..) Would be kind of straight forward in WPF - maybe not so under other frameworks...

share|improve this answer
If you upload it somewhere and post the URL, we'll add it for you. :-) – Patrick McElhaney Oct 6 '11 at 23:37
@Patrick - Cheers - but someone was kind enough to upvote so I now have a (~)weighty "11" reputation - so enough to post an image! – Ricibob Oct 6 '11 at 23:56

What's wrong with an ordinary progress bar?

You could add some funny loading statements, though.
Inspired by question on SO:

Testing RAM..............OK
Testing CPU..............OK
Testing Primary Disk.....OK
Testing Patience.......FAIL


Testing data on Timmy... ... ...   
We're going to need another Timmy.


Measuring the cable length to fetch your data... 


We're working on making this page load faster
share|improve this answer

You could still keep one visual indicator.

You solve this by having a shared memory variable that uses a global write lock. All your module functions would then right to this status variable.

share|improve this answer

Your Answer


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.