medic / cht-core

The CHT Core Framework makes it faster to build responsive, offline-first digital health apps that equip health workers to provide better care in their communities. It is a central resource of the Community Health Toolkit.
https://communityhealthtoolkit.org
GNU Affero General Public License v3.0
468 stars 217 forks source link

Increase user confidence in reload times by adding a progress bar #4480

Closed SCdF closed 2 years ago

SCdF commented 6 years ago

Background

Our app takes a long time to reload, especially on phones. A CHW whose data I am modeling this on takes ~60 seconds to complete a refresh on an android phone that is likely to be deployed.

CHWs also refresh a lot more than we expect / that we'd like, as a lot of our app's performance issues are front-loaded: in the above example ~10 seconds of JS parsing (probably), and the majority of the rest being PouchDB bootup stuff (pulling data into memory, executing queries to get nools to work).

Since CHWs refresh a lot and our loadtimes are really long, we should try to increase their confidence in this process as much as possible.

Implementation

Let's change our loading from a throbber to an accurate progress bar:

We should keep our messages about what it's doing and use that to make it even clearer that something is happening.

We should consider what to do if the progress bar fills up and it's still loading. Perhaps display some kind of "hang on!" message?

billwambua commented 6 years ago

I strongly second this.

I was in the field in Togo to check the situation on the ground because CHWs, nurses and supervisors were complaining that the app is too slow.

So when I got to the field, I sought to establish the time taken. First, I asked them how long it took them for a certain action e.g How long it takes to open the Contacts tab when you restart the phone/app.

Starting with CHVs, they mentioned times of around 4-5 minutes from opening the app to the Contacts page and searching for a person. I did the same action with several of their phones and timed it on the Stopwatch app. I got times like this:

      first load after shutdown - 17.26s
      then reports page - 6.12s
      then Contacts Page – 7.10s
      search word 'famille' under Contacts Page - 9.25s 

If you add that up, you get 39.73 seconds. Of course you consider that they don't press a tab immeadiately it loads so let's take that up to a minute or a bit more. It's still a far cry from the estimated 4-5 minutes.

As for nurses, they reported 8-10 minutes from startup to getting a patient. The actual times hovered around the below test:

      first load after shutdown - 23.05s
      then reports page - 42.56s
      then Contacts Page - 2min10.51s
      Click 'Zone K1' - 3.46s
      search word 'famille' under Contacts Page 23.14s

This adds up to 3Mins 42.72seconds. Compare that to 7-10 minutes estimate.

Which leads to the conclusion: there is something about staring at a blank screen with only a spinning animation for more than 10 seconds that makes time elapsed seem more than it actually has.

We should give some feedback to the users. If it took 15 seconds to load the reports tab from shutdown yesterday, it will probably take the same give or take today. So we could use that at least to build the first iteration of this feature.

cc @aikajanet @abbyad

SCdF commented 6 years ago

Thanks @billwambua for the awesome awesome feedback!

aikajanet commented 6 years ago

@maremegaye

n-orlowski commented 4 years ago

Similar to https://github.com/medic/cht-core/issues/5618

latin-panda commented 2 years ago

As today, webapp displays an animated spinner that indicates loading, it also displays some feedback about what's going on behind the scenes: Downloading app… Loading app… Checking data… Polling replication data… Cleaning data… Cleaned 10 documents… Fetching info 0 of 46… Starting app…

However, there are still some processes executing that we don't display feedback, so it only displays the spinner. The improvement of this issue will be addressed in this ticket . Closing this one for simplicity.