A few days ago I was thinking that it’s really a pity that I cannot find a good iOS shopping list app in my language. Good means simple, allowing me to manage multiple named lists with check-completable items, with autocompletion on typing product names (using a built-in but adaptable list of names), and syncing to my wife’s device.
For now I use Apple’s Notes app which has everything except autocompletion. But it does sync through cloud, and there I also have other notes, not just shopping lists. It would be nice to have domain separation.
So let’s assume that I want to develop such an app. My deep question here is how should it sync data between devices?
- Through cloud: should I just go with the traditional way, i.e. having a server API and database in the cloud to provide data to client app instances, and then syncing will be done through that central repository? or
- Through peer-to-peer (P2P) connections: directly between devices when they are on the same network.
- Or both? I.e. try P2P first, then cloud? (With some clever way to send messages similarly, even if P2P communication relies on different protocols than Web?)
- Or configurable by end users? So that if I have an important list that I don’t like to be stored in cloud, but I would accept it being on my wife’s device, I could configure that only P2P is enabled.
Thinking about these issues, I found this article, about P2P-ing the entire Web. Very, very interesting. That would turn actually all the four points above into a single one, ain’t it?… (But we would need to change core protocols for that to work as in P2P communication at any given time one device is a server, i.e. accessible through an IP address, and we all know client machines are usually behind routers, firewalls and generally out of reach.)