Para cuantificar el impacto de la IA generativa en la productividad de los ingenieros, es necesario ir más allá de las percepciones y utilizar métricas medibles de finalización de tareas. Durante ocho meses, como AI champion de un equipo de seis desarrolladores, hice seguimiento de la productividad en distintas etapas de la evolución del flujo de trabajo. Antes de implementar IA en el ciclo de desarrollo de software, el equipo estableció una línea base de productividad de aproximadamente 15 historias de usuario por iteración. Durante las primeras etapas de implementación y experimentación con los flujos de trabajo, la productividad bajó a 12 historias de usuario por iteración mientras los ingenieros se adaptaban a nuevos patrones de interacción y formas de trabajo. Después de seleccionar y perfeccionar un flujo de trabajo más simple, la métrica llegó a 27 historias de usuario por iteración.
En nuestra experiencia, las mejoras de rendimiento derivadas de la integración de IA no fueron lineales. Hubo una caída inicial en el rendimiento antes de establecer la base técnica necesaria para acelerar la adopción de manera sostenida.
Una estrategia paso a paso para integrar IA en el ciclo de desarrollo de software
La transición del equipo de ingeniería desde el desarrollo manual hacia una entrega estable en producción con asistentes de IA requirió una implementación gradual, no una adopción repentina.
Etapa 1: Fundamentos y confianza en el código
Comenzamos con conceptos fundamentales, pasando de modelos prácticos de alto nivel a demostraciones pequeñas y concretas. En lugar de centrarnos en la marca de un proveedor específico, nos enfocamos en la aplicación práctica. El principal obstáculo en esta etapa inicial fue psicológico. Los ingenieros necesitaban pasar de confiar en los resultados generados por la IA a confiar en el código compilado. Esto requirió desarrollar una comprensión técnica sólida de las limitaciones de la ventana de contexto, la creación de plantillas de prompts y una verificación automatizada rigurosa.
Etapa 2: Experimentación iterativa en sprints de Scrum
Incorporamos talleres prácticos semanales de dos horas con el apoyo del liderazgo de ingeniería. Estas sesiones periódicas ofrecieron un entorno controlado para estimar tareas, analizar modos de error y revisar pull requests generados. Fuera de estas horas estructuradas, los ingenieros tenían libertad para explorar herramientas de IA dentro de los sprints estándar de Scrum de dos semanas, sin instrucciones diarias explícitas. El objetivo era fomentar una adopción orgánica e identificar las áreas en las que la asistencia automatizada resultaba realmente útil dentro del ciclo de desarrollo.
Etapa 3: Avanzar hacia el desarrollo asistido por IA como práctica predeterminada
La transición al uso en producción fue gradual, no inmediata. Durante el período piloto, el equipo integró IA en una proporción cada vez mayor de las tareas de cada sprint. En las etapas finales de la iniciativa, el equipo llegó a un consenso para adoptar un flujo de trabajo ligero como método principal para completar las tareas, canalizando el trabajo de las funcionalidades principales a través del proceso establecido.
Evolución de la arquitectura de contexto y control
Lograr una velocidad de desarrollo sostenible requirió perfeccionar las metodologías de manera sistemática. Al inicio de la iniciativa, evaluamos frameworks de especificación más robustos, como spec-kit, para establecer restricciones claras de diseño. Aunque esta metodología permitió definir límites, la carga administrativa, específicamente la cantidad de pasos obligatorios y documentación que no se utilizaba, ralentizó el flujo de trabajo.
Posteriormente, probamos almacenar el estado de ejecución directamente en archivos locales del repositorio para facilitar la auditoría. Sin embargo, la implementación práctica mostró que almacenar datos en archivos funciona como una capa de almacenamiento, pero no evita los bucles infinitos. Detener una ejecución sin control requiere guardrails explícitos definidos directamente en las definiciones de las skills. Además, ampliar las ventanas de contexto del modelo no elimina los resultados incorrectos o sin respaldo. El refinamiento en varias etapas mediante chats interactivos permite fortalecer el contexto a lo largo de iteraciones sucesivas y obtener resultados técnicos de mayor calidad.
También observamos que permitir que los modelos generaran copias locales intermedias de documentación estática provocaba cambios de contexto difíciles de detectar. Reemplazar estos archivos locales intermedios por enlaces de solo lectura a una única fuente de información redujo el riesgo de que el modelo sobrescribiera contenido y permitió preservar la integridad de las políticas. Finalmente, abandonamos el almacenamiento de estado local en favor de un flujo de trabajo mínimo que combina enlaces directos a documentación de solo lectura, definiciones estrictas de skills y refinamiento en varias etapas mediante chat integrado con Jira.
Un diseño efectivo del flujo de trabajo busca un equilibrio entre el aislamiento automatizado y el refinamiento interactivo. Utilizar instrucciones nuevas y contextualizadas paso a paso, junto con herramientas de solo lectura, ayuda a evitar la pérdida de contexto de manera mucho más efectiva que almacenar datos en archivos locales.
Resolución pragmática de problemas en la práctica cotidiana de ingeniería
En lugar de imponer algoritmos formales de ejecución, la elección de las tareas se mantuvo como una decisión operativa que las parejas de desarrolladores tomaban de forma dinámica durante el proceso de implementación.
Para tareas de baja complejidad, como pequeños ajustes o historias de usuario individuales, los desarrolladores optaban por una implementación manual cuando recopilar contexto y generar indicaciones añadía una carga innecesaria. Prescindir de la IA para correcciones sencillas evitaba retrasos administrativos. En cambio, para historias de usuario complejas que requerían análisis de diseño, creación de nuevas funcionalidades o corrección de errores en producción, los equipos recurrían a la IA de forma predeterminada. Utilizar la generación mediante modelos para tareas complejas produjo resultados significativos durante las etapas de programación y creación de pruebas, lo que permitió aumentar la velocidad en los casos en los que la asistencia de estas herramientas ofrecía una ventaja real.
Aviso legal: Las declaraciones y opiniones expresadas en este artículo son las del autor/a o autores y no reflejan necesariamente las posiciones de Thoughtworks.