Thinking About Syncing
After a lot of team discussions pre Christmas we made the decision that Portal will need some form of sync and accounts functionality and that we cannot rely on iCloud. The reasons for this are interesting in themselves but for right now I am focussing on our options for client data syncing.
The Requirements
- Customer Opt-in: Accounts must be optional and clients should be able to store all data locally without the need for an account.
- Offline First: Everything should be fully functional offline for extended periods.
- Reliable: When online and signed in clients should sync up to a consistent and understandable state.
I am genuinely surprised how little discussion there is online for App data syncing outside iCloud. Most of the public discussion focusses around:
- Firebase: We moved away from Firebase services a few years ago and have no plans to go back, mainly based on privacy concerns.
- Roam (MongoDB): We’d rather avoid using a 3rd party hosted service, their granular pricing makes it hard to comprehend how much we would be paying but I think it would be a sizeable bill.
- Replicache: JS only on the client side, doesn’t have a good story for initial local usage without an account and the pricing model would be unsustainable for us.
Because of this I think we need to look into options for handling sync ourselves. We maintain our own backend services for our library content, adding sync might be a natural next step.