Alejandría

Busca en Alejandría

Técnicas

Postmortems sin culpa

Aprende de los incidentes analizando el sistema, no buscando culpables.

01

En pocas palabras

Revisión estructurada tras un incidente que documenta impacto, cronología, causas contribuyentes y acciones, asumiendo que las personas actuaron razonablemente con la información que tenían.

Qué problema resuelve

Incidentes que se repiten porque el miedo a la culpa oculta información y las acciones se limitan a «tener más cuidado».

Cuándo utilizarlo

Tras incidentes con impacto en clientes, consumo relevante del error budget o casi-accidentes instructivos. Ejemplo: una migración de base de datos que bloqueó desembolsos durante 40 minutos.

02

De la idea a la práctica

Funcionamiento, ejemplos y decisiones para pasar al siguiente nivel.

Cuándo hacer uno

Define criterios objetivos de antemano para que no dependa de quién esté de guardia:

  • Impacto visible para clientes por encima de un umbral (duración o porcentaje).
  • Pérdida o corrupción de datos, o incidente de seguridad.
  • Intervención manual de emergencia (rollback, failover).
  • Consumo de más de un porcentaje acordado del error budget.
  • Cualquier persona lo solicita.

Plantilla

Sección Contenido
Resumen Tres frases: qué pasó, impacto, estado
Impacto Usuarios, transacciones, dinero, SLO afectados, duración
Cronología Hechos con hora UTC: detección, escalado, mitigación, resolución
Causas contribuyentes Técnicas, organizativas y de proceso; normalmente son varias
Qué funcionó Detección, herramientas, coordinación que conviene reforzar
Dónde tuvimos suerte Factores que evitaron un impacto mayor sin que fuera intencional
Acciones Cada una con dueño, prioridad y fecha; enlazadas a tickets

Más allá de los «5 porqués»

Los 5 porqués tienden a una cadena lineal con una única causa. Los incidentes en sistemas complejos suelen tener causas contribuyentes que se combinan. Preguntas más productivas:

  • ¿Qué sabían las personas en cada momento y qué les hizo pensar que la acción era correcta?
  • ¿Qué señales había y por qué no se vieron?
  • ¿Qué hizo que la detección o la mitigación tardaran?
  • ¿Qué barreras existían y por qué no detuvieron el problema?

Acciones que funcionan

Débil Más fuerte
«Tener más cuidado con las migraciones» Linter en CI que detecta ALTER TABLE con bloqueo en tablas grandes
«Documentar el procedimiento» Runbook automatizado, probado en un simulacro
«Formar al equipo» Alerta de burn rate que habría detectado el problema en 5 min

Prefiere controles automáticos y cambios de diseño sobre recordatorios.

Rol del líder

Asiste, escucha y protege. Agradece la transparencia de quien ejecutó el cambio. Asegura que las acciones prioritarias entran en la planificación y revisa periódicamente su cumplimiento: un postmortem sin seguimiento enseña al equipo que el proceso es un trámite.

Ejemplo de postmortem resumido

# PM-2026-031: Desembolsos detenidos 40 minutos

**Resumen**: una migración de base de datos bloqueó la tabla `desembolsos` durante 40 min;
612 desembolsos se retrasaron. Sin pérdida de datos. Resuelto.

**Impacto**: 612 clientes con desembolso retrasado (máx. 46 min). 18 % del error budget mensual.

**Cronología (UTC)**

- 14:02 Se despliega v2.31 con migración `ALTER TABLE desembolsos ADD CONSTRAINT … FOREIGN KEY`.
- 14:03 La migración espera un bloqueo; las escrituras se encolan detrás.
- 14:09 Alerta de latencia p95 > 5 s en `api-desembolsos`.
- 14:15 La guardia identifica bloqueos en `pg_stat_activity`.
- 14:31 Se cancela la migración; las escrituras se reanudan.
- 14:42 Cola de desembolsos procesada. Fin del impacto.

**Causas contribuyentes**

- La FK se añadió validando toda la tabla, con bloqueo, en lugar de `NOT VALID` + `VALIDATE`.
- No hay `lock_timeout` en las migraciones.
- La revisión del PR no incluía un checklist de migraciones.
- La alerta se basaba en latencia, no en desembolsos pendientes (detección a los 7 min).

**Qué funcionó**: el runbook de bloqueos permitió diagnosticar en 6 minutos.
**Dónde tuvimos suerte**: ocurrió fuera del pico de las 17:00.

**Acciones**

| Acción                                                        | Dueño        | Fecha |
| ------------------------------------------------------------- | ------------ | ----- |
| `lock_timeout = '3s'` por defecto en el runner de migraciones | Plataforma   | 24/10 |
| Linter de migraciones (squawk) en CI                          | Equipo Pagos | 31/10 |
| Alerta por desembolsos pendientes > 5 min                     | Equipo Pagos | 24/10 |

Guion de facilitación (60 minutos)

Tiempo Bloque Nota para quien facilita
5 min Encuadre: objetivo de aprendizaje, sin culpables Leer en voz alta la regla de no culpar
15 min Revisar y completar la cronología Preguntar «¿qué viste?», «¿qué esperabas?»
20 min Causas contribuyentes Buscar varias; evitar quedarse en la primera
15 min Acciones Priorizar controles automáticos; dueño y fecha
5 min Cierre Agradecer; confirmar quién publica el documento

Frases a reconducir: «debería haber…» → «¿qué hacía que pareciera razonable en ese momento?»; «error humano» → «¿qué permitió que ese error tuviera impacto?».

Aprender de varios incidentes

Una vez al trimestre, revisa los postmortems juntos: causas que se repiten, acciones pendientes, tiempos de detección y de mitigación. Las tendencias revelan inversiones estructurales (observabilidad, pruebas de migraciones, formación en guardias) que ningún postmortem individual justificaría por sí solo.

Criterios de implementación

Escribe el borrador en 48 horas y revísalo en una reunión facilitada por alguien no implicado. Publícalo internamente con amplio acceso. Revisa trimestralmente las tendencias (causas recurrentes, tiempos de detección) y conecta los hallazgos con las métricas DORA de recuperación.

Continúa en las fuentes

Documentación oficial para verificar detalles y explorar más.