Building Carousel: How we made our networked mobile app feel fast and local
tech.dropbox.com
tech.dropbox.com
Why?
Conflict resolution is costly and if coupled with a delay can be irrevocable. This means you need as much data validation and associated business logic offline in your app to prevent the user from even saving wrong data in the first place.
Some customers will want their users to work disconnected during their whole work day to save on data costs. Again, think global, data plans are not the same between the US and Brazil, for example.
Even if permitted to work online, the work environment the user enters might prevent them from going online. Think hospitals, where mobile phone usage is restricted in certain areas or is simply blocked through an active MRI machine in the vicinity.
The amount of data needed locally will likely be higher than in consumer apps.
A fully offline capable model to ensure maximum independence of connectivity needs a mix of sync mechanisms that should follow their respective business use cases. Conflict resolution and error handling is not exactly simple in such an environment, pervasive logging is key - plus a way to sync down app logs to the online backend. Users can freely fiddle with time/date and locale settings on iOS devices for example, which can wreak havoc on your sync logic - being able to backtrack such events is key when dealing with customer support issues.
Inevitably there needs to be some kind of review screen to let the user adjust their edit in the above scenario and that makes the whole user experience a little clunky.
I agree with the overall point of the OP though, given how flaky a mobile connection can be, this is by far the best approach if it suits the app.
I tried to write something up about this although looking back half a decade later leaves me even less impressed by my communication skills. Nonetheless, in case it's useful to see some coding details, a (pre-Promises, pre-Harmony, 2008) JavaScript sketch of this is here: http://blog.osteele.com/posts/2008/02/synchronizing-client-m...
This was before Operational Transform, but in retrospect it could be viewed as a simplified subset of that algorithm.
Several times since I've seen clients that try to skip this, sending the edit upstream and then synching to the model that comes back down, which may not reflect the edits. And then add delays which sometimes hide the problem.
http://cdixon.org/2014/04/07/the-decline-of-the-mobile-web/
Don't optimistic actions prove he's wrong?