Local-First en la práctica: Sincronización SQLite y Firebase
En sectores críticos como el de la hostelería y los Puntos de Venta (POS), un segundo de desconexión o latencia en el servidor equivale a dinero perdido y fricción operativa. Sin embargo, la gran mayoría de las aplicaciones modernas se construyen bajo un paradigma cloud-only, donde cada clic en la pantalla depende de una llamada de red de ida y vuelta a un servidor central. Si la red cae, el negocio se detiene.
Al desarrollar Queue, el ERP y sistema de comandas e inventarios para restaurantes y cafeterías independientes, tuvimos claro que la fiabilidad de la operación debía ser absoluta. Esto nos llevó a implementar una arquitectura Local-First, donde el cliente (el dispositivo local) actúa como el source of truth (fuente de verdad absoluta) y la red pasa a ser un canal de transporte secundario para la sincronización en la nube.
A continuación, desglosamos los tradeoffs técnicos y las decisiones de diseño al integrar Drift (SQLite) y Firebase / Cloud Firestore en producción.
---
1. El Dispositivo Local como Source of Truth Absoluto
En una arquitectura local-first clásica, los datos se escriben y leen inmediatamente de una base de datos embebida en el dispositivo cliente. En Queue, implementamos Drift (un wrapper reactivo y tipado sobre SQLite escrito en Dart) dentro de nuestra aplicación Flutter.
Beneficios Inmediatos:
- Latencia Cero (0ms): Los tiempos de lectura y escritura son instantáneos porque no viajan por el cable de red. La UI responde inmediatamente a la velocidad del hardware local.
- Resiliencia Total Offline: Si el restaurante pierde la conexión a internet de manera intermitente o total durante horas, el personal de barra y cocina puede seguir facturando, modificando inventarios y enviando comandas locales sin enterarse.
---
2. Reconciliación Híbrida Asíncrona (Drift & Firebase)
La dificultad real del local-first reside en la sincronización y la reconciliación con la base de datos central en la nube (Cloud Firestore). En lugar de utilizar SDKs genéricos de sincronización bidireccional automática, Queue utiliza un protocolo híbrido propio:
- El Registro de Transacciones (Queue Sync Table): Cada escritura en Drift registra un evento de mutación en una tabla local de eventos pendientes de sincronización (un buffer de sincronización).
- Workers en Segundo Plano: Un servicio persistente corre de fondo monitoreando la conectividad de red. En cuanto detecta red estable, despacha los eventos pendientes en lotes secuenciales a un endpoint HTTPS que interactúa de manera directa con Firestore.
- Resolución de Conflictos basada en Marcas de Tiempo (LWW): Para evitar conflictos entre múltiples cajas registradoras y el dashboard del administrador en la nube, implementamos la estrategia Last-Write-Wins (El último en escribir gana). Cada registro cuenta con una marca de tiempo monotónica en microsegundos y un ID de dispositivo único que determina la precedencia histórica de cada transacción.
---
3. Tradeoffs y Lecciones Aprendidas
No todo es sencillo en el ecosistema local-first. Al migrar del esquema tradicional cloud-first, asumimos compromisos importantes:
- Complejidad en el Estado: Mantener la coherencia del inventario de insumos (ej. restar gramos de café molido) requiere que la deducción matemática ocurra de forma local inmediatamente y se proyecte hacia atrás si los lotes de sincronización llegan fuera de orden cronológico.
- Migración de Esquemas en SQLite: A diferencia de las bases de datos no relacionales en la nube donde el esquema es dinámico, modificar la base de datos local Drift requiere un manejo muy cuidadoso de migraciones incrementales en los dispositivos de los clientes para no corromper los datos locales no sincronizados.
Conclusión
El paradigma local-first no es solo una optimización de velocidad; en entornos operativos complejos, es un requisito de resiliencia y supervivencia de negocio. La combinación de la robustez transaccional de SQLite a nivel local y la escala global de Firebase permite que Queue ofrezca rigor empresarial de datos con la velocidad y fiabilidad de un sistema de escritorio clásico.
