Progress bars for tasks that can take an indeterminate ammount of time? [closed]

Multi tool use
Multi tool use


Progress bars for tasks that can take an indeterminate ammount of time? [closed]



Another random question that hit me (I've drank ~9 cups of coffee in the last 5 hours, so sorry...) -- What kind of progress bar would you show a user for a taks that you do don't know how long it would take, but you have a good idea of an "average" time. For example, a task that would usually take around 30 seconds, but you have no way of knowing the progress (other than if its still going on or just failed). What would be the best UX?:



Would the answer differ if the average time was 10 minutes instead of 30 seconds?



Thanks,
Robert



EDIT:



Just to be clear, the question is about progress bars where you have NO idea/indication of how long it will take (for example, executing a task on a remote machine). If you do have some indication of progress, it's often good to use that.



Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.





Whatever you do, don't run it up to 99% and hold it there for a really long time. Microsoft does that to me all the time.
– Charlie Salts
Sep 21 '09 at 16:33





Example: xkcd.com/612
– Charlie Salts
Sep 21 '09 at 16:34





@Charlie: you are right. Thats a big usability no-no.
– Esteban Küber
Sep 21 '09 at 16:41




7 Answers
7



Usability studies (I can't find the pdf) showed that at the exact same duration, loading bars with different patterns (exponential, linear, logaritmig), the ones that "felt faster" where the ones that completed exponentialy. By that I mean, the ones that start slow, but get faster as time passes.



What I normally do is:



Just don't lie to your users. Never tell them it will be over in a minute and half an hour later be still running.





The link is here: chrisharrison.net/projects/progressbars/ProgBarHarrison.pdf ... That seems like a good method, but you need to have some idea of when to start speeding it up.
– Robert Fraser
Sep 21 '09 at 17:00





Testing, testing, testing. Hard data is God. Time the operation under different loads and conditions.
– Esteban Küber
Sep 21 '09 at 17:17





Good study, but is after-the-fact perceived minimal duration the most important thing? For actually using progress feedback, the user wants to know: (a) Should I go do something else while this runs? (b) About how often should I check back? (c) Is the process taking more time than I have? (d) Is it hung? Your design challenge is to provide the user with information to answers these questions as well as you can.
– Michael Zuschlag
Sep 22 '09 at 11:58





Just curious: WHen you say you "take into account the last run[']s time": Do you mean that your program saves previous run times and adjusts progress bars dynamically based on this? If so, that sounds like a lot of work for a progress bar. I'd rather devote that effort to making the program faster than to tinkering with better indications of how slow it is! :-)
– Jay
Oct 7 '09 at 13:28





@Jay: you undertood me correctly. There are some process that are inherently slow. For example, the encoding of a video. Encode times can be infered on the origin file and some other things, but you can take into account real, hard data you can outperform Nostradamus :) Of course don't spend 4 weeks implementing this, but in most cases (you are already storing the information for some reason) with a couple of hours you should be done.
– Esteban Küber
Oct 7 '09 at 13:51



I am turning into a huge fan of the Mac and Vista style rotating circle that indicates progress without setting misleading user expectations.



XKCD comic
http://xkcd.com/612/



https://imgs.xkcd.com/comics/estimation.png





If you are going to downvote, at least leave a comment indicating why you did so.
– Raj More
Sep 21 '09 at 16:51





Upvoted for awesomeness :-)... I love that one!
– Robert Fraser
Sep 21 '09 at 16:55



Definitely the Barber pole progress bar. I think it's the standard on Mac Human Interface Guidelines (HIG). I am sure similar "undefined" progress bars exists for other platforms as well.



I would also put a textual progress indicator (like the amount of bytes transferred, for example). "Guessing" a percent complete can be feasible, but you should definitely be very sure about the average time, and its standard deviation, otherwise you will get a lot of angry users pissed off and clicking cancel because your progress is stuck at 99% since one hour. That would be very annoying for them and for your software's reputation.



It doesn't matter if the progress bar moves at a precisely constant rate. Indeed, taken literally, that would surely be almost impossible. How would you know in advance what factors might come into play to speed up or slow down real progress?



So I pick any convenient measure of how much work there is to be done and track percentage complete. If that's number of bytes to transmit, number of records to process, number of foos to bar, whatever. So sure, sometimes it starts out fast and then slows down or vice versa. But all that really matters is that as long as the process is working toward completion, it continues to move.



I think the hard problem is when you don't know in advance ANY reasonable measure of the amount of work to be done. Like, you have to process a set of records, but you have no easy way to get the record count other than reading all the records and counting them, and once you've done that, you might as well just have processed them along the way. In those cases, instead of a progress bar I usually resort to displaying a "progress count": Like "1 record processed", "2 records processed", etc. At least the user can see it's moving, and after he's done it a few times he probably has a ballpark idea of how far it's going to go, i.e. it's in the tens of thousands versus the hundreds of thousands or whatever.



