Is it better to switch status bars in-place when the next process occurs? Or do users prefer to see stacked bars for each step?

I am developing a status page where the user submits data and the following occurs:

  1. CSV file is uploaded to S3
  2. Records are imported into database
  3. Success message is displayed (or error, if one occurs)

I can show percentage progress during the file upload, but cannot track progress while records are imported. At the high end this process can take 2 to 3 minutes.

The site is built in Bootstrap 2. What I am planning to do is display a single status bar, that shows percent progress for file upload in blue. Then it changes to green when the file is uploaded. Text below will say 'File uploaded successfully'.

Then it changes to blue striped animated while processing the CSV file. Then that changes to green when it is done. Another text status is added that says 'File processed successfully, xx records imported.' Does that sound appropriate?


Using a single progress bar is great. In too many case, using a main progress bar plus sub-progress bars is overkill and does not help.

Users generally expect progress bars to advance linear with time. This is hard to implement.

For 1) I recommend not displaying percentage, since the user does not know whether that's time percentage or file size percentage. I recommend labels that say x MB of y MB. It's honest and the user will know that it depends on Internet speed. If possible, you can calculate an expected remaining time based on the average upload speed.

For 2) I hope that the S3 server performance is quite stable. You don't need to consider crappy hardware of the customer. In that case I would perform some tests and then use a bad case value and estimate the time based on them. I see users generally more happy if something completes earlier instead of a progress bar hanging at 99% or 100% for minutes. Regarding the label, just be honest: Processing n records usually takes m minutes and let the customers decide whether they want to grab a coffee in the meanwhile. This approach requires that you know at least the number of records that are imported.

Also: try to find a technical solution for the import progress on SQL server side. It's not impossible, e.g. with mySQL (see e.g. Stack Overflow or DBA.SE).

If it takes longer than expected, the label could state Let's wait o more minutes. and calculate that on the absolute worst case values. If possible, add something like The server is alive and responding, if that's the truth and you have the means to figure that out (e.g. with a ping-like function)

For 3) Do not use the success message as part of the progress. In your case, the progress should be e.g. 50% for the upload and 50% for the import. Using 33%/33%/33% will give a wrong impression, since the last step is an immediate step and does not take 33% of the time.


Well I think problem 2 is the most interesting too solve. Where I think Thomas has a point, saying that you can be honest with the user and tell them how long it normally takes.

In the meantime, beside the process indicator, you can give them handy tips or other stuf they can learn from to kill the time. Communicate with the user and ensure that the waiting time of the user isn't for nothing.

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

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