Aplicación Android industrial / Producción
SpeedPrintLINK
Aplicación Android para control de transferencia de custodia en estaciones de dispensación, con base de datos local, integración de hardware y sincronización con la plataforma cloud.
El problema
La transferencia de custodia es el momento en que un volumen de producto cambia de responsable, y la medición de ese momento tiene consecuencias legales y comerciales. El equipo que la registra está en piso, conectado a hardware por protocolos propietarios, y la red del sitio no siempre está disponible. La aplicación tiene que seguir operando sin conexión y reconciliarse después sin perder ni duplicar una sola operación.
Restricciones
- La operación no puede detenerse porque se caiga la red
- Convivencia de una base de código heredada con una capa moderna
- Integración con hardware de distintos fabricantes y protocolos
- Dispositivos en campo que no se actualizan a demanda
Decisiones
Resultado
- Registro de estructura de dispositivos hacia el cloud y descarga de su configuración
- Reemplazo de dispositivo en campo con trazabilidad del cambio
- Operación sin conexión con conciliación posterior
- Estado de hardware en tiempo real hacia la plataforma web
- Cobertura de pruebas unitarias sobre las capas modernas, más pruebas sobre dispositivo físico
El problema de fondo
La aplicación vive en el punto donde se encuentran tres mundos que no se llevan bien: hardware con protocolos propietarios, una operación que no admite pausas, y una plataforma cloud que necesita recibir todo lo que pasó. El diseño se organiza alrededor de esa tensión.
La centralización entre ambos productos
El trabajo del que más he aprendido es la integración entre esta aplicación y la plataforma cloud. No es un endpoint: es un conjunto de flujos con reglas propias.
- Registro de estructura — el dispositivo publica su configuración física hacia el cloud, que la reconoce y le devuelve su identidad dentro del sistema.
- Descarga de configuración — la plataforma es la autoridad sobre la configuración; la aplicación la consume y la aplica localmente.
- Reemplazo de dispositivo — cuando un equipo se cambia en campo, el histórico debe seguir siendo coherente. La identidad del dispositivo y la de sus datos se resuelven por separado.
- Operación sin conexión — lo registrado localmente se concilia después, sin duplicar ni perder.
Cada flujo tuvo que decidir qué lado gana en caso de conflicto. Escribirlo por flujo, en lugar de construir un sincronizador genérico, hace que esa decisión sea visible en el código.
Convivencia de dos arquitecturas
La base combina una capa heredada —estática, con acceso directo a datos y gestores— y una capa moderna con inyección de dependencias, MVVM y servicios. Conviven a propósito.
La regla que seguí: lo nuevo se construye en la capa moderna, lo heredado se toca solo cuando el requerimiento lo obliga, y ninguna capa nueva adopta patrones de la anterior por comodidad. Es más lento que reescribir, pero el producto nunca dejó de entregar.
Por qué está aquí
Porque describe el trabajo real de mantener software que ya está en producción: crecer sus capacidades, integrarlo con otro sistema, cubrirlo con pruebas y sostenerlo durante años sin el lujo de empezar de cero.
El código es propiedad de Speed Solutions. Este caso describe arquitectura y decisiones, sin incluir código fuente, datos de clientes ni cifras de negocio.