5

I'm having trouble deciding on the correct balance between program complexity (cache, separate launch process for no-data) and best user experience. How do you decide?

Remote data is required to use the app, but the app can be used without logging into the remote service, once data has been saved locally. The remote service has high latency - validating a login is slow, requesting the identifier list is slow, and requesting the remote data is slow.

Grabbing the remote data is a two step process - the user has to select an identifier before the app can request the correct data. The identifier list has to be requested from the remote service, which requires login.

Which would be better UX design for case when there is no saved data (i.e. new install)?

  1. option one (more complex)

    • login password form is automatically presented
    • if login valid, identifier list is automatically requested on valid login
    • "please wait" while identifier list downloads is presented
    • identifier selection screen is presented to the user, with 'download' button
    • "please wait" while data downloads is presented
    • main application screen loads with data
  2. option two

    • main application screen loads with no data
    • user requests 'download new data'
    • login password form is presented
    • on valid login, identifier list is automatically requested with a "please wait" dialog
    • identifier selection screen is presented to the user, with 'download data' button
    • "please wait" while data downloads is presented
    • on valid login and download, main application screen refreshes with data

Which would be better when updating data, to cache identifiers and manage cache refresh or not to cache identifiers?

  1. option one (more complex) - cached identifiers w/cache refresh

    • main application screen loads with saved data
    • user requests 'download new data' [with 'refresh identifier' checkbox selected or blank]
    • if 'refresh identifier' checkbox selected, then
    • login password form is presented
    • on valid login, identifier list is automatically requested with a "please wait" dialog
    • identifier selection screen is presented to the user, with 'download data' button
    • "please wait" while data downloads is presented
    • on valid login and download, main application screen refreshes with new data
  2. option one (more complex) - cached identifiers w/o cache refresh

    • main application screen loads with saved data
    • user requests 'download new data' [with 'refresh identifier' checkbox selected or blank]
    • if 'refresh identifier' checkbox is not selected, then
    • input form with login, password, cached identifier list and download data button is presented
    • "please wait" while data downloads dialog is presented
    • on valid login and download, main application screen refreshes with new data
  3. option two - identifiers not cached

    • main application screen loads with saved data
    • user requests 'download new data'
    • login password form is presented
    • on valid login, identifier list is automatically requested with a "please wait" dialog
    • identifier selection screen is presented to the user, with 'download data' button
    • "please wait" while data downloads dialog is presented
    • on valid login and download, main application screen is refreshed with new data

Update

UI wireframe for this process, considering answers, discussion here.

enter image description here

2
  • Your question is very specific and at the same time quite abstract. If a user should be asked to download identifiers or not obviously also depends on how useful that information will be and if the user can or can not use the application without doing so.
    – kontur
    Commented Dec 4, 2012 at 14:01
  • @kontur Identifiers correspond to tags on SO. Consider if you had an app that did some analysis on the content of SO questions for a given tag. Something like data mining natural language, perhaps. In order to present the use with a list of potential tags, you'd have to make an API call to SO to grab the current list of tags. Over time items may be added or dropped. But, for the most part, the list could reasonably be cached locally to save the overhead of the API call every time the user wanted to refresh their content.
    – marfarma
    Commented Dec 4, 2012 at 20:26

1 Answer 1

1

It's always better for the user to have minimum (especially while he or she isn't yet familiar with the app) steps to perform at the beginning that will let him use the app. And it seems like app is useless without the data so I think that option 1 is more suitable for the fresh install.

Concerning updating identifiers.

The one problem I see here is that it's not possible for the user to know if these identifiers are obsolete (i.e. should be updated). It seems like user may need to perform refresh and wait only to see that nothing has changed.

So, I suggest to cache identifiers anyway (and possibly cache login/password too) and do the following:

  1. user requests data update and a list of identifiers with a "refresh identifiers" button (and possibly date of last sync) appears
  2. if user decides to update the identifiers (it's more user-friendly to store login and password, or some key to not ask for login/password often, but anyway) the login/password dialog is shown and identifiers are updated and the list is refreshed
  3. user selects identifier to request data for and waits for data to be transmitted

Here is how it may look:

Choose identifier to download data for

I do believe that storing login and password could improve UX in your case, and make UI look better.

You may also try to update these "identifiers" automatically in background so user will not need to update them manually and save some time.

It's just some thoughts since I have no idea what "identifiers" and "data" are, etc.

4
  • Thanks. See my comment on the question, added wireframe, in case more info changes your thoughts.
    – marfarma
    Commented Dec 4, 2012 at 21:12
  • 1
    @marfarma I've added a wireframe to my answer too. Avoiding login screen by caching login/password is a plus. Commented Dec 4, 2012 at 21:38
  • Thanks Alexey, I hadn't considered cache w/ an automatic background refresh. I think my biggest concern with caching the identifiers was the user not knowing when the list was obsolete. Intermittent background cache refreshes should prevent that, 99% of the time. And your version of the download UI is so much cleaner than mine. Now I'm more confident about how to proceed in implementing this workflow.
    – marfarma
    Commented Dec 6, 2012 at 17:04
  • 1
    @marfarma you're welcome! keep in mind that adding last sync date to the download identifiers window (it's absent at my sketch) may help user to decide whatever he or she should proceed with refresh (i.e. a day ago - should probably proceed and 2 hours ago is ok because not much data has changed). Commented Dec 6, 2012 at 17:12

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.