En la lección anterior definimos qué son la Integración Continua, la Entrega Continua y el Despliegue Continuo. Ahora toca la pregunta incómoda: ¿merece la pena?. Montar un pipeline cuesta tiempo, hay que mantenerlo, consume minutos de máquina que se facturan y, si se hace mal, genera más frustración que valor. Esta lección es deliberadamente honesta: primero recorreremos los beneficios reales —con el detalle de cómo se mide cada uno, porque un beneficio que no se mide es una opinión—, y después pondremos sobre la mesa los costes y los escenarios donde CI/CD aporta poco. Usaremos como hilo el caso de Reservalia, cuyo punto de partida conocemos: despliegues manuales de 3 horas los viernes y dos incidencias graves el último trimestre. Al terminar, tendrás argumentos concretos para defender —o para descartar razonadamente— una inversión en CI/CD.
Contenido
- La balanza: dos columnas, no una
- Reducción del tiempo de entrega
- Detección temprana de defectos y el coste creciente por fase
- Menor riesgo gracias a lotes pequeños
- Repetibilidad y trazabilidad
- Feedback objetivo para el equipo
- Moral del equipo y carga del on-call
- Tabla resumen: beneficio → cómo se mide → riesgo si no se hace
- Los costes, sin edulcorar
- Cuándo CI/CD aporta poco
- Errores comunes y consejos
- Ejercicios
- Conclusión
- La balanza: dos columnas, no una
La mayoría de material sobre CI/CD presenta una lista de beneficios y se queda ahí. Eso produce equipos que montan un pipeline por moda, lo abandonan a los tres meses y concluyen que "CI/CD no funciona". La realidad es una balanza:
graph LR
subgraph BEN["✅ Beneficios"]
B1["Entrega más rápida"]
B2["Defectos detectados antes"]
B3["Menos riesgo por despliegue"]
B4["Repetibilidad y trazabilidad"]
B5["Feedback objetivo"]
B6["Mejor moral y on-call"]
end
subgraph COST["💸 Costes"]
C1["Montaje inicial"]
C2["Mantenimiento continuo"]
C3["Minutos de runner"]
C4["Pruebas inestables (flaky)"]
C5["Curva de aprendizaje"]
end
BEN --- BAL{{"¿Merece la pena<br/>en TU contexto?"}}
COST --- BAL
La respuesta suele ser "sí", pero no siempre, y desde luego no en la misma medida para un equipo de 3 personas con un proyecto interno que para uno de 40 con un SaaS de pago. La sección 10 aborda las excepciones.
- Reducción del tiempo de entrega
2.1. Dónde se va el tiempo realmente
El tiempo de entrega no es el tiempo de programar. Es el tiempo total desde que el código está escrito hasta que el usuario lo está usando. En Reservalia, hoy, ese recorrido es así:
gantt
title Ciclo actual de Reservalia: de commit a producción
dateFormat YYYY-MM-DD
axisFormat %d/%m
section Desarrollo
Diego programa la funcionalidad :a1, 2026-03-02, 3d
section Espera
Espera al viernes de despliegue :crit, a2, after a1, 6d
section Despliegue manual
Compilar, SFTP, migraciones (3 h) :a3, after a2, 1d
Fíjate en dónde está el bloque más largo: no es programar, es esperar. El cambio de Diego está terminado el martes y llega a los usuarios el viernes de la semana siguiente. La ventana de despliegue impone una espera de hasta 9 días para un cambio que tarda 3 días en escribirse.
Y esa espera no es neutral: mientras el cambio espera, se acumula con otros cambios, formando el lote grande del que hablaremos en la sección 4.
2.2. Qué cambia con CI/CD
Un pipeline automatizado ataca dos cosas a la vez:
- Elimina la ventana de espera. Si desplegar cuesta 8 minutos y no requiere que nadie se coordine, no hace falta agrupar despliegues los viernes.
- Elimina el tiempo de ejecución manual. Las 3 horas de Diego pasan a ser tiempo de máquina, y además tiempo de máquina en paralelo con otro trabajo.
El antes/después de Reservalia, con las cifras de su propio caso:
| Concepto | Antes (manual) | Después (objetivo del curso) |
|---|---|---|
| Duración del despliegue | 3 horas de trabajo de una persona | ~8 minutos de máquina, 0 minutos de persona |
| Frecuencia de despliegue | 1 por semana (viernes) | Varias al día |
| Espera media de un cambio terminado | hasta 5 días laborables | minutos |
| Personas bloqueadas durante el despliegue | 1 (Diego), a veces 2 | 0 |
| Coste anual del despliegue en horas de Diego | ~52 despliegues × 3 h = 156 horas | ~4 horas de supervisión ocasional |
Esas 156 horas son casi un mes de trabajo a jornada completa dedicado exclusivamente a copiar ficheros. Es la cifra que Marta llevará a la reunión de presupuesto.
Cuidado con las cifras. Las de esta tabla salen del caso de Reservalia, que es ficticio pero coherente. Evita citar porcentajes genéricos del tipo "CI/CD mejora la productividad un 40 %": son números que circulan sin fuente y que no resisten una pregunta. Mide tu proceso. La lección 01-05 te dará el instrumental para hacerlo.
- Detección temprana de defectos y el coste creciente por fase
3.1. El principio del coste creciente
Un defecto no cuesta lo mismo según cuándo se descubre. La razón es puramente práctica: cuanto más tarde aparece, más contexto se ha perdido y más personas hay implicadas.
| Momento de detección | Quién lo arregla | Contexto que tiene | Coste típico | Efectos secundarios |
|---|---|---|---|---|
| Al escribir el código (IDE, linter, tipos) | El autor | Total: acaba de escribirlo | Segundos | Ninguno |
| En el pipeline de CI (minutos después) | El autor | Alto: recuerda el cambio | Minutos | Ninguno; el cambio no ha llegado a main |
| En revisión de código (horas después) | El autor + revisor | Alto | Decenas de minutos | Ocupa a dos personas |
| En staging (días después) | El autor, si sigue disponible | Medio: ha cambiado de tarea | Horas | Bloquea la release |
| En producción (semanas después) | Quien esté de guardia | Bajo o nulo: puede no ser el autor | Horas o días | Incidente, usuarios afectados, posible pérdida de datos, comunicación de crisis, análisis post mortem |
No hace falta ningún estudio para entender la curva: arreglar un fallo que descubres a los 4 minutos de escribirlo es incomparablemente más barato que arreglar el mismo fallo tres semanas después, de madrugada, en una base de código que ya ha cambiado.
graph LR
A["💡 IDE<br/>segundos"] --> B["🔄 CI<br/>minutos"] --> C["👀 Revisión<br/>horas"] --> D["🧪 Staging<br/>días"] --> E["🔥 Producción<br/>semanas"]
style A fill:#d9f2d9
style B fill:#e8f5c8
style C fill:#fff2cc
style D fill:#ffe0cc
style E fill:#ffd6d6
La Integración Continua actúa desplazando la detección hacia la izquierda de esa línea. En inglés se llama shift left, y es la razón principal por la que CI existe.
3.2. El caso concreto de Reservalia
Una de las dos incidencias graves del trimestre fue esta: Diego cambió el tipo de la columna duracion_minutos de integer a numeric para admitir citas de 90,5 minutos. Había un test que lo detectaba... pero nadie ejecutó los tests aquel viernes. La aplicación estuvo devolviendo error 500 al crear cualquier cita durante 40 minutos, hasta que un cliente llamó.
Con CI, ese fallo se habría manifestado antes de fusionar el pull request, con Diego mirando la pantalla y el contexto fresco. Coste: cinco minutos. Sin CI: 40 minutos de caída, reservas perdidas, una llamada de un cliente enfadado y una tarde de post mortem.
La diferencia no está en la calidad del test. El test ya existía. La diferencia está en que un humano tiene que acordarse de ejecutarlo, y un pipeline no.
- Menor riesgo gracias a lotes pequeños
4.1. El tamaño del lote gobierna el riesgo
Cuando Diego despliega el viernes, no despliega un cambio: despliega todo lo acumulado durante la semana. Supongamos 14 commits de 3 personas.
Si algo se rompe, ¿cuál de los 14 cambios es el culpable? Nadie lo sabe. Empieza la fase de bisección manual, en producción, con usuarios afectados y prisa.
Comparemos las dos formas de trabajar:
| Aspecto | Lote grande (1 despliegue/semana, 14 commits) | Lote pequeño (varios despliegues/día, 1-2 commits) |
|---|---|---|
| Cambios por despliegue | 14 | 1-2 |
| Superficie de riesgo | Alta: 14 cosas pueden fallar a la vez | Baja |
| Diagnóstico de un fallo | Hay que descartar 14 candidatos | El culpable es evidente |
| Rollback | Revierte también 13 cambios buenos | Revierte exactamente lo que falla |
| Presión sobre quien despliega | Muy alta: si falla, es la semana entera | Baja |
| Probabilidad de que el despliegue falle | Alta (riesgo acumulado) | Baja |
La paradoja que a mucha gente le cuesta aceptar es esta: desplegar más veces reduce el riesgo total, aunque aumente el número de despliegues. Porque el riesgo no está en el acto de desplegar, sino en la cantidad de cambio no verificado que ese acto libera de golpe.
graph TD
subgraph L["Lote grande"]
L1["14 commits"] --> L2["1 despliegue"] --> L3{"¿Falla?"}
L3 -->|"sí"| L4["😱 ¿cuál de los 14?<br/>rollback total"]
end
subgraph P["Lote pequeño"]
P1["1 commit"] --> P2["1 despliegue"] --> P3{"¿Falla?"}
P3 -->|"sí"| P4["😌 es ESE commit<br/>rollback quirúrgico"]
end
style L4 fill:#ffd6d6
style P4 fill:#d9f2d9
4.2. El corolario para Reservalia
Las dos incidencias graves del trimestre ocurrieron ambas en un despliegue de viernes. No es casualidad estadística: los únicos despliegues que hacen son de viernes, y cada uno de ellos libera una semana de cambios sin verificar. Reducir el tamaño del lote es la palanca más directa que tiene el equipo para reducir su change failure rate (lo mediremos en 01-05).
- Repetibilidad y trazabilidad
5.1. Repetibilidad: el proceso no depende de quién lo ejecuta
Hoy en Reservalia, si Diego está de vacaciones, nadie sabe desplegar. El conocimiento vive en su cabeza y en un documento de Notion desactualizado. Eso es un riesgo de negocio, no solo técnico: se llama bus factor de 1.
Un pipeline convierte ese conocimiento tácito en código versionado y ejecutable:
- Está en el repositorio, cualquiera lo lee.
- Se revisa en pull requests, como cualquier otro cambio.
- Se ejecuta igual lo lance quien lo lance.
- Si algo cambia en el proceso, queda registrado en el historial con autor y motivo.
5.2. Trazabilidad: responder preguntas que hoy no tienen respuesta
Estas son preguntas que Nuria, la SRE, no puede responder hoy y que con un pipeline se contestan en segundos:
| Pregunta | Hoy en Reservalia | Con un pipeline |
|---|---|---|
| ¿Qué versión exacta hay en producción? | "La del último viernes, creo" | El SHA a3f9c21, etiquetado en el artefacto |
| ¿Quién desplegó y cuándo? | Diego, en algún momento de la tarde | Registro del pipeline con usuario, fecha y hora exacta |
| ¿Qué cambios incluye este despliegue? | Habría que reconstruirlo a mano | El diff entre el SHA anterior y el actual |
| ¿Pasó las pruebas esta versión? | Depende de si alguien se acordó | Sí o no, con el informe adjunto |
| ¿Podemos volver a la versión anterior? | Recompilar y volver a subir por SFTP (~1 h) | Redesplegar el artefacto anterior (minutos) |
¿Se aplicó la migración 0042? |
Mirar la consola de psql y confiar | Registrado en la tabla de migraciones |
Un ejemplo de la información que un pipeline deja registrada por cada despliegue —usaremos esta estructura en la lección 01-05 para calcular métricas:
{
"despliegue_id": "dep_2026_0314_1042",
"servicio": "reservalia-api",
"entorno": "prod",
"commit_sha": "a3f9c21e4b7d8f012345678901234567890abcde",
"commit_fecha": "2026-03-14T10:22:41+01:00",
"artefacto": "123456789.dkr.ecr.eu-west-1.amazonaws.com/reservalia/api:a3f9c21",
"desplegado_por": "github-actions[bot]",
"desplegado_en": "2026-03-14T10:42:03+01:00",
"resultado": "exito",
"pipeline_url": "https://github.com/reservalia/reservalia/actions/runs/8421",
"commits_incluidos": 2
}Con solo este registro, repetido en cada despliegue, ya puedes responder a todas las preguntas de la tabla anterior. Y además, como veremos, calcular tres de las cuatro métricas DORA.
- Feedback objetivo para el equipo
Uno de los beneficios menos citados y más transformadores: el pipeline sustituye opiniones por hechos.
Sin CI, las conversaciones de un equipo suenan así:
- — "Yo creo que esto está listo."
- — "A mí me funcionaba ayer."
- — "Habría que probarlo más a fondo, ¿no?"
Con CI, suenan así:
- — "El PR está verde: build, 340 tests, cobertura y lint."
- — "Falla
crearCita › rechaza solapamientos, línea 88."
La diferencia es que la segunda conversación no tiene ego. El pipeline no critica a nadie: informa. Esto tiene tres efectos concretos:
- Despersonaliza la crítica. No es "Marta dice que tu código está mal": es "el paso de tipos ha fallado". La revisión humana queda libre para lo que de verdad aporta —diseño, legibilidad, decisiones de producto— en vez de gastarse en formato y erratas.
- Da un criterio de "hecho" compartido. Definir hecho como "el pipeline está verde y el PR aprobado" elimina discusiones interminables.
- Hace visible el estado real del proyecto. Cualquiera puede mirar el historial de ejecuciones y ver si el proyecto está sano o si lleva tres días en rojo.
- Moral del equipo y carga del on-call
Este beneficio es difícil de cuantificar y, sin embargo, suele ser el que decide si un equipo persevera con CI/CD o lo abandona.
7.1. La factura oculta del despliegue manual
Vuelve al viernes por la tarde de Diego. Lo que la hoja de cálculo no recoge:
- Ansiedad anticipatoria. Desde el jueves, Diego sabe que le espera el viernes. Trabaja peor el jueves.
- Fin de semana condicionado. Si algo se rompe el viernes a las 19:00, se rompe el fin de semana de alguien.
- Miedo a cambiar cosas. Cuando desplegar da miedo, la gente evita refactorizar, evita actualizar dependencias y acumula deuda técnica. El miedo al despliegue se convierte en un impuesto sobre la calidad del código.
- Concentración de conocimiento. Diego es el único que sabe desplegar y eso, que parece poder, en la práctica es una cadena: no puede desconectar de verdad en vacaciones.
- Rotación. El agotamiento por incidentes evitables es una de las razones habituales por las que la gente cambia de trabajo. Sustituir a un desarrollador cuesta meses de productividad.
7.2. Qué cambia para el on-call
Nuria, que lleva las guardias, obtiene mejoras muy concretas:
| Situación | Sin CI/CD | Con CI/CD |
|---|---|---|
| Detección del problema | Llamada de un cliente | Alerta automática (lo veremos en 03-06) |
| Identificar el cambio culpable | Revisar 14 commits del lote | 1-2 commits, evidente |
| Revertir | Recompilar y subir por SFTP, ~1 h | Redesplegar el artefacto anterior, minutos |
| Necesidad de despertar al autor | Alta: solo él sabe qué tocó | Baja: el rollback es mecánico |
| Sensación durante la guardia | "Ojalá no pase nada" | "Si pasa, hay un procedimiento" |
La frase que resume el cambio cultural: un buen sistema de CI/CD convierte una emergencia en un procedimiento.
7.3. Una advertencia importante
CI/CD no arregla una cultura de equipo rota. Si en tu organización se culpa a las personas por los incidentes, automatizar el despliegue solo hará que las culpas lleguen más rápido. La automatización amplifica la cultura existente: si es sana, la refuerza; si es tóxica, la acelera.
- Tabla resumen: beneficio → cómo se mide → riesgo si no se hace
Esta tabla es el resumen ejecutivo de la lección. Es exactamente el material que Marta necesita para justificar la inversión:
| Beneficio | Cómo se mide | Riesgo si no se hace |
|---|---|---|
| Entrega más rápida | Tiempo desde el commit hasta producción (lead time); frecuencia de despliegue | Las funcionalidades tardan semanas en llegar; la competencia se mueve antes; el feedback de usuarios llega tarde para corregir el rumbo |
| Detección temprana de defectos | % de fallos detectados en CI frente a los detectados en producción; tiempo medio desde que se introduce un fallo hasta que se detecta | Los defectos llegan a los usuarios; el coste de arreglarlos se multiplica; se erosiona la confianza en el producto |
| Menor riesgo por lote pequeño | Nº de commits por despliegue; % de despliegues que provocan incidente (change failure rate) | Cada despliegue es un evento de alto riesgo; los diagnósticos son lentos; los rollbacks arrastran cambios buenos |
| Repetibilidad | % de pasos del despliegue automatizados; nº de personas capaces de desplegar (bus factor) | El proceso depende de una persona; imposible desplegar en vacaciones o bajas; el conocimiento se pierde con la rotación |
| Trazabilidad | ¿Se puede responder en <1 min qué SHA hay en producción y qué contiene? (sí/no) | Auditorías imposibles; diagnósticos a ciegas; incumplimiento de requisitos normativos en sectores regulados |
| Feedback objetivo | Tiempo medio de respuesta del pipeline en un PR; % de PR con pipeline verde antes de fusionar | Las revisiones se gastan en erratas; los desacuerdos se resuelven por jerarquía y no por evidencia |
| Moral y on-call | Nº de incidentes fuera de horario; tiempo de restauración del servicio; encuestas internas de confianza en el despliegue | Agotamiento, rotación, miedo a cambiar código, deuda técnica creciente |
La forma estándar y reconocida en el sector de medir varios de estos beneficios son las métricas DORA (frecuencia de despliegue, lead time for changes, change failure rate y time to restore service). Las desarrollaremos en detalle en la lección 01-05, junto con la manera práctica de instrumentarlas en Reservalia. De momento quédate con que existen y con que dan un lenguaje común para hablar de esto con dirección.
- Los costes, sin edulcorar
Todo lo anterior tiene una factura. Ignorarla es la vía rápida al abandono del pipeline a los tres meses.
9.1. Coste de montaje inicial
Escribir el primer pipeline útil no son dos tardes. Para un proyecto del tamaño de Reservalia, un cálculo realista:
| Tarea | Esfuerzo orientativo |
|---|---|
| Primer workflow de build + tests | 1-2 días |
| Contenerizar la aplicación (Dockerfile funcional y ligero) | 2-4 días |
| Gestión de secretos y credenciales de AWS | 1-2 días |
| Despliegue automatizado a un entorno (staging) | 3-5 días |
| Migraciones de base de datos automatizadas y seguras | 3-5 días |
| Despliegue a producción con rollback | 3-5 días |
| Total orientativo | 3-5 semanas de una persona, repartidas |
Y hay un coste añadido difícil de tragar: durante esas semanas, conviven los dos procesos. Sigues desplegando a mano mientras construyes el automático. Es trabajo doble temporal, y es la fase en la que más proyectos se abandonan.
9.2. Coste de mantenimiento
El pipeline es software y, como todo software, se pudre si no se cuida:
- Las acciones y plugins de terceros publican versiones nuevas y abandonan las antiguas.
- Las imágenes base de los runners cambian (una actualización del sistema operativo del runner puede romper una build).
- Las versiones de Node, Python o Java llegan a fin de vida.
- Las credenciales caducan y hay que rotarlas.
- Cada nueva funcionalidad del producto puede requerir un paso nuevo en el pipeline.
Cuenta con medio día al mes de mantenimiento para un proyecto pequeño, más los picos cuando algo grande cambia. Lo trataremos a fondo en el módulo 4.
9.3. Coste de ejecución: los minutos de runner
Esto es dinero contante. Los proveedores de CI/CD alojados facturan por minuto de ejecución, y las cuotas gratuitas se agotan antes de lo que parece.
Hagamos el cálculo para Reservalia:
# Supuestos de Reservalia (equipo de 3 personas):
# - 6 pull requests al día
# - cada PR se actualiza 2 veces de media → 12 ejecuciones/día por PR
# - 4 fusiones a main al día → 4 ejecuciones del pipeline completo
# - 20 días laborables al mes
# Duración de cada tipo de ejecución:
# pipeline de PR (build + tests + lint) → 8 min
# pipeline de main (todo + build de imagen) → 14 min
# Minutos de PR al mes:
# 12 ejecuciones/día × 8 min × 20 días = 1.920 min
# Minutos de main al mes:
# 4 ejecuciones/día × 14 min × 20 días = 1.120 min
# TOTAL ≈ 3.040 minutos/mesTres mil minutos al mes en un proyecto pequeño. Con runners de mayor tamaño (más CPU y RAM), el precio por minuto se multiplica. Y hay un multiplicador que sorprende a mucha gente: en una matriz de builds (por ejemplo, probar en Node 18, 20 y 22 × Linux y macOS), los minutos se multiplican por el número de combinaciones, y los runners de macOS suelen facturarse a un múltiplo del precio de Linux.
Las palancas para controlarlo —caché de dependencias, ejecución condicional por carpetas modificadas, cancelar ejecuciones obsoletas, paralelizar bien— son materia del módulo 4, lección 04-04.
9.4. Coste de las pruebas inestables (flaky)
Una prueba flaky es la que a veces pasa y a veces falla sin que el código haya cambiado. Causas típicas: dependencias del reloj, esperas fijas en pruebas de interfaz, orden de ejecución, estado compartido en la base de datos, condiciones de carrera, llamadas a servicios externos.
Son el veneno más eficaz contra un pipeline, y el mecanismo es psicológico:
graph TD
A["Un test falla<br/>intermitentemente"] --> B["El equipo aprende:<br/>'reintenta y ya pasa'"]
B --> C["Se normaliza<br/>ignorar el rojo"]
C --> D["Un fallo REAL<br/>se ignora también"]
D --> E["🔥 El fallo llega<br/>a producción"]
E --> F["'El CI no sirve<br/>para nada'"]
F --> G["Se desactivan tests<br/>o se ignora el pipeline"]
style E fill:#ffd6d6
style G fill:#ffd6d6
El daño no es el tiempo perdido en reintentos: es que destruyen la señal. Un pipeline en el que no se confía es peor que no tener pipeline, porque cuesta dinero y da falsa seguridad. La única política sostenible es tratar un test flaky como un fallo de prioridad alta: se arregla o se pone en cuarentena explícita con un plazo, nunca se "reintenta y a otra cosa". Lo abordaremos en la lección 02-04.
9.5. Curva de aprendizaje y coste cognitivo
Añadir CI/CD añade un sistema más que el equipo debe entender: YAML con su sintaxis y sus trampas, el modelo de ejecución de la herramienta, contenedores, gestión de secretos, permisos en la nube. Para un equipo junior, esto es real y hay que presupuestarlo. La buena noticia es que es conocimiento transferible: los conceptos del módulo 1 valen para cualquier herramienta, como veremos en 01-03.
- Cuándo CI/CD aporta poco
Con honestidad, hay contextos donde la inversión no compensa —o compensa solo en parte:
| Contexto | Por qué aporta poco | Qué hacer en su lugar |
|---|---|---|
| Prototipo o prueba de concepto que se va a tirar en dos semanas | El pipeline sobrevivirá al proyecto | Ejecutar los tests a mano; como mucho, un workflow de 10 líneas que corra npm test |
| Proyecto de una sola persona sin usuarios reales | No hay integración que hacer: no hay con quién integrar | Un CI mínimo aporta igualmente red de seguridad; el CD, poco |
| Software con ciclos de release muy largos por regulación (dispositivos médicos, aviónica, banca crítica) | El despliegue continuo a producción es directamente ilegal o impracticable | CI completa y Entrega Continua hasta el entorno previo; la puerta manual es un requisito, no un fallo |
| Sistemas empotrados o distribución física | El "despliegue" implica hardware o distribución física | CI y construcción automatizada de firmware sí aportan; el CD no aplica igual |
| Aplicaciones móviles en tiendas | La revisión de la tienda impone días de latencia | CI y entrega automatizada a canales de prueba internos; despliegue continuo puro, no. Lo veremos en 05-02 |
| Base de código sin ninguna prueba automatizada | Un pipeline verde que no prueba nada da falsa confianza, que es peor que ninguna | Invertir primero en tests de las rutas críticas; después automatizarlos |
| Equipo en crisis, con la casa ardiendo | No hay capacidad para un proyecto paralelo de 4 semanas | Empezar por lo mínimo: un workflow que ejecute los tests en cada PR. Eso solo ya cambia mucho |
Fíjate en un matiz que aparece varias veces: incluso donde el Despliegue Continuo no aplica, la Integración Continua casi siempre sí. El escalón de abajo de la pirámide de 01-01 es rentable en prácticamente cualquier contexto con más de una persona y más de un mes de vida.
Errores Comunes y Consejos
Error 1: vender CI/CD con cifras genéricas de internet. "Los equipos que hacen CI/CD despliegan 200 veces más" es un titular sin contexto. Si lo llevas a una reunión, la primera pregunta será "¿de dónde sale?" y no tendrás respuesta. Lleva tus números: 156 horas al año de Diego copiando ficheros es un argumento que nadie discute.
Error 2: presentar solo la columna de beneficios. Si prometes que todo será más rápido y omites las 4 semanas de montaje y los 3.000 minutos al mes, la primera factura destruirá tu credibilidad. Presenta la balanza completa; da mucha más confianza.
Error 3: medir el éxito por "tenemos pipeline". Tener un ci.yml no es un resultado. Los resultados son: el lead time bajó de 9 días a 2 horas, o el número de despliegues fallidos cayó de 2 por trimestre a 0. Define la métrica antes de empezar.
Error 4: automatizar el despliegue antes de tener pruebas. Es el orden equivocado y el más frecuente. Automatizar un despliegue sin pruebas fiables solo consigue llevar los errores a producción más rápido y más a menudo. Primero pruebas, luego automatización del despliegue.
Error 5: tolerar tests flaky "temporalmente". Ese "temporalmente" se convierte en permanente en tres semanas y arrastra la credibilidad del pipeline entero. Trátalos como bugs de prioridad alta desde el primer día.
Consejo 1: mide tu línea base esta misma semana. Cronometra el próximo despliegue manual. Cuenta cuántos días pasan entre commit y producción en los últimos 10 cambios. Sin línea base, dentro de seis meses no podrás demostrar nada.
Consejo 2: empieza por el paso más doloroso. No intentes montar el pipeline completo. Si lo que más duele es que nadie ejecuta los tests, empieza por un workflow que ejecute los tests en cada PR. Un beneficio visible en la primera semana compra el apoyo del equipo para el resto.
Consejo 3: presupuesta el mantenimiento desde el principio. Reserva medio día al mes en la planificación. Si el mantenimiento del pipeline es siempre trabajo "que se hace en los huecos", nunca se hará y el pipeline se degradará hasta que alguien lo desactive.
Consejo 4: cuenta también los beneficios no técnicos. Que Diego pueda irse de vacaciones sin ser el único que sabe desplegar es un beneficio de continuidad de negocio. Suele convencer a dirección más que cualquier argumento técnico.
Ejercicios
Ejercicio 1: construir el caso de negocio de Reservalia
Marta tiene 15 minutos con la dirección para pedir 4 semanas de trabajo de Diego dedicadas a montar el pipeline. Con los datos del caso —despliegues semanales de 3 horas, dos incidencias graves el último trimestre, equipo de 3 personas—, prepara:
- El coste anual actual en horas del proceso manual de despliegue.
- Una estimación del coste de la inversión (montaje + mantenimiento del primer año), en horas.
- El punto de equilibrio: ¿a partir de cuántos meses la inversión se ha pagado sola, contando solo el tiempo de despliegue?
- Dos beneficios que no aparecen en ese cálculo pero que deberías mencionar igualmente.
Supón una jornada de 8 horas y 20 días laborables al mes.
Ejercicio 2: decidir en cuatro escenarios
Para cada escenario, decide qué recomendarías —CI completa, CI + Entrega Continua, Despliegue Continuo o nada de momento— y justifica en dos o tres frases:
- Una desarrolladora freelance mantiene un blog personal generado estáticamente. Publica un artículo al mes. No tiene tests.
- Una startup de 12 personas con un SaaS B2B de pago. Tienen 400 tests y una cobertura razonable. Despliegan cada dos semanas, con estrés.
- Un equipo de 8 personas que desarrolla el software de dosificación de una bomba de infusión hospitalaria. Cada versión requiere certificación de un organismo regulador.
- Un equipo de 5 personas que ha heredado un monolito PHP de 12 años sin ninguna prueba automatizada. Despliegan por FTP y quieren "poner CI/CD ya".
Ejercicio 3: diagnosticar un pipeline que ha dejado de aportar
El equipo de otra empresa, Citalia, montó CI/CD hace 8 meses. Estos son sus datos actuales:
- El pipeline tarda 47 minutos en un pull request.
- De las últimas 100 ejecuciones, 31 fallaron; al reintentarlas sin cambiar nada, 26 pasaron.
- La política del equipo es "si falla, dale a Re-run jobs".
- La factura de minutos de runner ha subido un 80 % en 4 meses.
- La semana pasada llegó a producción un bug que tenía un test que lo cubría.
Responde:
- ¿Cuál es el problema raíz y cuáles son consecuencias suyas?
- ¿Qué beneficio de los de esta lección han perdido, aunque el pipeline "funcione"?
- Propón tres acciones ordenadas por prioridad.
Soluciones
Solución al Ejercicio 1
1. Coste anual actual del despliegue manual
# Despliegues: 1 por semana × 52 semanas = 52 despliegues/año
# Duración: 3 horas cada uno
52 × 3 = 156 horas/año de Diego
# Incidencias: 2 graves por trimestre = 8 al año
# Coste realista por incidencia grave (diagnóstico + arreglo + despliegue
# de urgencia + post mortem), repartido entre las personas implicadas: ~6 h
8 × 6 = 48 horas/año
# COSTE ANUAL TOTAL ≈ 204 horas ≈ 25,5 jornadas ≈ 1,3 meses de trabajo2. Coste de la inversión (primer año)
# Montaje: 4 semanas × 5 días × 8 h
4 × 5 × 8 = 160 horas
# Mantenimiento: 0,5 días/mes × 12 meses × 8 h
0,5 × 12 × 8 = 48 horas
# Minutos de runner: coste monetario, no de horas.
# Se estima aparte (≈ 3.000 min/mes) y se declara explícitamente.
# INVERSIÓN PRIMER AÑO ≈ 208 horas3. Punto de equilibrio
# Ahorro mensual estimado (solo tiempo de despliegue):
# antes: 4,3 despliegues/mes × 3 h = 13 h/mes
# después: ~0,3 h/mes de supervisión
# ahorro ≈ 12,7 h/mes
# Si añadimos la reducción de incidencias (supongamos que pasan de 8 a 3
# al año, es decir de 4 h/mes a 1,5 h/mes de coste): +2,5 h/mes
# Ahorro total ≈ 15 h/mes
# Punto de equilibrio: 208 h de inversión ÷ 15 h/mes ahorradas
208 / 15 ≈ 14 meses (contando el mantenimiento del primer año)
# Si solo se cuenta el montaje (160 h), el equilibrio llega antes:
160 / 15 ≈ 11 mesesInterpretación honesta: el retorno puramente contable llega alrededor del primer año. Esto es importante y hay que decirlo: si vendes "se paga en dos meses", quedas retratado. Lo que hace que la inversión merezca la pena claramente son los beneficios que no están en esta cuenta.
4. Beneficios fuera del cálculo
- Reducción del riesgo de negocio: las incidencias en producción de una plataforma de reservas no cuestan solo horas de ingeniería; cuestan citas perdidas para los clientes de Reservalia y reputación. Una caída de 40 minutos en horario comercial afecta a reservas reales.
- Eliminación del bus factor: hoy, si Diego se pone enfermo, Reservalia no puede desplegar ni siquiera una corrección crítica. Eso es un riesgo de continuidad de negocio, no un inconveniente.
- Velocidad de reacción: con despliegue automatizado, corregir un bug detectado a las 10:00 es cuestión de minutos, no de esperar al viernes.
- Capacidad de crecer: el proceso actual no escala a 6 personas. Si Reservalia contrata, el cuello de botella es estructural.
Solución al Ejercicio 2
-
Blog personal estático: nada de momento, o un CI mínimo. Un artículo al mes, sin tests, sin usuarios que dependan de ello. Lo máximo justificable es un workflow trivial que construya el sitio y despliegue el HTML —que, de hecho, muchos alojamientos estáticos ya ofrecen sin configuración. Montar un pipeline elaborado aquí es un ejercicio de aprendizaje, no una necesidad.
-
Startup SaaS B2B: CI completa + Entrega Continua, con vista al Despliegue Continuo. Es el escenario donde CI/CD rinde más. Tienen tests y cobertura razonable —la base necesaria— y el estrés de las releases quincenales indica lotes demasiado grandes. Recomendación: CI en cada PR desde ya, y automatizar el despliegue hasta staging y hasta producción con puerta manual. Cuando el change failure rate baje de forma sostenida, pueden plantearse quitar la puerta.
-
Bomba de infusión hospitalaria: CI completa, Entrega Continua hasta el entorno de validación, y Despliegue Continuo descartado. El marco regulatorio exige evidencia documentada y certificación por versión; desplegar automáticamente es inviable. Pero CI aporta muchísimo aquí: pruebas exhaustivas automatizadas, trazabilidad completa de qué se construyó y con qué (justo lo que un auditor pide), y builds reproducibles. La puerta manual no es una carencia del pipeline: es un requisito del dominio.
-
Monolito PHP sin tests: CI mínima, pero el orden importa. El error sería automatizar el despliegue primero: conseguirían llevar errores a producción más rápido. Orden recomendado: (a) montar el pipeline de build y ejecución de tests, aunque al principio casi no haya tests; (b) añadir tests de las 5-10 rutas críticas de negocio —lo que un usuario no puede dejar de poder hacer—; (c) añadir análisis estático, que da valor inmediato sin escribir tests; (d) solo entonces, automatizar el despliegue, empezando por un entorno que no sea producción. Este caso concreto lo desarrollaremos en la lección 05-04.
Solución al Ejercicio 3
1. Problema raíz y consecuencias
El problema raíz son las pruebas inestables (flaky): de 31 fallos, 26 pasaron al reintentar sin tocar nada. Eso significa que aproximadamente el 84 % de los fallos son ruido. Todo lo demás es consecuencia:
- La política de "dale a Re-run" es una adaptación del equipo al ruido, no una causa.
- La factura de runners subió un 80 % en parte por los reintentos de ejecuciones de 47 minutos.
- El bug que llegó a producción teniendo un test que lo cubría es la consecuencia final y previsible: el test falló de verdad, alguien reintentó por costumbre, coló en el segundo intento o se ignoró el rojo.
Hay un problema secundario e independiente: 47 minutos de pipeline en un PR es demasiado. Rompe el bucle de feedback rápido —la gente cambia de tarea mientras espera— y multiplica el coste de cada reintento.
2. Beneficio perdido
Han perdido el feedback objetivo (sección 6) y, con él, la detección temprana de defectos (sección 3). El pipeline sigue ejecutándose, pero ha dejado de ser una señal fiable: un rojo ya no significa "hay un problema", significa "vuelve a intentarlo". En el momento en que el equipo deja de creerse el resultado, el pipeline pasa de activo a pasivo: cuesta dinero y da falsa seguridad. Están pagando la columna de costes íntegra sin cobrar la de beneficios.
3. Acciones por prioridad
- Prohibir el reintento ciego y poner los flaky en cuarentena. Instrumentar la detección de tests inestables (marcar los que fallan y pasan sin cambio de código), sacarlos de la suite bloqueante y meterlos en una lista explícita con responsable y fecha límite. Objetivo inmediato: que un rojo vuelva a significar algo. Sin esto, nada más importa.
- Arreglar los flaky de verdad, empezando por los más frecuentes. Suelen concentrarse en unos pocos: esperas fijas, dependencias del reloj, estado compartido entre tests. Atacar el top 5 elimina normalmente la mayor parte del ruido.
- Reducir el tiempo del pipeline por debajo de 10-15 minutos en PR. Paralelizar jobs, cachear dependencias, ejecutar solo lo afectado por los ficheros modificados, y mover las suites lentas (end-to-end completas) a una ejecución posterior al merge o nocturna. Esto reduce a la vez la factura y la tentación de saltarse el proceso.
Una cuarta acción de refuerzo: publicar un panel con el porcentaje de ejecuciones verdes a la primera. Es la métrica que hace visible si el problema está mejorando o no.
Conclusión
En esta lección hemos puesto la balanza completa sobre la mesa:
- Los beneficios son reales y medibles: entrega más rápida (Reservalia recupera ~156 horas al año solo en tiempo de despliegue), detección temprana de defectos —cuyo coste crece drásticamente con cada fase que atraviesan—, menor riesgo por lotes pequeños, repetibilidad que elimina el bus factor, trazabilidad que responde preguntas hoy imposibles, feedback objetivo que despersonaliza la crítica, y un impacto directo en la moral del equipo y en la carga de las guardias.
- Cada beneficio tiene su forma de medirse. Un beneficio que no se mide es una opinión, y las opiniones no sobreviven a una revisión de presupuesto.
- Los costes también son reales: semanas de montaje, mantenimiento continuo, miles de minutos de runner al mes incluso en proyectos pequeños, y sobre todo el veneno de las pruebas inestables, que destruyen la señal y con ella todo el valor del sistema.
- CI/CD no es universalmente rentable. En prototipos, proyectos individuales o software fuertemente regulado, la parte de despliegue continuo aporta poco. La Integración Continua, en cambio, es rentable en casi cualquier contexto con más de una persona implicada.
Hemos mencionado varias veces que existe una forma estándar de medir todo esto: las métricas DORA. Les dedicaremos la lección 01-05 completa.
Pero antes de medir nada hay que decidir con qué herramienta vamos a construir el pipeline, y el panorama es amplio y confuso: GitHub Actions, GitLab CI, Jenkins, CircleCI, Argo CD, Tekton... En la siguiente lección, Herramientas Populares de CI/CD, dibujaremos el mapa completo del ecosistema, veremos qué categorías existen y en qué se diferencian realmente, y justificaremos por qué este curso usará GitHub Actions como herramienta principal.
Curso de CI/CD: Integración y Despliegue Continuo
Módulo 1: Introducción a CI/CD
- Conceptos Básicos de CI/CD
- Beneficios de CI/CD
- Herramientas Populares de CI/CD
- El Proyecto del Curso: la Aplicación que Vamos a Automatizar
- Métricas DORA: Cómo se Mide la Entrega de Software
Módulo 2: Integración Continua (CI)
- Introducción a la Integración Continua
- Configuración de un Entorno de CI
- Automatización de la Construcción
- Pruebas Automatizadas
- Calidad de Código y Análisis Estático
- Artefactos, Versionado y Promoción
- Integración con Control de Versiones
Módulo 3: Despliegue Continuo (CD)
- Introducción al Despliegue Continuo
- Automatización del Despliegue
- Infraestructura como Código y Entornos Reproducibles
- Estrategias de Despliegue
- Feature Flags, Rollback y Recuperación ante Fallos
- Monitoreo y Retroalimentación
Módulo 4: Prácticas Avanzadas de CI/CD
- Pipelines de CI/CD
- Gestión de Dependencias
- Seguridad en CI/CD
- Escalabilidad y Rendimiento
- Pipeline as Code: Plantillas, Reutilización y Pruebas del Pipeline
- Bases de Datos en el Pipeline: Migraciones Seguras
Módulo 5: Implementación de CI/CD en Proyectos Reales
- Caso de Estudio: Proyecto Web
- Caso de Estudio: Aplicación Móvil
- Caso de Estudio: Microservicios
- Caso de Estudio: Modernizar un Proyecto Legacy
Módulo 6: Herramientas y Tecnologías
- Jenkins
- GitLab CI/CD
- CircleCI
- Travis CI
- Docker y Kubernetes
- GitHub Actions a Fondo
- Comparativa y Criterios para Elegir Herramienta
Módulo 7: Ejercicios Prácticos
- Ejercicio 1: Configuración de un Pipeline Básico
- Ejercicio 2: Integración de Pruebas Automatizadas
- Ejercicio 3: Despliegue en un Entorno de Producción
- Ejercicio 4: Monitoreo y Retroalimentación
- Ejercicio 5: Endurecer el Pipeline con Seguridad y Secretos
- Proyecto Final: Pipeline Completo de Extremo a Extremo
