Progress

Progress as in (verb pruh-gres) and as in progress bars.

Spoiler alert! Progress bars lie… yep.

That’s a dirty little secret in application development. Unless you’re displaying the percentage remaining for a file download, you almost never know exactly (or sometimes even remotely) when a process will be done.

A developer might know there are 5 or 6 steps total, with steps 2 and 4 taking much longer than the others. So they cheat and break up the progress bar into relative chunks to make it seem like your application knows when the process will complete.

But really, progress bars have very little bearing on reality.

So you do step one, update the progress bar to 10%. Then, step 2, update to 24%, to reflect the extra time (probably) in step 2. Then after step 3, jump to 37%. Odd numbers make it look like you’re actually doing some real calculations behind the scene. Run that process 10 times, you’ll get a big variation in the time between steps, but the progress bar will still read 10% — 24% — 27% — etc.

The time to complete readings are even worse. Ever notice how it might start at 3 minutes and 13 seconds to complete, then, 2 minutes later, reads 2 minutes and 12 seconds to complete. What was that, a wormhole?

Most of the time, nowadays, people avoid progress bars and countdowns and instead use a status bar that just bounces back and forth or the dreaded spinning rainbow wheel.

Those simply say: “Something is happening! Doing lot’s of work here! Not sure when it’ll be done! Hang on!”

Annoying… but truthful!

Imagine how frustrated we would be if applications asked us when we wanted them to finish?

“Ready for install, when would you like me to finish?”

“Four minutes”

“Sure, I think I can do that!”

Twenty two minutes later…

“Done!”

That would be painful. Luckily that’s just nonsense. We understand that there are many variables in play when we ask a machine to perform a long series of complex operations.

We surely wouldn’t fault a machine for taking much longer than some arbitrary time box we create on a whim.

We also wouldn’t expect a machine to spend a bunch of time to perform a detailed analysis in an effort to calculate a perfect estimate. Especially considering a machine can’t possibly predict the performance of external systems or networks it might depend on.

We just expect a machine to work on the task we give it, fully committing it’s resources to get the job done as fast as possible. Then, we watch the wheel spin away, gritting our teeth a bit if it spins a bit too long.

The spinning rainbow wheel of woe doesn’t tell us much, other than the machine doesn’t know how long it’s going to take to do what it’s doing, but it’s going to do the best that it can with the resources it has to work with.