Skip to main content

Documento Post-Mortem

1. Resumen del incidente

Durante la primera semana de uso del sistema web de la farmacia, el módulo de ventas registró incorrectamente el inventario al procesar ventas simultáneas. Cuando dos empleados realizaban ventas al mismo tiempo desde dispositivos distintos, el sistema no actualizaba el stock en tiempo real, lo que provocó que se vendieran medicamentos que ya no estaban en existencia. El incidente ocurrió el lunes de la segunda semana de implementación y afectó directamente el módulo de inventario y el módulo de ventas. Se detectó cuando un cliente llegó a recoger un medicamento que el sistema marcaba como disponible pero que físicamente ya no estaba en el estante.

2. Línea de tiempo (timeline)

HoraEvento
8:00 AMApertura normal de la farmacia, sistema funcionando correctamente
9:15 AMEmpleado A registra venta de 3 unidades de Amoxicilina desde la computadora principal
9:16 AMEmpleado B consulta inventario desde la tablet y ve 5 unidades de Amoxicilina (dato desactualizado)
9:18 AMEmpleado B registra venta de 4 unidades de Amoxicilina al segundo cliente
9:20 AMSistema confirma ambas ventas sin error, stock muestra -2 unidades
9:45 AMTercer cliente solicita Amoxicilina, sistema marca 0 unidades pero el empleado no encuentra producto físico
10:00 AMEmpleado reporta inconsistencia al dueño
10:30 AMSe revisa el historial de ventas y se identifica el problema de concurrencia
11:00 AMSe desactiva temporalmente el acceso simultáneo al módulo de ventas como medida de emergencia

3. Impacto

El incidente afectó directamente a tres clientes que recibieron confirmación de compra de medicamentos que ya no estaban disponibles. Uno de ellos tuvo que ser redirigido a otra farmacia, lo que generó una mala experiencia y pérdida de confianza en el nuevo sistema. El dueño de la farmacia cuestionó la confiabilidad del sistema y consideró volver al registro manual. Indirectamente, el inventario digital quedó desincronizado con el inventario físico, lo que requirió un conteo manual completo de existencias para corregir los datos, tomando aproximadamente 4 horas de trabajo.

4. Causa raíz

¿Por qué ocurrió el problema? El sistema permitió registrar dos ventas del mismo producto simultáneamente sin verificar la disponibilidad real en el momento exacto de cada transacción.

¿Por qué sucedió eso? El módulo de ventas no implementaba un mecanismo de bloqueo o control de concurrencia al modificar el inventario.

¿Por qué pasó eso? Durante el desarrollo del MVP, se asumió que solo un empleado usaría el sistema a la vez, ya que la farmacia originalmente contaba con un solo punto de venta.

¿Por qué se dio esa situación? En la fase de levantamiento de requerimientos no se identificó que la farmacia a veces opera con dos empleados atendiendo al mismo tiempo, especialmente en horas de mayor demanda.

¿Por qué no se previno? No se realizaron pruebas de estrés ni de concurrencia antes del lanzamiento. Las pruebas únicamente verificaron el flujo de venta con un solo usuario.

Causa raíz identificada: Falta de control de concurrencia en las transacciones de venta y ausencia de pruebas con múltiples usuarios simultáneos, originada por una toma de requerimientos incompleta que no contempló el escenario de uso concurrente.

5. Acciones tomadas para solucionarlo

Como medida inmediata se restringió el acceso al módulo de ventas a un solo dispositivo a la vez para evitar nuevas inconsistencias. Se realizó un conteo manual completo del inventario físico y se actualizó la base de datos para reflejar las existencias reales. Se contactó a los clientes afectados para ofrecer disculpas y asegurar la disponibilidad de sus medicamentos. El equipo de desarrollo implementó un parche de emergencia que agregó un bloqueo optimista en las transacciones de venta, verificando la existencia real del producto justo antes de confirmar cada operación.

6. Acciones a futuro

Para prevenir que este tipo de incidente se repita, se proponen las siguientes acciones concretas: implementar transacciones atómicas en la base de datos para garantizar que las operaciones de venta y actualización de inventario sean indivisibles. Agregar validación de stock en tiempo real que verifique la disponibilidad exacta al momento de confirmar cada venta, no al momento de consultarla. Diseñar y ejecutar un plan de pruebas que incluya escenarios de concurrencia con múltiples usuarios simultáneos antes de cada nuevo lanzamiento. Mejorar el proceso de toma de requerimientos incluyendo preguntas sobre la cantidad de empleados que operan al mismo tiempo y los horarios de mayor demanda. Implementar un sistema de alertas que notifique automáticamente cuando el stock de un producto llegue a niveles críticos, evitando ventas de productos con pocas unidades sin verificación adicional.