A principios del año pasado montamos una ampliación a un programa a medida que tenía un cliente nuestro. Es un programa que nos gusta y que lleva sobreviviendo muchos años a los intentos de eliminarlo. Hace dos años parecía que moriría. La empresa que es cliente nuestro está creciendo mucho. Y al final para comunicarse con sus proveedores tuvieron que comprar acceso a una aplicación Web.
Al final la usabilidad de la aplicación Web es mucho peor que la de la aplicación a medida. La solución fue conectarse a la Api de la web y traernos los datos a la aplicación en local. Bueno a lo que iba. Este módulo estaba funcionando sin problemas desde hace casi un año. Como en su momento el cliente tenía prisa en usarlo, le pasamos el módulo de conexión operativo pero faltando algunas prestaciones no imprescindibles.
Nada más comenzar el año nos llaman con un error en la conexión a la Api del programa. Habían comprado un par de empresas nuevas y las habían integrado en su gestión. Y el día 1 esas empresas ya les derivaban las tareas en la aplicación Web de conexión con los proveedores. Nos damos cuenta que hay un error en los códigos de esas empresas en la Api. No usan los mismos que el resto de las empresas del grupo. Se lo comentamos al cliente y los cambia. Y que estábamos allí, le instalamos una versión más moderna del módulo de conexión. Una de las novedades era un sistema de avisos para detectar justo errores como el que les había sucedido. Si llegaban datos desde la Web con un formato desconocido el módulo envía un aviso al supervisor para que éste revise y compruebe si hay errores en los datos de la Web, en el programa local o es algún nuevo proveedor o cliente no dado de alta bien.
Al cliente le gusta el sistema. Lo que hace es que abre una pequeña ventana indicando el error y permitía copiarlo para revisarlo luego. Si se aceptaba guardaba los datos dejando el campo desconocido con un Sin especificar en origen. Le explicamos a los supervisores cómo funciona y lo ven útil, ya que ven en tiempo real los errores. Además estos días con las dos empresas con nuevos empleados accediendo al sistema hay más errores de lo normal.
Dos días después nos llaman otra vez. El módulo de conexión a la Api está caído. En la tienda tenemos un PC configurado con máquinas virtuales simulando el entorno de trabajo de este cliente. Lo arrancamos y ejecutamos la aplicación. Vemos que hay un par de datos mal grabados en la aplicación Web. Se lo decimos. Los arreglan, reinician la aplicación y vuelve a funcionar. Por si acaso activamos el log de debug en el programa en real.
Al día siguiente otra llamada igual. Nos damos cuenta de que el error es siempre a primera hora de la mañana. Vemos por el log que hay un problema con uno de los ficheros de la base de datos. Revisamos la rutina de conexión a la base de datos. Está bien, funciona sin problema. Al final ya en las Oficinas del cliente vemos que en el servidor hay dos instancias del módulo de comunicaciones de la primera versión todavía abiertas. Pensamos que el error puede estar ahí y reiniciamos el servidor. Todo vuelve a funcionar bien.
Pasa otro día y nos vuelven a llamar a primera hora. Módulo de comunicaciones caído… probamos nosotros en la tienda y todo va bien. Vamos a la Oficina del cliente. Y vemos que el error ha vuelto a salir de madrugada (el cliente tiene un negocio donde trabajan las 24 horas del día 7 días a la semana por turnos). Y entonces les decimos que nos avisen cuando los empleados del turno de noche vayan a trabajar. Cuando nos avisan vamos a la Oficina… y entonces descubrimos el problema. En el turno de noche hay veces que el supervisor hace de empleado normal. Pero se logea como supervisor en un PC del despacho pero luego sale a la sala común y trabaja desde allí logeado como empleado normal. Lo que sucedía es que no veía los avisos de errores que aparecían en su sesión de supervisor. Si aparecía un error y no se subsanaba seguían saliendo más ventanas de error… al final tantas ventanas bloqueaban al resto del módulo de comunicaciones.
La solución fue simple, pusimos un control para activar o desactivar los avisos. Ahora en el turno de noche los desactivan y ya no hay más problemas.
Como de costumbre ya puedes hacer pruebas y controles, simular el entorno de trabajo del cliente… al final lo que a los jefes y a nosotros nos pareció una buena idea el día a día de los empleados nos demostró nuestro error.