lección 7
Día 5 — Post-mortem profesional y demo a stakeholders
Escribes el post-mortem blameless, presentas a Clara los resultados de la semana y el incidente se convierte en argumento para más presupuesto.
⏱ 40 min
### Viernes, 10:00 AM — Post-mortem blameless
Alberto convoca al equipo en la sala Turing. La regla del post-mortem es clara y la repite antes de empezar: "No buscamos culpables. Buscamos causas raíz y mejoras al sistema. Si alguien tiene miedo de hablar, el proceso ha fallado." Paula, Miguel, Sara y tú estáis presentes.
### Cómo saber si tu causa raíz es de verdad una causa raíz
La casilla más fácil de rellenar mal es la de la causa raíz, porque una explicación que suena razonable pasa desapercibida en la sala y luego no aguanta la primera pregunta incómoda. Antes de dar el documento por bueno, pásale tres filtros:
- 01.¿Explica todo lo que viste, o solo lo llamativo? Vuelve a la timeline y recórrela entera. Si tu causa raíz explica el OOM pero no explica por qué el executor 1 también cayó, o por qué tardó veintiún minutos en morir en vez de dos, no has terminado.
- 02.¿Se puede comprobar contra el código? Una causa raíz que menciona el groupBy tiene que coincidir con el groupBy que hay en el repositorio. Ábrelo. Este es el filtro que más incidentes reabre y el que menos se aplica.
- 03.¿Se puede refutar? Escribe la frase que, de ser cierta, tumbaría tu explicación — «si estas transacciones fueran de clientes distintos, no habría concentración y esto no pasaría» — y comprueba que es falsa. Si no eres capaz de escribir esa frase, no tienes una causa raíz: tienes una descripción.
Regla de redacción: la causa raíz es una sola, los factores contribuyentes son varios. La causa raíz es lo que, si no hubiera ocurrido, el incidente no habría ocurrido. Los factores contribuyentes son lo que lo hizo peor o lo hizo posible. «No teníamos alertas» no causó el incidente: hizo que durase veinticinco minutos más.
El formato es estándar en la industria (Google SRE Book, capítulo 15): timeline, impacto, causa raíz, mitigación, acciones con responsable y deadline. Lo escribes en un Google Doc compartido mientras habláis:
1# Post-Mortem: OOM en neobank-txn-streaming2## Metadata3- Fecha: 2024-09-204- Severidad: P1 (producción degradada)5- Duración: 47 minutos (03:12 - 03:59)6- Redactado por: [Data Engineer]7- Revisado por: Alberto Reyes, Paula García89## Resumen ejecutivo10El pipeline de streaming de transacciones sufrió un OOM por data skew11causado por un bug en el TPV de MERCH-48291 (2.8M micro-transacciones12de 0.01 EUR en 6 minutos). El servicio se restauró en 47 minutos con13un hotfix de filtro + cuarentena. Zero data loss. Impacto limitado a14features de fraude stale durante el downtime.1516## Timeline1702:47 Inicio del batch anómalo (MERCH-48291 genera 2.8M txns)1802:53 Executor 3: 14.2GB RAM (límite: 15GB)1903:01 GC pauses >30s, heartbeat timeout2003:08 Executor 3 OOM killed por Spark driver2103:09 Executor 1 OOM al recibir tasks redistribuidas (cascada)2203:12 Job falla completamente. PagerDuty alerta2303:14 Paula en #incidents, confirma solo streaming afectado2403:16 DE conectado, abre Spark UI + CloudWatch2503:35 Causa raíz identificada: data skew por bug TPV2603:45 Decisión: hotfix con filtro + cuarentena2703:49 PR abierto con 5 líneas de cambio2803:52 Paula aprueba code review de emergencia2903:55 Deploy ejecutado via GitHub Actions3003:57 Consumer lag bajando: 200K -> 100K -> 50K3103:59 Lag en 0. Servicio restaurado completamente3233## Impacto34- Features de fraude stale: 47 minutos (SLA: 5 min) -- **BREACH**35- Transacciones en cola: ~200K (drenadas en 2 min, 4 micro-batches)36- Transacciones perdidas: **0** (Kafka retiene 7 días)37- Impacto en clientes finales: **NINGUNO** (modelo usó features cached)38- Impacto financiero directo: 0 EUR39- Impacto financiero potencial: si hubiera habido fraude durante40 esos 47 min sin features frescas, pérdida estimada ~2.050 EUR.41 Sale de alertas_fraude.json, no de una estimación:42 2.357 fraudes reales/mes / 30 dias / 24 h = 3,3 fraudes/hora43 3,3 x 0,78 h = 2,6 fraudes en la ventana44 2,6 x 25 puntos de precision perdidos = 0,64 fraudes escapados45 0,64 x 3.200 EUR = ~2.050 EUR4647## Causa raíz48Bug en el terminal punto de venta (TPV) de MERCH-48291 que genera49un bucle de retry infinito. Cada retry crea una transacción real de500.01 EUR contra la MISMA tarjeta, y por tanto contra la misma cuenta51(acc_00007741). El pipeline de streaming agrupa por account_id en el52cálculo de features: las 2.8M transacciones caen todas en la misma53partición y las recibe un único executor, que acaba sin memoria.54El tope de 50.000 eventos por micro-batch limitó lo que ENTRABA,55pero no lo que se ACUMULABA en esa partición batch tras batch.5657## Factores contribuyentes581. El pipeline no tenía protección contra data skew592. No existía alerta de volumen anómalo por merchant603. El threshold de memoria de executor (15GB) era ajustado614. No había circuit breaker para merchants con volumen explosivo6263## Mitigación aplicada (hotfix)64- Filtrar MERCH-48291 del stream principal65- Escribir sus transacciones a cuarentena en S3 (no perder datos)66- Config externalizada en SSM (no requiere redeploy para futuros)6768## Acciones correctivas69Cada acción tiene responsable, deadline y prioridad (P1 = urgente).70Ver la tabla siguiente.
Post-mortem (parte 1): resumen, timeline, impacto, causa raíz y mitigación
1## Lecciones aprendidas21. El pipeline no estaba diseñado para skew -- diseñar para skew SIEMPRE32. La alerta llegó rápido, pero llegó tarde: MTTD de 25 minutos. PagerDuty no detectó el problema, detectó la consecuencia (el OOM, 21 min después del pico)43. El patrón hotfix + cuarentena funcionó bien -- estandarizar como playbook54. Kafka retention = safety net -- zero data loss incluso con 47 min down65. El equipo respondió en <5 min -- la cultura de on-call funciona76. El incidente justifica inversión en monitoring end-to-end (argumento para Clara)89## ¿Qué salió bien?10- Escalado rápido: PagerDuty avisó a menos de 1 min de que el job cayó, y había alguien mirando los logs 2 min después11- Comunicación clara entre Paula y DE en #incidents12- Diagnóstico en 20 minutos (a las 3AM, sin cafeína)13- Hotfix limpio y con PR (no "commit directo a main")14- Zero impacto en clientes finales
Post-mortem (parte 2): lecciones aprendidas y qué salió bien
### La demo de sprint — viernes 15:00
Clara, Alberto, Sara y Miguel están en la sala. Tienes 20 minutos. Presentas los 4 logros de la semana: ADR aprobado, GDPR diseñado, Feature Store implementado, e incidente resuelto. El incidente no lo escondes — lo presentas como evidencia de que el sistema necesita inversión.
1Clara Mendoza (después de tu presentación):2"Buen trabajo para una primera semana. El incidente me preocupa3menos por lo que pasó y más por lo que REVELA: no tenemos4alerting preventivo. Quiero una propuesta la semana que viene:5monitoring end-to-end con consumer lag, memoria, latencia por6micro-batch, y alertas de volumen anómalo.78Eso es lo que diferencia un prototipo de un sistema de9producción en un banco. Los prototipos se caen. Los sistemas10de producción SE ANTICIPAN a las caídas."1112Alberto Reyes (en privado después):13"El incidente de hoy es lo mejor que nos podía pasar. Suena14contradictorio, pero ahora tenemos un caso REAL para pedir15presupuesto. Antes era una petición teórica -- ahora es una16necesidad demostrada con 47 minutos de downtime documentados.17Usa el post-mortem en la próxima reunión de presupuesto."
Feedback de Clara y consejo de Alberto post-demo
Los incidentes bien gestionados son una herramienta de negocio poderosa. Un post-mortem con datos concretos (47 min downtime, 200K txns retrasadas, coste potencial de 2.050 EUR sacado del fichero de alertas) justifica presupuesto mejor que cualquier presentación de PowerPoint. Y una cifra que aguanta que alguien abra el fichero vale más que una cifra vistosa que no sale de ningún sitio.
En una demo de sprint NUNCA presentes solo éxitos. Mostrar problemas pendientes y riesgos genera más confianza que una presentación perfecta. Los VPs saben que la realidad es compleja — si todo parece "perfecto", sospechan que estás ocultando problemas. La transparencia es tu mejor aliada.
Regístrate para guardar tu progreso.