Módulo 12 · Nivel empresarial (integración)

Lección 57 — Proyecto final

Defensa del backend completo y postmortem simulado — el examen final del oficio.

Publicada
En esta lección
  1. Ejercicio 1 — El material
  2. Ejercicio 2 — La defensa
  3. Ejercicio 3 — El simulacro
  4. Ejercicio 4 — El pitch
  5. Ejercicio 5 — El cierre
  6. Resumen del profesor

Ejercicio 1 — El material

  1. El inventario honesto: tests verdes (la suite entera <15 min), pipeline (el gate del 41), ADRs (12 indexados), runbook (47), mapa de cumplimiento 9/10 (el access review en issue). El gap: el game day del 54 solo corrió 2 de los 5 incidentes — la corrección: el simulacro del ejercicio 3 cierra el inventario.
  2. Las garantías al azar del sorteo: la 3 (dinero no doble), la 7 (degradación del pico), la 10 (RGPD): la 7 era la más floja (el game day incompleto) — la póliza existe (54), la evidencia completa llegó con el simulacro. La lección del examen: la garantía sin demo es una afirmación.

Ejercicio 2 — La defensa

  1. El guion del REQUEST (extracto): "El POST /pay entra por el contract guard (35)... el servicio de pagos valida el intent (14)... la saga decide: cobro FUERA de la transacción (32: el pool del 39 respira)... el resultado llega por webhook firmado (17) o reconciliación (32)... la transición CONFIRMED es la máquina de estados (00b)... el outbox publica el evento (25) tras el commit... el email sale en cola (29) con dedup... el cliente ve el problem+json si algo falla (26) con el trace_id que sigue todo el hilo (45). Cada tramo tiene su test: los nombres los dicen."
  2. El FALLO (extracto): "Cuando la pasarela tarda 5 s: el SLO del 46 pagea el burn... el timeout del 54 corta a 8 s... el breaker abre y el pool respira... el usuario ve 503 con Retry-After y su asiento retenido (32)... cuando vuelve, el retry drena y la saga converge... y el postmortem del 47 cierra con acciones". La defensa por lo que duele.
  3. Las respuestas-arma: K8s (43: el ADR con el trigger PCI/volumen; "la frontera modular es la pre-pago"), Kafka (30: "150k eventos/día: el stream de Redis cubre; el trigger es el volumen ×10 — el ADR lo fecha"), DDD parcial (52: "los VOs y el agregado Reservation puros; el CRUD en ORM; 3 semanas de DDD completo no las paga ninguna línea del mapa del 51 — el trigger: el segundo servicio").

Ejercicio 3 — El simulacro

  1. Las 5 cronologías (resumen):
(a) Latencia 5s:      SLO burn pagea (T+2m) → timeout no corta (5s<8s: lento-funcional) → breaker no abre (sin fallos) → la cura: la alerta del SLO es la ÚNICA red del lento-funcional → acción: la mezcla k6 añade el 10% lento
(b) Poller muerto:    heartbeat del 46 pagea (T+5m: no corre) → outbox_pending sube → reinicio → drenaje → convergencia. El incidente INVISIBLE sin heartbeat (cero errores)
(c) N+1 del deploy:   p95 listado sube tras deploy (la anotación del 46) → py-spy (37) → el N+1 → rollback → test de regresión (33)
(d) Redis lleno:      evict de claves → el caché frío (p95 browse sube) → el lock: test del 38 → maxmemory-policy + la alerta de memoria → el FLUSHALL probado sostiene
(e) Cobro duplicado:  el ledger (08) muestra UN cargo + la reconciliación del intent (14): el "doble" era el timeout del FRONT reintentando el POST (el navegador del usuario): la respuesta al cliente con evidencia; la acción: el front recibe 409-idempotente (14) — el bug era del cliente, la solución del contrato
  1. El veredicto del (e): el ledger dice UN cargo (intent_id único, la pasarela lo confirma); el "doble" era la RETRY del frontend ante el timeout (el usuario vio 2 spinners, 1 cargo). La respuesta al cliente (51): "revisamos con los registros de la pasarela y del banco: se cobró una vez; el segundo cobro que ves es la misma operación mostrada dos veces por tu navegador — aquí está el recibo y el identificador del banco". La lección: la queja del dinero se investiga con el ledger, no con la fe — y el fix del contrato (409 idempotente) evita la siguiente llamada.
  2. La peor cronología (el (b) del primer intento): sin la alerta del heartbeat, el poller muerto se descubrió POR EL TICKET del usuario (T+40m en vez de T+5m). El fix: la alerta del heartbeat (46) + el runbook del poller atascado — la diferencia entre 5 min y 40 min ES una alerta.

Ejercicio 4 — El pitch

  1. El pitch (extracto): "Vendemos la taquilla digital: el organizador publica, nosotros vendemos y le pasamos su dinero con comisión. Lo que compró: la garantía de que un asiento jamás se vende dos veces (aunque 5,000 compren a la vez), que cada pago se confirma o se devuelve — nunca en el limbo —, y que si algo falla sabemos qué pasó antes de que llamen. Las decisiones que más valor compraron: la cola de eventos que no pierde confirmaciones, los turnos de preventa que aguantan el viernes grande, y las fronteras modulares que nos dejan crecer sin re-escribir."
  2. Las respuestas: "cuesta ~120 €/mes con pico pagado por uso (42)"; "si se cae: suena una alerta en 2 min, el usuario ve un mensaje claro con su asiento retenido, y en 15 min está diagnosticado (46/47)"; "escala a 12k reservas/min hoy medido (36), el plan de crecimiento está escrito con triggers (55)".

Ejercicio 5 — El cierre

  1. La carta (extracto): "Empezaría con el ADR-0001 el día 1 (48); haría la disponibilidad read-only desde el principio (el caché del 38 me costó un incidente); y extraería la lógica del mecanismo desde la primera línea (28: el job de expiración nació como cron humano y lo pagué 29 lecciones después)".
  2. El arranque del siguiente proyecto: fase 1 (2 d): el dominio puro (52) + los VOs del negocio + la suite unitaria; fase 2 (3 d): las fronteras modulares con el test de frontera (53) + el outbox (25); fase 3 (2 d): el pipeline del 41 + el ADR-0001. El resto del curso: la caja de herramientas por peldaño.
  3. La checklist final (10 ítems): suite rápida en cada guardado · refactor con red · ADR antes que decisión · medir antes de optimizar · el postmortem blameless · el pitch sin jerga · el game day trimestral · el trigger antes que la moda · el negocio en el backlog · el método sobre la memoria.

El curso termina aquí: 58 lecciones, 13 módulos, un sistema completo con 10 garantías demostrables. El oficio continúa: el método queda instalado.


Resumen del profesor

  • La defensa recorre el REQUEST, el FALLO y los 3 ADRs discutidos: cada garantía con su demo — la garantía sin demo es una afirmación.
  • El postmortem simulado entrena los 5 incidentes con sus armas: el SLO para el lento, el heartbeat para el silencioso, el ledger para el dinero.
  • El oficio es el método: "no lo sé, pero así lo averiguaría" es la respuesta senior. El índice del curso es el mapa de por vida.