Berke Özyaşar
Blog

App de obra offline-first: cómo diseñamos Şantiyepro

¿Cómo se diseña una app que funcione en obras sin internet? Notas sobre arquitectura offline-first, sincronización y pruebas a partir de Şantiyepro y sus 56 módulos.

·
Página de inicio del sitio web de Şantiyepro

Şantiyepro es una app de gestión de obras para el sector de la construcción y uno de nuestros productos propios. Tiene 56 módulos, desde el control de asistencia hasta la caja y las cuentas corrientes, y desde los registros de ejecución hasta las certificaciones de obra, el control del hormigón y la seguridad y salud laboral; funciona en Android e iOS y cuenta además con un WebPanel para acceder desde el ordenador. Pero su característica más determinante es que funciona totalmente offline. Soy Berke Özyaşar, y en este artículo explico los motivos de esa decisión y lo que hay que tener en cuenta al desarrollar una app offline-first.

En la obra, internet no se da por hecho

Para un software que se usa en la oficina, casi siempre hay conexión a internet. En la obra no es así. En los sótanos, entre muros de hormigón armado, en terrenos a las afueras o en urbanizaciones recién abiertas, los datos móviles son débiles o no existen. Si un encargado quiere introducir la asistencia al final del día y la app le da un «error de conexión», ese registro vuelve al papel o no se introduce nunca. Es uno de los motivos más habituales por los que no se usan las apps de campo.

Por eso el principio básico de Şantiyepro es este: la app funciona por completo sin necesidad de internet, y los datos se guardan primero en el móvil. No hace falta conexión para introducir registros, sacar informes o consultar el historial. La sincronización en la nube basada en roles entra en juego cuando el equipo necesita trabajar en conjunto.

La diferencia entre offline-first y «soporte offline»

Muchas apps ofrecen «soporte offline»: cuando se pierde la conexión, muestran los últimos datos vistos y quizá ponen en cola algunas operaciones. Offline-first parte de lo contrario: la fuente de datos principal de la app es la base de datos local del dispositivo, y el servidor es un destino de sincronización. Esta diferencia afecta a todas las capas de la arquitectura:

  • Las pantallas leen de la base de datos local, no de la red; por eso se abren igual de rápido haya conexión o no.
  • Cada registro es válido desde el momento en que se crea en el dispositivo; no espera la confirmación del servidor.
  • Los identificadores de los registros deben generarse en el dispositivo como únicos, sin consultar al servidor; de lo contrario, los registros creados a la vez en dos dispositivos entran en conflicto.
  • Los informes y cálculos, como el resumen de asistencia o el saldo de caja, deben poder hacerse en el dispositivo.

Sincronización: la parte difícil

Tener los datos en el móvil basta para un uso individual. Pero cuando el jefe de obra, la oficina técnica y contabilidad quieren ver los mismos datos, hace falta sincronización. Las preguntas que hay que responder al diseñar la sincronización en un sistema offline-first:

  • ¿Qué se envía? Hay que seguir los registros que han cambiado desde la última sincronización. Marcar cada cambio con una marca de tiempo o un número de versión permite enviar solo la diferencia.
  • ¿Qué pasa si hay un conflicto? Si dos personas modifican el mismo registro estando offline, ¿cuál prevalece? En muchos tipos de registro basta con que gane el último que escribe. Pero en los registros financieros, como los movimientos de caja y de cuentas corrientes, es mucho más seguro añadir un movimiento nuevo en lugar de modificar el existente; así, en vez de un conflicto, se generan dos registros distintos y el saldo siempre puede recalcularse a partir de los movimientos.
  • ¿Quién ve qué? En Şantiyepro la sincronización se basa en roles. Los datos que ve un encargado no son los mismos que ve el dueño de la empresa; a cada dispositivo solo deben llegar los datos a los que ese usuario tiene acceso.
  • ¿Cómo se propagan los borrados? Para que un registro borrado en un dispositivo offline se borre también en los demás, hay que marcarlo como borrado en lugar de eliminarlo físicamente.
  • Archivos grandes: Las fotos de los registros de ejecución son mucho más grandes que los datos de texto. Enviarlas en una cola aparte, cuando la conexión lo permita, evita que retrasen la sincronización de los registros.

