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)?
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
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?
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
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
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.
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.