The Complex World of the Simple, Tiny, Insignificant Progress Bar

One of my earliest professional programming tasks was to create a progress bar for an application. The requirements were simple, really: show the user how far along the application was in its processing of a new data set. Easy, right?

Wrong. As it turns out, for many tasks it is actually non-trivial to display a meaningful progress bar to the user. Predicting the future can be difficult, it seems.

In fact, there is some serious HCI (human-computer interaction) research being carried out regarding the progress bar and its impact on user experience. One such paper focused on displaying the progress information in a variety of ways--while keeping the task time constant--and showed that people can consider a progress bar to be faster or slower even though the time it took to complete was exactly the same. A follow-up paper further explored the progress bar by changing visual attributes (for example, making the bar pulsate at different frequencies). Once again, the time to complete was always the same but the human perception of the passage of time was varied.

Just for fun, check out some of these progress bars:

Do any of them seem familiar? There is an excellent chance that you've encountered them while copying a file in Windows or installing the latest version of OS X. I bet you've even programmed one of these.

As for my younger self, I spent quite a bit of time implementing and refining the progress bar for that data installation process. The exact design of the final solution has been lost to my memory in the mists of time, but as I recall it was some combination of an overall percentage with a 'live' update of the current files being processed. The overall percentage gave the user a rough sense of how far along the application was in the process, and the file names (which flew by far too quickly to be meaningfully absorbed by the human consciousness) gave the user the reassurance that the process was indeed continuing and hadn't gotten stuck somewhere. Perhaps not the optimal solution, but it got the job done.

Folks, don't let anyone tell you that adding a progess bar is an 'easy' task.