Confianza en el terreno: firma, ubicación y hora

En la obra importa cuándo y dónde se introdujeron los registros; un acta, un albarán de entrega o una inspección de seguridad laboral no deberían convertirse después en motivo de discusión. En Şantiyepro, las firmas digitales se guardan junto con las coordenadas GPS y una marca de tiempo. Trabajar offline tiene aquí un matiz: la ubicación se puede obtener del GPS del móvil incluso sin internet, pero el usuario puede cambiar la hora del dispositivo. En este tipo de registros, guardar además de la hora del dispositivo la hora del servidor en el momento de la sincronización resulta útil para las comprobaciones posteriores.

Mantener manejables 56 módulos

Asistencia, caja, cuentas corrientes, control de cheques, ejecución, envíos internos, control del vertido de hormigón y del acero, compras, certificaciones de obra, control de calidad, seguridad laboral... El alcance de Şantiyepro es amplio porque en una obra las tareas no están aisladas unas de otras. En un producto de esta amplitud, que cada módulo se comporte como una app independiente hace imposible el mantenimiento. Los módulos deben compartir una infraestructura común: la misma capa de datos local, la misma lógica de sincronización, el mismo modelo de permisos y las mismas herramientas de informes y exportación. Así, añadir un módulo nuevo no es escribir una función desde cero, sino añadir un nuevo tipo de datos y nuevas pantallas sobre esa infraestructura.

Los usuarios del producto también son variados: contratistas, promotores de vivienda, ingenieros, técnicos de prevención de riesgos laborales, técnicos y encargados. Cada uno usa intensamente una parte distinta de la app. Mantener los menús y la pantalla principal sencillos según el rol y la necesidad es importante para que los 56 módulos no abrumen al usuario.

Pruebas: el modo avión es tu mejor amigo

La forma más eficaz de probar una app offline-first es usarla de verdad sin conexión. En una app de este tipo, la lista de pruebas debe incluir sin falta:

  • Introducir registros durante todo un día en modo avión y luego activar la conexión para observar la sincronización
  • Modificar el mismo registro offline en dos dispositivos y comprobar cómo se comportan los conflictos
  • Cortar la conexión a mitad de una sincronización y ver si los datos siguen siendo coherentes
  • Actualizar la app y verificar que los cambios de estructura de la base de datos local se aplican sin dañar los datos existentes
  • Medir el rendimiento en dispositivos antiguos y con poco almacenamiento, con muchos registros y fotos

El último punto es especialmente importante: Şantiyepro es compatible con Android 8.0 y versiones posteriores, y no todos los móviles que se usan en obra son modelos nuevos.

Que los datos se queden en manos del usuario

El enfoque offline-first tiene también una ventaja que no es técnica: los datos se quedan en el móvil del usuario. La caja de la obra, los pagos a subcontratistas y las cuentas corrientes son información sensible. El plan gratuito de Şantiyepro permite empezar con una sola obra; la sincronización en la nube entra en juego cuando el equipo quiere trabajar en conjunto. Gracias a esto, el producto sirve tanto a pequeños contratistas que trabajan solos como a equipos numerosos.

Publicación y ciclo de versiones

Şantiyepro está publicada en Google Play y en App Store. Actualizamos el producto con un ciclo de versiones de unos 45 días. En una app offline-first, como cada versión debe migrar con seguridad los datos que ya hay en el dispositivo, es importante mantener un ritmo regular y previsible.

Conclusión

Si desarrollas software para personas que trabajan sobre el terreno, hay que ver la conexión a internet no como algo que se da por hecho, sino como un extra. La arquitectura offline-first exige más trabajo de diseño, pero da al usuario una herramienta que funciona en cualquier condición. Si estás pensando en una app de campo o un producto SaaS similar, en las páginas de desarrollo de productos SaaS y desarrollo de apps móviles puedes ver cómo trabajo.

Más artículos

Publiquemos tu app juntos.

Cuéntame en pocas frases lo que quieres hacer. Respondo el mismo día.

↑ ↓ para navegar, Enter para abrir, Esc para cerrar