El día que tumbamos producción: anatomía de un incidente y lo que aprendí

El día que tumbamos producción: anatomía de un incidente y lo que aprendí

En más de 12 años trabajando en DevOps y SRE he vivido unos cuantos incidentes en producción. Ninguno se olvida, pero hay uno en particular que me enseñó más que muchos cursos juntos. Hoy quiero contártelo con todo detalle: qué pasó, cómo lo gestionamos y, sobre todo, qué cambiamos después para que no volviera a ocurrir.

El contexto

Era un despliegue rutinario: una nueva versión de un servicio con una migración de base de datos incluida. El pipeline estaba en verde, las pruebas pasaban y la revisión de código estaba aprobada. Todo pintaba bien… hasta que dejó de pintarlo.

A los pocos minutos del despliegue, las alertas de latencia empezaron a dispararse. La migración había añadido un índice sobre una tabla enorme y el bloqueo estaba encolando consultas. Resultado: timeouts en cascada, colas saturadas y 47 minutos de servicio degradado.

Cómo lo gestionamos

  • Activamos el protocolo de incidente: un canal dedicado, un responsable de coordinar (incident commander) y otro de comunicar. Nadie más toca nada sin pasar por ahí.
  • Rollback primero, diagnóstico después: revertimos la versión de la aplicación, pero la migración ya estaba a medias. Tuvimos que cancelar el índice en caliente y vigilar la replicación.
  • Comunicación constante: cada 10 minutos, una actualización clara para negocio y soporte. La incertidumbre genera más ruido que la propia caída.

El postmortem (sin culpables)

Al día siguiente hicimos un blameless postmortem. No buscamos «quién» sino «qué»: qué condiciones permitieron que ese cambio llegara a producción sin red de seguridad. De ahí salieron las mejoras de verdad:

  • Las migraciones se despliegan separadas del código, nunca en el mismo release, y siempre con estrategia expand/contract.
  • Índices grandes, siempre de forma concurrente y en ventanas de bajo tráfico.
  • Canary deployments: ahora todo cambio pasa primero por un porcentaje pequeño de tráfico real.
  • Runbooks accionables: cada alerta enlaza a un documento con pasos concretos, no a un wiki genérico.
  • Presupuesto de error: si quemamos el error budget del mes, se congelan features y se invierte en fiabilidad.

Lo que me llevé

Un incidente no es un fracaso del equipo; es un test de estrés a tus procesos. La diferencia entre una organización madura y una frágil no es que a la primera no se le caiga nada, sino cómo responde, aprende y evita repetirlo. Desde aquel día, cada vez que un pipeline está «todo en verde», me pregunto: ¿y si esto sale mal a las 18:00 de un viernes, tenemos un camino de vuelta claro?

¿Has vivido algún incidente que te haya marcado? Cuéntamelo en los comentarios, las mejores lecciones salen de las trincheras. 😊