La ingeniería de software tradicional, incluso con herramientas de asistencia de IA, a menudo mantiene al ingeniero en el bucle de ejecución, limitando la escalabilidad del proceso. Este artículo aborda el problema fundamental de cómo escalar la productividad de los ingenieros y la calidad del software en un entorno de desarrollo rápido, proponiendo un cambio de paradigma de 'human-in-the-loop' a 'human-on-the-loop'. En este último, los agentes de IA no solo asisten, sino que impulsan ciclos completos de planificación, implementación, prueba y corrección, mientras el ingeniero supervisa y valida los resultados.
Este cambio es crucial en la era actual de desarrollo de aplicaciones a gran escala, donde la complejidad y la velocidad de entrega son factores críticos. La tesis central es que al delegar la ejecución iterativa a agentes autónomos y enfocar la atención del ingeniero en la definición de objetivos, la supervisión y la validación de alto nivel, se puede lograr una mejora significativa en la eficiencia y la calidad. Esto se logra mediante la integración profunda de la verificación automatizada en el bucle del agente, asegurando que el output generado sea de alta confianza y esté listo para revisión, en lugar de ser solo 'plausible'.
Arquitectura del Sistema
La arquitectura del sistema de desarrollo asistido por agentes se basa en cinco componentes clave: Rules, Skills, Agents, Commands y Hooks. Las 'Rules' son instrucciones permanentes del proyecto que codifican correcciones de errores recurrentes. Las 'Skills' son convenciones de equipo transformadas en pasos invocables por el agente, permitiendo la reutilización de lógica. Los 'Agents' son los componentes autónomos que automatizan tareas y verificaciones. Los 'Commands' encadenan 'skills' y 'agents' en flujos de trabajo complejos, como la reproducción de bugs, la planificación de fixes y la creación de pull requests. Finalmente, los 'Hooks' son disparadores automatizados que ejecutan acciones como linters o validaciones de pruebas en puntos específicos del ciclo.
Para facilitar la interacción de los agentes, se priorizó la legibilidad arquitectónica del codebase de Forum, modularizando componentes clave para una fácil integración. En lugar de descripciones, se proporcionaron a los agentes 'tools' para interactuar directamente con el entorno, como leer la jerarquía de vistas en un simulador o listar elementos en pantalla, reduciendo errores de contexto. Se implementó un sistema de aislamiento a nivel de build, utilizando 'build flavors' separados (sandbox vs. producción) que comparten el mismo codebase pero compilan el código prototipo fuera del build de producción mediante una arquitectura de plugin/socket. Esto permite la experimentación segura con agentes sin comprometer la estabilidad de la aplicación en producción. La verificación automatizada se integra directamente en el bucle del agente, utilizando señales de pass/fail como el estado de la compilación, pruebas unitarias y coincidencia de especificaciones de UI, lo que permite un desarrollo asíncrono y pull requests pre-verificados.
Ciclo de Desarrollo 'Human-On-The-Loop'
- 1 Ingeniero: Define Objetivo Establece la meta de alto nivel para el agente.
- 2 Agente: Planifica Descompone el objetivo en pasos, genera especificación técnica.
- 3 Agente: Implementa Escribe código basado en el plan y el contexto.
- 4 Agente: Construye y Prueba Compila el código, ejecuta pruebas unitarias y de UI automatizadas.
- 5 Agente: Verifica Evalúa resultados con señales pass/fail, realiza correcciones si es necesario.
- 6 Agente: Crea PR Genera un pull request con resultados de verificación adjuntos.
- 7 Ingeniero: Revisa y Aprueba Valida el PR, el código y los resultados de verificación.
Flujo de Detección y Corrección de Bugs por Agente
- 1 Agente: Stress Testing Ejecuta escenarios de uso intensivo en builds de sandbox.
- 2 Agente: Detecta Anomalía Identifica crashes, fugas de memoria, regresiones de UI.
- 3 Agente: Aísla Repro Encuentra la secuencia de acciones que dispara el bug.
- 4 Agente: Propone Fix Genera una solución de código para el problema.
- 5 Agente: Verifica Fix Ejecuta pruebas para confirmar que el fix resuelve el bug.
- 6 Agente: Crea PR Prepara un pull request con el fix verificado.
| Capa | Tecnología | Justificación |
|---|---|---|
| orchestration | Custom Agentic Framework | Coordina la ejecución de tareas de desarrollo, desde la planificación hasta la verificación, utilizando Rules, Skills, Agents, Commands y Hooks. |
| compute | AI Agents | Ejecutan ciclos completos de desarrollo (planificar, implementar, construir, probar, corregir) y operaciones (análisis de causa raíz, stress testing). |
| security | Build Flavors (Sandbox/Production) | Aísla el código prototipo y experimental generado por agentes del código de producción, garantizando la estabilidad y seguridad de la aplicación en vivo. vs Feature gating (considerado insuficiente) Implementado mediante una arquitectura de plugin/socket para compilar código prototipo fuera del build de producción. |
| observability | Automated Verification | Proporciona señales de pass/fail (build status, unit tests, UI spec matching) integradas directamente en el bucle del agente para validar su trabajo. |
| observability | Navigation Agents | Simulan interacciones de usuario en la aplicación en vivo para realizar pruebas de regresión continuas y stress testing. |
Trade-offs
Ganancias
- ▲ Velocidad de desarrollo
- ▲ Calidad del software (detección temprana de bugs)
- ▲ Eficiencia del ingeniero
- ▲ Reducción de retrabajo
Costes
- △ Inversión inicial en legibilidad del código y tooling para agentes
- △ Necesidad de especificación técnica extremadamente precisa
Fundamentos Teóricos
Este enfoque resuena con principios de la ingeniería de software y la inteligencia artificial que se han explorado durante décadas. La idea de sistemas que se auto-corrigen y aprenden de sus errores tiene paralelos con la investigación en sistemas adaptativos y aprendizaje por refuerzo. La necesidad de una especificación precisa para la automatización, mencionada como 'Planning as technical specification', se alinea con los fundamentos de la verificación formal de software y la programación por contrato, donde la ambigüedad en los requisitos puede llevar a fallos sistémicos. Trabajos como los de C.A.R. Hoare sobre la lógica de programas y la especificación formal (Hoare, 1969) subrayan la importancia de la precisión en la definición de lo que un sistema debe hacer.
Además, la integración de la verificación automatizada en el bucle de desarrollo del agente se relaciona con la investigación en pruebas de software y la detección temprana de defectos. Conceptos como el 'shift-left testing', donde las pruebas se realizan lo antes posible en el ciclo de vida del desarrollo, son fundamentales. La capacidad de los agentes para reproducir, aislar y proponer soluciones a bugs recuerda a los sistemas expertos y la depuración automatizada, un campo de estudio activo en la IA desde sus inicios. La evolución de 'human-in-the-loop' a 'human-on-the-loop' puede verse como una extensión de la automatización progresiva en la ingeniería de software, buscando maximizar la eficiencia sin sacrificar la supervisión humana crítica.