← Blog

Skip Real-Time Sync If You Can

·
ArchitectureSyncOps Tools

The default instinct when building a multi-device app is to add real-time sync. Changes on one device appear instantly on another. It feels modern. It feels right.

It's also the source of half the bugs in most internal tools.

The Sync Tax

Real-time sync sounds simple until you implement it. Then you discover:

  • Conflict resolution. Two users edit the same record. Who wins? Last-write-wins loses data. CRDTs add massive complexity.
  • Ordering guarantees. Events arrive out of order. Your UI shows inconsistent state.
  • Offline queues. The device goes offline mid-sync. Now you have a partial state that needs reconciliation.
  • Debugging. Something went wrong. Which device caused it? When? The sync log is 10,000 events long.

For a chat app or collaborative editor, this complexity is justified. For a workshop management tool? It's not.

Explicit Sync Is Simpler

In the workshop PWA I built, we chose explicit sync:

  • The app works fully offline with local SQLite storage.
  • When the user wants to backup, they tap "Export" and get a database file.
  • When they want to sync, they explicitly push data to the server.
  • The server never silently overwrites local data.

This eliminated an entire class of bugs. No merge conflicts. No "where did my data go?" No mysterious state changes.

When Real-Time Sync Is Worth It

Real-time sync makes sense when:

  • Multiple users edit the same data simultaneously (collaborative docs, shared dashboards).
  • Freshness is critical (live order tracking, real-time inventory).
  • The data model is simple (key-value, append-only logs).

It's overkill when:

  • One user per device (most internal tools).
  • Data changes infrequently (weekly reports, configuration).
  • Users prefer control (they want to decide when data moves).

The Middle Ground

If you need some sync but not full real-time:

  1. Background sync on app open. Pull latest data when the app starts. Don't push automatically.
  2. Manual push with confirmation. "You have 12 new records. Sync now?" Let the user decide.
  3. Append-only sync. New records sync automatically. Edits require explicit action. This avoids most conflicts.

The Lesson

Sync complexity scales with the square of the features you add. Start with explicit sync. Add real-time only when users demand it -- and they usually don't.

The best sync strategy is the one your users never have to think about. Sometimes that's real-time. More often, it's a button that says "Export."


Building an ops tool and not sure about the sync strategy? Let's figure it out together.

Want to discuss this?

If this resonated with a problem you're facing, let's talk.