El papel de las capacidades del desarrollador en la codificación agéntica
(martinfowler.com)- A medida que los asistentes de codificación agénticos se vuelven más capaces, las reacciones han sido muy diversas, y algunos incluso afirman que "en un año ya no se necesitarán desarrolladores"
- Otras personas plantean preocupaciones sobre la calidad del código generado por IA y sobre cómo preparar a los desarrolladores junior para este entorno cambiante
- En los últimos meses he usado asistentes de codificación agénticos como Cursor, Windsurf y Cline, y han sido muy efectivos para modificar bases de código existentes
- Me impresionó mucho la integración con el IDE: incluye ejecución de pruebas, corrección automática de errores, detección y corrección de errores de lint/compilación, búsqueda web e incluso vista previa en el navegador
- La experiencia de colaboración entre desarrollador e IA ha sido muy impactante y ha contribuido a resolver problemas e implementar funciones con rapidez
- Sin embargo, siguió siendo necesaria la intervención continua del desarrollador para corregir y dar dirección
- En muchos casos ni siquiera se llegó a hacer commit, y a la IA todavía le falta capacidad para escribir de forma autónoma código para tareas que no son triviales
- Por lo tanto, las habilidades y la experiencia del desarrollador siguen siendo importantes y deberán seguir entrenándose en el futuro
Momentos en los que el desarrollador tuvo que intervenir directamente
- Las herramientas de IA mostraron un rendimiento constantemente débil en ciertas áreas, y esto se confirmó repetidamente
- Parte de esto puede mitigarse parcialmente con prompts adicionales o reglas personalizadas, pero no es posible un control total
- Los LLM a menudo no siguen con precisión las instrucciones del prompt
- Cuanto más larga es una sesión de codificación, menos consistentes son los resultados
- Por eso, los casos que se presentan a continuación son problemas que pueden ocurrir con bastante facilidad independientemente del prompt o la configuración
- Los errores de la IA se clasifican en 3 categorías según su radio de impacto
- a. Disminución de la velocidad de desarrollo y del tiempo hasta el commit
- La IA termina ralentizando el trabajo
- En algunos casos resulta menos eficiente que programar sin asistencia
- b. Genera fricción en el flujo de trabajo del equipo
- Provoca choques o problemas de colaboración dentro de una iteration
- c. Deteriora la mantenibilidad del código a largo plazo
- Al principio parece que no hay problema, pero luego aparecen dificultades al cambiar o ampliar el sistema
- a. Disminución de la velocidad de desarrollo y del tiempo hasta el commit
- Cuanto mayor es el radio de impacto, más largo es el bucle de retroalimentación para que el equipo detecte y corrija el problema
Radio de impacto: retraso en el tiempo hasta el commit
- Esta categoría reúne casos en los que la IA terminó estorbando en lugar de ayudar
- Como es la forma de fallo más evidente, no suele convertirse en un gran problema
- En la mayoría de los casos, el desarrollador puede detectar y detener el problema antes del commit
-
Código que no funciona
- El código generado por la IA simplemente no funciona
- El desarrollador necesita corregirlo directamente o cerrar la sesión de IA y resolver el problema manualmente
- Un desarrollador con experiencia puede identificar rápido qué salió mal y actuar
-
Diagnóstico incorrecto del problema
- La IA identifica mal la causa del problema e intenta soluciones en una dirección equivocada
- Basándose en experiencia previa, el desarrollador pudo reencaminar a la IA desde ese camino erróneo
Ejemplo: confundió un error de build de Docker con un problema de configuración de arquitectura y modificó esa configuración
La causa real era haber copiadonode_modulescompilado para una arquitectura incorrecta
Como era un problema que ya había visto muchas veces antes, pudo reconocerlo y corregirlo rápidamente
Radio de impacto: flujo de trabajo del equipo dentro de una iteration
- Esta categoría cubre casos en los que, por falta de revisión o de intervención del desarrollador, surge fricción dentro del equipo durante el período de la iteration
- Gracias a experiencias previas en distintos equipos, el autor pudo detectar y ajustar estos problemas antes del commit
- Los desarrolladores nuevos también pueden aprender estas lecciones mediante prueba y error junto con la IA
- Pero si la IA acelera demasiado la velocidad de codificación, el equipo podría no ser capaz de absorber estos problemas
-
Trabajo inicial excesivo
- La IA tiende a intentar abarcar toda una funcionalidad de una sola vez, en lugar de implementarla de forma incremental
- Si por eso se elige mal una tecnología o se entienden mal los requisitos, puede desperdiciarse mucho trabajo
Ejemplo: al migrar el stack de frontend, intentó convertir todos los componentes de UI de una sola vez
Debería haberse aplicado gradualmente empezando por un solo componente integrado con el backend
-
Resolver a ciegas sin analizar la causa
- La IA intenta solucionar solo el error visible sin analizar la causa raíz del problema
- Luego, otro integrante del equipo que tome ese problema carga con la necesidad de volver a analizarlo sin contexto
Ejemplo: ante un error de memoria durante el build de Docker, en vez de buscar la causa solo aumentó la configuración de memoria
-
Complejiza el flujo de trabajo del desarrollador
- La forma de compilar/ejecutar generada por la IA deteriora la experiencia de desarrollo
- Si se hace commit de inmediato, también afecta negativamente el flujo de trabajo de los demás miembros del equipo
Ejemplo: entrega comandos separados para ejecutar el frontend y el backend
Ejemplo: omite la funcionalidad de hot reload
Ejemplo: una configuración de build compleja confunde tanto a desarrolladores como a la IA
Ejemplo: no detecta errores de Docker con antelación e intenta manejarlos solo al final del build
-
Requisitos mal entendidos o incompletos
- Si no se especifican claramente los requisitos funcionales, la IA puede malinterpretarlos e implementar la funcionalidad en una dirección equivocada
- Lo ideal es corregirlo con intervención temprana, pero tanto con una IA autónoma como con un desarrollador poco reflexivo aumenta el costo de las correcciones posteriores
- Estas implementaciones erróneas suelen descubrirse más adelante durante el avance de la historia, lo que genera mucho retrabajo y costos de comunicación
Radio de impacto: deterioro de la mantenibilidad a largo plazo
- Es el radio de impacto más sigiloso y peligroso
- Al principio el código funciona sin problemas, pero después se vuelve difícil de cambiar y ampliar
- Muchas veces estos problemas solo se descubren semanas o meses después
- En esta área en particular fue donde más pesaron los más de 20 años de experiencia del autor como desarrollador
-
Código de pruebas verboso y duplicado
- La IA es buena generando pruebas, pero a menudo aparecen problemas como estos:
- En vez de integrarse con las pruebas existentes, crea nuevas funciones de prueba
- Agrega demasiadas assertions incluso en partes ya cubiertas
- Un punto que los desarrolladores principiantes pueden malinterpretar: más pruebas ≠ mejores pruebas
- Cuanta más duplicación haya, más difícil se vuelve el mantenimiento y mayor la posibilidad de fallas masivas en las pruebas cuando cambia el código
- Se intentó mitigar esto con comandos personalizados, pero aun así sigue ocurriendo con frecuencia
- La IA es buena generando pruebas, pero a menudo aparecen problemas como estos:
-
Falta de reutilización
- El código escrito por la IA a menudo carece de modularidad, por lo que es difícil reutilizarlo
Ejemplo: no reconoce componentes de UI ya existentes y los vuelve a implementar
Ejemplo: abusa de estilos inline en lugar de usar clases de CSS
- El código escrito por la IA a menudo carece de modularidad, por lo que es difícil reutilizarlo
-
Código excesivamente complejo o verboso
- La IA a menudo genera más código del necesario, por lo que hay que eliminar manualmente partes innecesarias
- Esto aumenta el costo de mantenimiento y eleva la probabilidad de errores al hacer cambios
Ejemplo: al cambiar CSS, hay que borrar uno por uno muchos estilos duplicados
Ejemplo: crea un web component innecesariamente complejo solo para mostrar datos JSON
Ejemplo: durante una refactorización, no reconoce una cadena existente de inyección de dependencias,
y complica el diseño al pasar de nuevo como otro parámetro un valor que ya estaba inyectado- Con una forma como
value = service_a.get_value(); ServiceB(service_a, value=value)
- Con una forma como
Conclusión: ¿puede la IA escribir todo el código por nosotros?
- A juzgar por la experiencia hasta ahora, es poco realista que en un año la IA escriba de forma autónoma el 90% del código completo
- Aun así, como asistente para escribir código, en algunos equipos y bases de código sí podría alcanzar un 90% de apoyo
- De hecho, el autor recibe ayuda de IA en alrededor del 80% en un proyecto de complejidad media de unas 15K LOC
Cómo prevenir los errores de la IA
-
Qué puede hacer cada desarrollador a nivel individual
- Revisar siempre con cuidado el código generado por la IA
- Casi nunca sale sin nada que corregir
- Interrumpir de inmediato la sesión de IA si se vuelve confusa
- Ajustar el prompt o directamente pasar al trabajo manual (también llamado "codificación artesanal")
- Desconfiar de las soluciones "convincentes" que parecen haberse completado milagrosamente en poco tiempo
- Puede haber costos ocultos de mantenimiento a largo plazo
- Practicar programación en pareja
- Cuatro ojos y dos cerebros ofrecen mejor criterio
- Revisar siempre con cuidado el código generado por la IA
-
Estrategias de respuesta a nivel de equipo y organización
- Aprovechar activamente las herramientas existentes de monitoreo de calidad de código
- Ej.: Sonarqube, Codescene
- Al usar herramientas de IA, hay que vigilar con más atención la duplicación de código, los code smells y otros problemas
- Configurar hooks de pre-commit e integración de revisión de código en el IDE
- Reforzar una estrategia shift-left para detectar problemas temprano en el desarrollo
- Restablecer buenos hábitos de calidad de código
- Compartir en las retrospectivas semanales casos de problemas causados por código de IA (un "registro de fallos")
- Usar activamente reglas personalizadas
- La mayoría de las herramientas de IA permiten configurar un conjunto de reglas que se envía junto con el prompt
- Si el equipo mejora ese ruleset en conjunto, puede reducir los errores de la IA
- Aun así, cuanto más larga es la sesión, más aumenta la posibilidad de que ignore las reglas
- Fomentar una cultura de equipo basada en la confianza y la comunicación
- Adoptar IA es un cambio nuevo, y hay que reconocer que todos son principiantes en esto
- Presiones del tipo "como ya hay IA, hazlo más rápido" aumentan el riesgo para la calidad
- En equipos con seguridad psicológica, compartir problemas y aprender ocurre con mayor facilidad
- Aprovechar activamente las herramientas existentes de monitoreo de calidad de código
4 comentarios
Quienes usan esa herramienta, más allá de su nivel de capacidad, al final todos serán desarrolladores.... Me parece un poco raro que se promocione como si en el futuro ya no fueran necesarios los desarrolladores.
No sé cómo vaya a evolucionar en el futuro, pero por ahora no me parece muy bueno como para usarlo de forma generalizada... Hace poco probé Cursor y ni siquiera lograba resolver bien algo tan básico como la ruta de importación de archivos. Aun así, me sorprendió un poco que pudiera anticipar hasta cierto punto lo que yo quería crear.
Cuando ocurre un error de memoria durante un build de Docker, en vez de preguntarnos desde el principio por qué se estaba usando tanta memoria, aumentamos la configuración de memoria
-> Esto es... porque ya lo hemos hecho así en muchísimos casos.
-> La IA de ahora somos nosotros en el pasado
Comentarios en Hacker News
Últimamente uso Cursor para la mayor parte del desarrollo. Este artículo se parece mucho a mi experiencia
Yo uso la IA así: como asistente de escritura dentro del IDE, y me responde como un pato de goma muy genial y sofisticado
No lo entiendo para nada
Ejemplo: cuando ocurrió un error de memoria durante una compilación de Docker, en vez de preguntarse desde el principio por qué se estaba usando tanta memoria, aumentó la configuración de memoria
Las habilidades de desarrollo siguen siendo esenciales — si no sabes manejar, no puedes conducir. Pero, ¿qué pasa con la energía del desarrollador? Antes de la IA, solo podía programar unas 2 horas al día (tiempo real escribiendo código). Pero con Claude Code puedo programar fácilmente 5 horas seguidas sin parar. Se siente como andar en una bicicleta eléctrica en vez de una bicicleta normal. La IA se siente como la bicicleta para la mente de Steve Jobs: no me reemplaza, pero ahora puedo llegar mucho más lejos y más rápido
Este diagrama me representa muchísimo — nuestro equipo marca todas las casillas de aquí. ¡Y eso que todavía no usamos IA! Imaginen cuando al fin la usemos...
Para mí no es evidente lo obvio: usar IA a mi alrededor
Hay que pilotear mucho a la IA, pero sigo siendo optimista en que mejores prompts llevarán a mejores agentes
Quiero poner como prefacio que las herramientas de IA siempre son malas para las cosas que enumeré
¿Martin Fowler ahora está alquilando espacio en su sitio web?