3.025 pull requests en diez meses: un proceso de entrega con IA, desde dentro
Una plataforma para centros de formación empezó en un generador de apps con IA y hoy es un SaaS multiinquilino con app web, apps nativas para iOS y Android, 160 funciones serverless y 1.048 archivos de tests automatizados. En diez meses se fusionaron 3.025 pull requests, la mayoría escritas por agentes de código y cada una revisada, probada y publicada pasando por las mismas siete etapas. Una segunda plataforma, para un negocio de hostelería, llegó a 2.133 en seis meses de la misma forma. Así es ese proceso en el día a día, ahí están las dos puertas duras y esto es lo primero que montaría si empezara de nuevo mañana.
11 min de lectura
1. El montaje: un ingeniero principal, varios agentes, un proceso
Fui arquitecto e ingeniero principal de principio a fin. El código lo escribieron en gran parte agentes, Claude Code y Codex, trabajando en tickets en paralelo, cada uno en su propia rama. Eso solo funciona si los agentes no pueden hacer daño por su cuenta, así que el proceso fue antes que la velocidad: React en Vercel, Supabase Postgres con row-level security en cada tabla, edge functions y tareas programadas, apps nativas cuyos design tokens se generan desde el CSS web, y un pipeline de release que trata cada cambio igual, lo escriba quien lo escriba.
3.025 pull requests fusionadas en diez meses son unas 300 al mes. La cifra en sí no es lo importante; lo que importa es que cada una era lo bastante pequeña para revisarla, reversible, y pasó por staging antes de producción. La guía que escribí sobre este proceso describe las siete etapas de forma compacta. Así se viven en la práctica.
2. Barandillas antes del primer prompt
Cada repositorio tiene un archivo de instrucciones breve que los agentes leen al empezar cada sesión: la arquitectura en pocas líneas, las convenciones, cómo ejecutar los tests y una lista de lo que un agente puede y no puede hacer. Las reglas duras son pocas y absolutas. La autenticación, los pagos, el borrado de datos y los secretos siempre necesitan aprobación humana. Los agentes nunca tocan datos de producción ni cuentas reales de clientes; reciben cuentas de prueba en staging y nada más.
El archivo de instrucciones no es documentación por gusto. Es la forma más barata de no cometer dos veces el mismo error. Sin él, cada sesión empieza de cero y un agente repetirá encantado un patrón de migración que rompió staging la semana pasada. Con él, la lección se escribe una vez y cada sesión futura empieza con ella.
# AGENTS.md (excerpt)
## Never without a human approval
- auth, payments, data deletion, secrets, production config
## Never
- push to main, touch production data or real customer accounts
## Always
- one ticket = one PR; migrations idempotent, dry-run before merge
- run unit tests + type check before asking for review
## Lessons (append, never delete)
- <date>: <what went wrong> -> <the rule that prevents it>3. Cambios pequeños y reversibles, primero staging
Un ticket, una pull request, con protección de rama en main para que nadie, persona o agente, haga push directo. Una pull request que cambia mil líneas en diez funcionalidades no se puede revisar bien, por buena que sea la revisora, así que a los agentes se les pide el cambio más pequeño que cierre el ticket. Las migraciones de base de datos son idempotentes y se ejecutan en modo prueba contra la base de datos de destino antes de fusionar nada.
Cada cambio llega a un entorno de staging con la misma compilación y configuración que producción antes de acercarse a los clientes. En el release se despliegan solo las funciones que han cambiado de verdad, así cada release es pequeño y cada marcha atrás es evidente. Es la parte poco vistosa, y de ella sale casi toda la velocidad: si cada paso es pequeño y reversible, nadie tiene miedo de fusionar.
4. Verificar como un usuario, no como un compilador
Tipos en verde y tests unitarios en verde son necesarios, pero no suficientes. La plataforma tiene 1.048 archivos de tests automatizados, y la comprobación de tipos y el linter se miden contra líneas base que solo pueden mejorar, para que los agentes no empeoren nada en silencio. Aquí está la primera puerta dura: no se fusiona nada si los tests no están en verde.
Además, cada flujo se comprueba como lo viviría un usuario. Para eso construí un probador de navegador con IA: describes el flujo en lenguaje normal, por ejemplo 'una formadora crea una sesión, un alumno firma con el código QR, la formadora ve la firma sin recargar', y un agente recorre el flujo en un Chrome real y devuelve un aprobado o suspenso con errores de consola, peticiones fallidas y un prompt de corrección. Montar una prueba así lleva nueve pasos en vez de unos doscientos, y los flujos con varios roles como este son justo donde los tests clásicos se quedan cortos.
5. Revisión de impacto, y luego una persona dice que sí
Antes de que un release vaya a producción, una tabla corta responde a cuatro preguntas: qué cambia, a quién afecta, cuál es el riesgo y cuál es el camino de vuelta. Los agentes la redactan a partir de las pull requests; yo la leo. Esta es la segunda puerta dura: una persona aprueba cada fusión a producción. Lleva minutos, porque los cambios son pequeños y la tabla es corta, y atrapa los casos en que un cambio técnicamente correcto es lo que no toca un viernes por la tarde o en la semana de auditoría de un cliente.
No se trata de desconfiar de los agentes. Se trata de que las decisiones de release necesitan un contexto que no está en el código: un cliente a punto de incorporarse, una cola de soporte, una migración prevista. Ese contexto lo tienen las personas, así que la decisión también.
## Release <date> — impact check (template, example rows)
| change | who is affected | risk | way back |
|--------------------------------|------------------------|--------|--------------------------|
| attendance flow change | trainers, learners | low | revert PR, redeploy fn |
| new invoice field | admins of all tenants | medium | migration is additive |
| CRM scoring update | sales users | low | feature flag off |
Approved by: ____ (no production merge without a name here)6. Publicar, vigilar y dejar que los fallos abran tickets
Tras cada despliegue, unos smoke tests recorren las rutas vitales del sistema en directo, como el inicio de sesión y el checkout. Si una falla, el despliegue se pone en rojo y el cambio se revierte. La monitorización vigila resultados en lugar de CPU: ¿se registró la asistencia?, ¿salió la factura? Cada fallo abre automáticamente una incidencia, y la incidencia se cierra sola cuando la comprobación se recupera, así el backlog muestra problemas reales y no ruido de alertas.
Debajo está la red que nadie ve: copias cifradas siete veces al día, archivos replicados en un segundo proveedor y una restauración nocturna en un proyecto gemelo aparte que demuestra que las copias funcionan. Con agentes escribiendo código a este ritmo, poder deshacerlo todo, datos incluidos, es lo que hace aceptable ese ritmo.
7. Cerrar el círculo y medir lo correcto
Cada incidente, cada comentario de revisión que se repite, cada migración que falló en staging termina con una pregunta: ¿qué línea del archivo de instrucciones lo habría evitado? Esa línea se añade. Las respuestas a clientes las redacta un agente y las envía una persona. Con los meses, esto es lo que convierte un equipo rápido en uno seguro: las reglas crecen con el producto.
Mide el tiempo desde el ticket hasta producción, la tasa de fallo de los cambios, las pull requests fusionadas por semana y los errores que encuentran los usuarios, el mismo tipo de métricas de entrega que usa la investigación DORA. No midas líneas de código; los agentes las producen gratis. Si quieres empezar, empieza por las barandillas y staging, no por más agentes. La comprobación de madurez de abajo muestra en qué punto está un código antes de añadir velocidad.
Interactivo
¿Tu app hecha con IA está lista para producción?
Marca lo que ya se cumple. Lo que queda es tu lista de tareas, en orden.
Tus tres próximos pasos
- El código vive en Git; los cambios pasan por pull requests
- Ninguna clave secreta en el frontend; las del servidor, solo en el servidor
- Seguridad a nivel de fila (o equivalente) en cada tabla
Conclusión
Los agentes pueden escribir la mayor parte del código. El proceso decide si eso es un riesgo o una ventaja: cambios pequeños y reversibles, dos puertas duras en manos de personas y cada lección escrita de vuelta en las reglas.
Proyectos reales relacionados
Pruébalo tú mismo
Fuentes y guías oficiales
Más artículos
- La Ley de IA de la UE para medianas empresas: qué te aplica y desde cuándo
- FinOps para el gasto en IA: tokens, caché, enrutado y presupuestos que aguantan
- Hacer visible una red de restaurantes en las respuestas de la IA: un proyecto GEO paso a paso
- Cómo está hecha esta web: estática donde se puede, en streaming donde hace falta
- Costes de Kubernetes en EKS y GKE: el mismo método, otras palancas
- Una landing zone para empresas medianas, en Terraform o Bicep: las piezas que importan
- El manual de migración de sistemas heredados: oleadas, ejecución en paralelo y recuentos y checksums idénticos
- Seguridad de MCP a fondo: dejar entrar a los asistentes de IA en tu producto sin abrir las puertas
- Monitorizar resultados de negocio: paneles en verde, caja vacía
- Agentes de IA por teléfono: la arquitectura y los tropiezos que ninguna demo enseña
- Pruebas de restauración: un backup que nunca has restaurado es solo una esperanza
- Respuestas de IA en streaming en Azure Static Web Apps: la cabecera que lo retenía todo
- Construir un asistente de IA para WhatsApp de principio a fin: lo que hace falta más allá de la demo
- Sistemas air-gapped: software crítico sin conexión a internet
- IA en producción en AWS: Amazon Bedrock y AgentCore en una configuración privada
- IA en producción con Microsoft Foundry: una configuración de referencia privada para agentes
- /goal, /loop o rutinas: deja de vigilar a tu agente de programación
- Los nuevos planes de Claude: Max, Ultra y lo que significan para los equipos
- OpenAI Codex a finales de 2026: goal mode, dots y cómo blindarlo
- ¿GitHub Copilot, Claude Code o Codex? Cómo elegiría para una empresa
- Fundamentos de GEO: cómo aparecer en las respuestas de la IA
- IA en producción en Google Cloud: de Vertex AI a Gemini Enterprise Agent Platform
- LLM locales en una red air-gapped: IA para tus datos más sensibles
- Quiero ejecutar un LLM local: ¿qué servidor compro?
- MiniMax M3: ¿un modelo puntero que puedes ejecutar tú mismo?
- Investigación de prompts a gran escala con un modelo abierto
- SEO y GEO juntos: una auditoría práctica en 6 pasos
- Dimensionar bien Kubernetes: el método que llevó un clúster de 7 a 4 nodos
- IA privada para datos sensibles: un LLM local que supera la revisión de seguridad
- Del prototipo con IA a producción: las ocho capas que añado, en este orden
