The entire purpose of a progress bar is to let the user know how much longer he or she has to wait till the program finishes doing whatever it’s doing. But most progress bars I have come across are useless. Have you not seen a progress bar that randomly switches between varying lengths of time from 2 hours to 5 minutes, when the actual file copy operation took 10 minutes?
What’s the use of progress bar if it can’t show the actual progress? Having the bar filled up to 99% and then waiting for an eternity gives users a false hope of completion and returning back to work, when it’s not. I have always wondered why programs do that.
Recently I came across a story on The Daily WTF that has me convinced that most developers include the progress bar entirely for cosmetic purposes.
"One of our desktop applications has a progress bar in it," Bryce N. writes, "and as I was working more and more with the code, I noticed that the progress bar would progress to a seemingly random part in the bar, but never past the halfway mark. This would probably be ignored, if it weren’t for the fact that I noticed that my breakpoints would only be hit when the bar reached the ‘random’ mark."
"While I was trying to discover why, I found this in the code:"
/* There is really NO eloquent way of calculating what the progress of a given method/task will be. One task may be downloading or copying a file while another one might be grabbing huge chunks of data for file creation. Since we want to see a progress indicator but can’t determine this value, we’ll simply play with it so it has the
appearance of running; (i.e. we’ll take it to 50%, execute the task, then come back and finish the progress upon completion.) This is a Microsoft STANDARD… I’m sure of it!
Although progress bars are not accurate as a time indicator, I find them useful IF they are true indicators of activity. I find it very frustrating if there is supposed to be an active process and there is no indicator to let the user know that something is happening. Without this indicator users get impatient and may forget they initiated a process, or terminate a process because they think it failed.
I think many users know that time indicators are guesstimates.
If the progress bar is not accurate, it's better to use a loading indicator like a rotating icon or marquee rather than have a fake progress bar.
I am a programmer in several languages and, in my opinion, the person who wrote that comment is either full of crap or a really bad programmer. As long as you are working with known facts, such as the size of the file, how many blocks you're moving at a time, the speed of the connection, etc., it is a trivial mathematical function to move the progress bar accurately. If you're using software that has an inaccurate progress bar, it was written by a lazy coder.
SOURCE: The Daily WTF
I think the programmer was tasked at creating a 'general' purpose progress bar. This is why he complains about not knowing the actual type of task the user will perform.
In that case he is RIGHT. That said, good software (or a progress bar for that matter) is never general purpose.