I'm working on a system now that routinely uses an approach I find rather lame: They just attach completely arbitrary percentages to any convenient check point. Like if a function reads a bunch of data, sorts it, formats it, and prints it, they'll say 25% when reading is done, 50% when sorting is done, 75% when formatting is done, and then 100% when printing is done. I suppose it's better than nothing.



I've never seen it, but how about a sliding window over a progress bar, so that you can see if the work is progressing, at what rate, but the end keeps being that bit further off. Sort of moonwalking for progress bars. You'd need to make the animation distinctive so that the user can tell that new blobs are being added, and the oldest ones are sliding off to the left. The sliding stops when the program determines that it knows the distance to the end of the task.





That's a kind of cool idea! I'm not sure if I'll be able to implement that, but.... damn!
– Robert Fraser
Sep 21 '09 at 16:56



The best strategy is to be plain, simple and honest. Tell what's known, and set the expectation right.



If it can take a long time, it's better to be verbose, such as:


==============================================================================
Executing command xyz..

Started: 10:30 AM (usually requires about 20 minutes to complete)

Status: 10:35:10 AM.. Still working...{this line needs to update frequently}

[Send to background] [Cancel]
==============================================================================



I have seen such verbose descriptions in some large installers somewhere; can't recall exactly where but it was probably operating system or server software. Phrases like "This task may take several minutes to complete" are also not uncommon in installers.



If the task usually takes a short time to complete (say 30 seconds), but may occasionally take longer, it is probably best to show only an indicator that the task is not hung or otherwise dysfunctional, if and only if that can be ascertained. i.e., if you can tell for sure that the task isn't dead or hung. If you are as uncertain as the end user as to what's going on with the task, it is best to just show a background option (to let the user do something else while it goes on), or a cancel option (if the task can be canceled).



A typical example would be a database admin console that allows the user to execute an SQL query on a database. Typically, queries are satisfied in a matter of seconds, but infrequently, there are cases when the query requires large cartesian products, creation of multiple temporary tables, waiting for locks to be cleared, etc that can take several minutes. The admin console software has no means of determining how long the query may take, because all information about the query's expected execution time can only be known by the database server. In this case:



it is not possible to determine how long it will take.



it is also not possible to determine if the database server is stuck or hung in a deadlock



worst of all, you can't cancel the query execution.



In this case, the only good thing would be to let the user "background" the task.





Hmmm... this seems great for developer/admin-oriented tools, but what about apps for "average" users? Will the messages just confuse them?
– Robert Fraser
Sep 21 '09 at 17:47





We can quibble about the exact text. Maybe something like, "Usually takes 2 to 7 minutes or so" is fine enough for most users. More important is the principle of being honest with the user and not pretending to track something the app can't track. Junk feedback is generally worse than no feedback.
– Michael Zuschlag
Sep 22 '09 at 11:47



Why not increment the progressbar as you complete tasks in a method?



How long the task or process takes is irrelevant, it's possible to simply increase the progressbar's value by X amount when Y part of the task is complete, or you're Z far into the process. (i.e. every 5 kilobytes that are processed in 100 kilobyte file upload)





This is what I do, whenever possible. If I know I've completed task 2/5, I can show the bar at 40%. The more tasks you have, the smoother the bar increments, but having a really long task causes the bar to 'freeze' for a long period of time. Personally, I'd rather have a bar that increments and freezes, than an indeterminant bar that tells me nothing other than 'still working.. not done yet.'
– Charlie Salts
Sep 21 '09 at 16:38





yeah, but this breaks down if each chunk takes a long time, e.g. reading from the web and it takes 10 seconds per chunk, or 30 seconds to read anything. It'll look like the download has stalled
– Glen
Sep 21 '09 at 16:40





I'm the same Charlie. I don't want to estimate the 'normal' time that a task 'should' take because it's too variable in many cases. Calculating the possible time can only end up in frustration.
– Daniel May
Sep 21 '09 at 16:41





The question is for when you have no indication of progress (you have no access to the task being performed).
– Robert Fraser
Sep 21 '09 at 16:44





@Charlie & Glen: True, but I think it depends on the length of the freeze. Maybe I'm more patient than most, but a progress bar that doesn't move for 10 seconds, then advances, sits there for 10 seconds, etc, wouldn't cause me any anxiety. If it didn't move for several minutes it would. I'm not sure what the "maximum non-moving time" would be. Clearly the goal should be for it to continue moving smoothly with very small increments, say a second or less. But if there are only a few measurable steps, what's the longest freeze before a reasonable user will decide that there's a problem?
– Jay
Oct 7 '09 at 13:26

dbVcMCIJG,13m0R 4WuLX1Hy1jx
Sxltz nmONfrnZoMjflOEyGk,LWOjYzLjYaBo hX,10y OkIQyMACvStruaTB9ktbBJ,7BT,RPol,QlDIY8vdVhODnaLFaT

Popular posts from this blog

PySpark - SparkContext: Error initializing SparkContext File does not exist

django NoReverseMatch Exception

List of Kim Possible characters