← Blog

Evitá la Sincronización en Tiempo Real Si Podés

·
ArquitecturaSyncHerramientas Operativas

El instinto por defecto al construir una app multi-dispositivo es agregar sincronización en tiempo real. Los cambios en un dispositivo aparecen al instante en otro. Se siente moderno. Se siente correcto.

También es la fuente de la mitad de los bugs en la mayoría de herramientas internas.

El Impuesto de la Sincronización

La sincronización en tiempo real suena simple hasta que la implementás. Entonces descubrís:

  • Resolución de conflictos. Dos usuarios editan el mismo registro. ¿Quién gana? "La última escritura gana" pierde datos. Los CRDTs agregan complejidad masiva.
  • Garantías de orden. Los eventos llegan fuera de orden. Tu UI muestra estado inconsistente.
  • Colas offline. El dispositivo se queda offline a mitad de sincronización. Ahora tenés un estado parcial que necesita reconciliación.
  • Debugging. Algo salió mal. ¿Qué dispositivo lo causó? ¿Cuándo? El log de sincronización tiene 10,000 eventos.

Para una app de chat o editor colaborativo, esta complejidad se justifica. ¿Para una herramienta de gestión de taller? No.

La Sincronización Explícita Es Más Simple

En la PWA de taller que construí, elegimos sincronización explícita:

  • La app funciona completamente offline con almacenamiento SQLite local.
  • Cuando el usuario quiere hacer backup, toca "Exportar" y obtiene un archivo de base de datos.
  • Cuando quiere sincronizar, envía datos explícitamente al servidor.
  • El servidor nunca sobreescribe datos locales en silencio.

Esto eliminó toda una clase de bugs. Sin conflictos de merge. Sin "¿dónde se fueron mis datos?" Sin cambios de estado misteriosos.

Cuándo la Sincronización en Tiempo Real Vale la Pena

La sincronización en tiempo real tiene sentido cuando:

  • Múltiples usuarios editan los mismos datos simultáneamente (docs colaborativos, dashboards compartidos).
  • La frescura es crítica (seguimiento de pedidos en vivo, inventario en tiempo real).
  • El modelo de datos es simple (key-value, logs append-only).

Es excesiva cuando:

  • Un usuario por dispositivo (la mayoría de herramientas internas).
  • Los datos cambian infrecuentemente (reportes semanales, configuración).
  • Los usuarios prefieren control (quieren decidir cuándo se mueven los datos).

El Punto Medio

Si necesitás algo de sincronización pero no completamente en tiempo real:

  1. Sincronización de fondo al abrir la app. Traer los datos más recientes cuando se abre. No enviar automáticamente.
  2. Envío manual con confirmación. "Tenés 12 registros nuevos. ¿Sincronizar ahora?" Dejá que el usuario decida.
  3. Sincronización append-only. Los registros nuevos se sincronizan automáticamente. Las ediciones requieren acción explícita. Esto evita la mayoría de los conflictos.

La Lección

La complejidad de la sincronización escala con el cuadrado de las funcionalidades que agregás. Empezá con sincronización explícita. Agregá tiempo real solo cuando los usuarios lo demanden — y generalmente no lo hacen.

La mejor estrategia de sincronización es la que tus usuarios nunca tienen que pensar. A veces eso es tiempo real. Más seguido, es un botón que dice "Exportar."


¿Construyendo una herramienta operativa y no estás seguro de la estrategia de sincronización? Resolvámoslo juntos.

¿Querés discutir esto?

Si esto resonó con un problema que estás enfrentando, hablemos.