There’s a problem with sync and its name is offline.
Sync on iOS is built on the false assumption that the Internet is everywhere. But the world of humans, airplanes and trains and subways and backroads and basements demonstrate otherwise. Holes of offlineness lurk everywhere and sync on iOS (both with iCloud and DropBox) really falls down hard if you step into one.
On iOS, your data often isn’t on the phone until you try to access it. Doubtless there have been many a sad businessman who once in the air over the Pacific Ocean discovered that all his music didn’t get on the plane with him.
But that’s not all: did you rent a cabin far out in the woods to work on your book? If you didn’t download it to your iPad ahead of time, it’s going to be an unproductive retreat.
And the problem works the other way, too.
If you live in a city with a metro system you’ll be out of Internet range multiple times a day: and the data you generate on your iPhone might not make it back into the cloud.
For example: I use an app called Notesy to store ideas for future projects. And ideas flow freely while I’m slightly bored on the Underground.
Later, when I go to use the notes on the iPad version of Notesy – its empty. Why? Apps only sync when they are open. The solution isn’t a big deal: open Notsey on the iPhone then manually tell the iPad version to sync – but it’s an irritation that shouldn’t exist.
But the way iOS handles sync can lead to much bigger, serious problems: it’s possible to overwrite new versions of your data with old versions without warning.
Again, as example Byword is my text editor of choice and it uses Apple’s iCloud to sync documents. But because of the sync-only-when-open-rule this can happen:
Monday: Start writing a new script on my iPad.
Tuesday: Continue working on it on my Mac. No problems.
Wednesday: Go back to working on the iPad. But this time I’m offline for some reason. Because Byword can’t sync, I’m working on Monday’s version of the script and, the next time Byword on my iPad connects to the Internet it will replace Tuesday’s work.
While it’s possible to remember over the course of three days where the latest version of a document really is: 1) the user shouldn’t have to & 2) as the time between edits and the number of documents increases, errors are inevitable. Versioning is only useful when you know you've overridden something.
This kind of problem can destroy days or months of work. The result is that I’m never 100% sure that what I’m working on is the current version.
And to be clear: this isn’t Byword’s, or any other app’s, fault. It’s a structural problem with the way iOS limits what apps can do.
That's not even getting started on the horror that can be unnoticed conflicts. For example, take a look at my TextExpander folder:
As most of my work migrates to iOS, sync problems have moved from a nuisance to a business problem. Here’s a list of just my work-related iPad apps that depend on sync:
- OmniFocus (Task management)
- Agenda (Scheduling)
- Byword (Long-form writing)
- Notesy (Project notes)
- Notes (Very brief ideas)
- Downcast & Instapaper (Speculative research)
- Evernote (Non-text research Notes)
- 1Password (Secure website access)
- TextExpander (Faster writing)
- Dropbox (Document storage)
- PDF Pen (Document storage)
- Numbers (Finances)
- Drafts (Rapid input)
There’s not a one where sync hasn’t messed up: sometimes with disastrous consequences.
Enough complaining, here are two suggestions for how Apple could fix the current problem with iOS sync.
1) Sync Requests
Just as OS X allows applications to specify their power requirements iOS would benefit from letting apps tell it what their sync needs are.
If the user adds data to an app on their iPhone while offline, the app should be able to tell iOS “please wake me up to sync as soon as the Internet is available.”
Going back to my Notesy example from earlier, this would mean that notes created while underground would have a chance of making it to other devices without me having to manually update the app on my iPhone.
2) Midnight Syncs
Sync requests work when an app knows it has data to send to the cloud, but sometimes there’s data in the cloud that the app doesn’t know it needs.
To solve this, iOS should wake up apps to sync if the following three rules are true:
- The device isn’t being used.
- The device is plugged in and at 100% battery.
- The device is connected to WiFi.
Then after spending a day writing in Byword on my Mac, the updates can spread to all my devices automatically.
3) Pin Data
Lastly, iOS should have a clearer way to pin data down to the device. That way specific documents or entire Apps could be given clearer priority for always keeping data locally.
Even with pinning data, sync requests and midnight syncs there would still be problems – sync is incredibly troublesome – but these three should go a long way toward getting rid of the kind of problems that temporarily being offline currently cause.
While it is possible to rollback to previous versions of files, often working on older versions of scripts creates structural conflicts that a simple diff can’t solve. This can lead to massive delays which in turn costs money. ↩
Downcast and Instapaper both have a feature that allows them to sync when you enter or leave a given location (such as your home). While this eliminates most of the problems mentioned above, it’s not a widely practical solution for several reasons: 1) Proper sync should not rely on the user running frequent errands. 2) Having every app on your phone wake up to sync every time you leave your house is a battery killer. 3) iOS devices are currently too RAM constrained to open every app at once anyway. ↩
Of course, this suggestion would decrease battery life. So perhaps the user would need to explicitly grant permission to some apps to be able to request this sync. ↩