We have a Desktop based WinForms application. Application performs some very complex logic in database and is bound to take long time. By long time i mean it will take anything from 1 min to 20 min for processing. In this time user can't do anything and has to watch the progress bar. Now, We have communicated client that calculations are such that. it can't go faster. He acknowledges that yes its optimized but it feels slow for end user.

I wanted some suggestions on how do we handle long running operations on UI which may create illusion of application being a very responsive and fast.

My idea was that right now user is observing very static progress bar. If I put some text or some notification where I have reached in processing it may have better impact on usability.


  • 2
    Is the UI locked while the process is waited for or can the user do other things in the meantime?
    – kontur
    Feb 7, 2013 at 8:07

4 Answers 4


I don't know if those calculations are on demand or what they are about, but I made an UI for some slow data calculations, too.

Since it is not the only thing a user can do in our application, we made everything asynchronous on many levels.

One level is pre-calculation and caching. Most users want to view about 10-20 reports. Those take from 10sec - 1h to calculate.

So we enabled the user to mark them as favorite a day before and every night they get calculated, so the user gets on the system every morning and instantly sees the results.

The other level was an asynchronous UI.

Since there are fast and slow reports, we made the whole UI asynchronous. This lets the user do different stuff, while the reports are loading.

No blocked UI while waiting.

This made the whole waiting time much more appealing for the users, since they don't have to sit around and wait, but do anything they like, while they wait.


An application that takes a minute to load need to be designed differently. You can't leave the user unproductive for up to 20 minutes in the year 2013. From a design perspective, in order to save the user expereince, you need to do one of three things:

  1. Use better hardware. This is the obvious choice, since you could buy yourself out of trouble by using better (faster, bigger, stronger) hardware. Increase the memory up to 4 TB is possible on Windows Server 2012 - but probably not needed. This is the costly option, but if it doesn't work for the customer...

  2. Use cached data. Have a separate server doing these crucial calculations delivering the result to a Web App/Native App connected SQL Server. You can have these calculations done every hour if you'd like. But if that is not an option...

  3. Implement threading. OK, you need to do these calculations "live" where "live" means up to 20 minutes old data. Buty you could let the user fire off the powerful query from a dashboard, and then move away to do other things in the system. When the calculations are done, user gets notified that the calculation is done and can navigate back to the dashboard consuming the result.

A few ideas to improve further, if you fancy anyone of them.

  • 1
    +1 Options 1 and 2 are sometimes simply not a solution. I work on client/server software that processes huge amounts of data and throwing hardware at it doesn't help (anymore), and while query results are cache-able (to some extent as they are not simple resources), they cannot be served (as yet) by other more general software. (The client can't handle it). Feb 7, 2013 at 7:27
  • 1
    +1 for threading in the sense that the app should allow the user to kick off a process and then continue using the app working on other things and then be notified when the process is done. Feb 7, 2013 at 17:04

Implementing asynchronous calculation is the best solution because it completely eliminate the reason of inconvenience for user which is waiting. But sometimes it's not possible to redesign application radically. So in case of synchronous calculations we need to do one of the following - divert user's attention or give him estimation of calculation duration. Most simple way is to display estimated time of calculation. This reduces user's uncomfortable uncertainty and he can plan his time until calculation completion - stay or go for a cup of coffee. The easiest way of diverting attention is add dynamism to static progress bar in some way, however it can have additional overhead for calculation itself.


You can break the long task up into sub tasks and show the progress of these sub tasks, which should give the impression that things are being completed.

You can provide some useful information that is not strictly related to the task at hand, so that the users feel like they are not just sitting there waiting for the process to complete, which gives the impression that they are not being completely unproductive.

You can give the users some options about what they want to do with long processes, such as a notification once the process is completed or giving them a way to save and continue if the user cannot opt out of the operation.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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