Reflexiones tras un mes usando Devin
(answer.ai)¿Qué es Devin?
- En marzo de 2024 apareció una nueva empresa de IA que recaudó una ronda Serie A de 21 millones de dólares, con el respaldo de varios líderes de la industria tecnológica como Founders Fund, los hermanos Collison y Elad Gil
- El equipo de la empresa se presentó como un grupo de medallistas de oro de la IOI, con la capacidad de resolver por sí mismos problemas de programación complejos
- Afirmaban que su producto, Devin, podía conversar como un colega humano y encargarse de forma autónoma de todo el proceso de ingeniería de software, incluyendo aprender nuevas tecnologías, depurar código existente, desplegar aplicaciones completas y entrenar modelos de IA
- En el video de demostración publicado, Devin resolvió por sí solo una recompensa de Upwork e instaló y ejecutó un proyecto de PyTorch[1]
- La empresa aseguró que, según SWE-bench, resolvía por completo alrededor del 13.86% de issues reales de GitHub, y destacó que eso representaba un rendimiento aproximadamente 3 veces mejor que sistemas anteriores
- Al principio solo los usuarios seleccionados podían acceder, y en redes sociales se expandió la expectativa de que revolucionaría el desarrollo de software
- El equipo de Answer.AI suele experimentar con herramientas de desarrollo con IA, y tuvo la intuición de que Devin podría mostrar algo distinto a lo ya existente
- Decidieron aplicar Devin directamente en entornos reales de trabajo, probando varias tareas y recopilando su experiencia de uso
Casos iniciales de éxito
- La primera tarea que intentaron fue traer información de una base de datos de Notion a Google Sheets
- Devin exploró la documentación de las API de Notion y Google, y fue guiando paso a paso la configuración de las credenciales necesarias en Google Cloud Console
- No solo arrojaba el uso de la API de forma superficial, sino que indicaba incluso en qué menús y botones había que hacer clic, reduciendo mucho el tiempo invertido en tareas tediosas
- El código escrito por Devin era algo verboso, pero funcionó correctamente
- Esa experiencia permitió ver el potencial de una IA que se encargara del “glue code”
- Otro integrante del equipo también pudo interactuar con Devin solo desde su teléfono y crear una aplicación para rastrear posiciones pasadas de Júpiter y Saturno
Expansión de las pruebas
- Animados por esos primeros éxitos, intentaron usar a Devin de forma asíncrona, por ejemplo encargándole redacción de documentos o pidiéndole depuración mientras ellos trabajaban en diseño
- Sin embargo, poco a poco se hizo evidente que Devin se atascaba en callejones técnicos sin salida incluso en tareas que parecían simples, o generaba código inútilmente complejo
- En particular, con tareas realmente imposibles (por ejemplo, desplegar varias apps a la vez dentro de un solo deploy en Railway), con frecuencia intentaba hacerlas de todos modos y “alucinaba” funcionalidades
- El problema no era solo fallar, sino perder tiempo intentando soluciones imposibles
Observaciones más profundas sobre los problemas
- Surgió la duda de por qué Devin parecía bastante competente en algunas tareas, pero fracasaba en otras
- Tras un mes de uso, probaron un total de 20 tareas, clasificadas en tres categorías
- (1) Crear proyectos nuevos
- (2) Trabajo de investigación
- (3) Analizar y modificar proyectos existentes
- El resultado final fue de 14 fallas, 3 éxitos (incluyendo los casos iniciales) y 3 resultados inconclusos
- No apareció un patrón claro que permitiera anticipar éxito o fracaso, y hasta tareas que parecían similares terminaban fallando de maneras inesperadas
- Los casos detallados están organizados en el apéndice al final del texto
1. Crear proyectos nuevos
- Viendo los videos de demostración de la empresa y los primeros casos exitosos, esperaban que Devin fuera bueno creando proyectos completos desde cero
- Pero en la práctica hubo muchos problemas: generaba estructuras de código excesivamente complejas o ni siquiera resolvía tareas sencillas de web scraping
- Por ejemplo, el trabajo de subir datos sintéticos a Braintrust falló porque el código de Devin era demasiado complejo y no lograba salir de los errores
- También abandonaron un intento de integrar Spiral.computer con el tomador de notas con IA Circleback, porque devolvía código complejo y espagueti
- La tarea de obtener información de los 25 artículos más recientes de un autor en Google Scholar tampoco se completó correctamente, ya que se quedó atrapado en el parsing de HTML
2. Trabajo de investigación
- Las tareas básicas de investigación, como consultar documentación simple, sí eran posibles hasta cierto punto
- Pero en problemas más complejos, como resumir transcripciones manteniendo timestamps exactos, no lograba entender bien el tema y se limitaba a enumerar ejemplos irrelevantes
- Incluso ante la solicitud de crear un tema mínimo de DaisyUI, en la práctica solo reutilizó los colores del tema base, por lo que el resultado no funcionaba de forma útil
3. Analizar y modificar código existente
- Las limitaciones de Devin se hicieron más evidentes en tareas de mantenimiento que requerían entender código y contexto ya existentes
- Al trabajar con un proyecto en nbdev, intentó enfoques ineficientes, como agregar scripts de Python innecesarios para una tarea que solo requería editar notebooks
- En revisiones de seguridad también señaló vulnerabilidades inexistentes o no identificó correctamente los problemas importantes
- Al diagnosticar un error de reenvío de claves SSH, se obsesionó solo con el script y no consideró en absoluto que el problema pudiera estar en otro lado
- Incluso al implementar una función para detectar conflictos entre entradas del usuario y la base de datos, se perdió tiempo ajustando el código creado por Devin, y al final fue más rápido implementarlo manualmente en 90 minutos
Retrospectiva del equipo
- Después de un mes de pruebas intensivas, dentro del equipo surgieron evaluaciones como las siguientes
- “Las tareas pequeñas y bien definidas suelen hacerse más rápido a mano, y en las tareas grandes Devin tiene muchas probabilidades de fallar, así que su utilidad es bastante limitada” (Johno Whitaker)
- “Al principio parecía que con unos pequeños ajustes podría servir, pero al final hubo que tocar mucho más, y terminé sintiendo que habría sido mejor hacerlo uno mismo desde el inicio” (Isaac Flath)
- “Tuvo problemas de compatibilidad: no se integraba bien con herramientas internas de AnswerAI y no aprovechaba bien la documentación ni los ejemplos disponibles. En cambio, herramientas como Cursor, donde puedes intercambiar retroalimentación continua en unidades pequeñas, funcionaron mejor que Devin” (Hamel Husain)
- La característica distintiva de Devin es avanzar de forma autónoma en pasos grandes, pero al final el costo de que una persona tenga que corregir una dirección equivocada es considerable
- En cambio, llegaron a la conclusión de que los flujos de trabajo donde el desarrollador lidera y la IA asiste (como Circleback, Cursor, etc.) son mucho más estables
Conclusión
- La experiencia de trabajar con Devin permitió vislumbrar el futuro al que apuntan las herramientas autónomas de desarrollo con IA
- En particular, la UI conversacional basada en Slack y la configuración automática del entorno dentro de contenedores Docker resultaron impresionantes desde el punto de vista de la experiencia de usuario
- Pero en la práctica solo 3 de 20 casos funcionaron realmente bien, y en especial era común que incluso tareas similares fracasaran de formas complejas
- Precisamente por su carácter “autónomo”, cuando algo sale mal puede seguir ejecutándose por mucho tiempo en una dirección equivocada
- Según lo que han experimentado hasta ahora, es frecuente que el entusiasmo en redes sociales o una alta valuación empresarial no se traduzcan en productividad real ni en calidad terminada
- El equipo de Answer.AI planea mantener su postura de que la forma más práctica sigue siendo aquella en la que la IA asiste al proceso de desarrollo
Apéndice: lista de tareas realizadas con Devin
- A continuación se resume brevemente qué proyectos se le encargaron a Devin y cuál fue el resultado
- Se clasificaron en cuatro categorías
- (1) Crear proyectos nuevos
- (2) Investigación
- (3) Análisis de código existente
- (4) Modificación de proyectos existentes
1. Crear proyectos nuevos
-
Planet Tracker
- Status: Success
- Description: una app para verificar afirmaciones sobre posiciones pasadas de Júpiter y Saturno
- Reflection: se conversó con Devin solo desde el móvil mediante Slack, y aun así Devin resolvió la mayor parte del trabajo de forma autónoma y logró completarlo
-
Migrating data from Notion into Google Sheets
- Status: Success
- Description: importar automáticamente documentos de Notion a Google Sheets
- Reflection: Devin guió incluso la configuración de Google Cloud Console paso a paso, y fue la primera vez que sintieron una “experiencia completamente nueva”
-
Multi-app deploys on Railway
- Status: Inconclusive
- Description: querían desplegar varias apps en un solo deploy de Railway para compartir la misma base de datos
- Reflection: en realidad Railway no soporta ese enfoque, así que era prácticamente imposible. Devin siguió intentándolo y continuó con un enfoque alucinado
-
Generate synthetic data and upload it to Braintrust
- Status: Failure
- Description: querían generar datos sintéticos para subirlos a la plataforma Braintrust
- Reflection: el código era excesivamente complejo y no resolvía los errores, así que la implementación pasó a hacerse paso a paso con Cursor
-
Create an integration between Circleback and Spiral.computer
- Status: Failure
- Description: aunque se proporcionó la documentación de ambas, Devin generó código espagueti demasiado complejo y terminaron abandonándolo
-
Web scraping Papers by Following Google Scholar Links
- Status: Failure
- Description: obtener información de los 25 artículos más recientes de un autor específico, omitiendo los papers de pago
- Reflection: cayó en un bucle infinito durante el parsing de HTML y la tarea se detuvo
-
Create minimal HTMX bulk upload example app
- Status: Failure
- Description: querían reconstruir de forma simple un ejemplo de HTMX para usarlo con FastHTML
- Reflection: el código de ejemplo no funcionaba y además agregaba elementos innecesarios, lo que generó más confusión
-
Create a DaisyUI Themes to match FrankenUI Theming
- Status: Failure
- Description: querían unificar el uso de temas entre DaisyUI y FrankenUI
- Reflection: el mapeo no se hizo bien y se añadió demasiado código, por lo que era difícil usarlo en la práctica
2. Perform Research
-
Research How to make a discord bot
- Status: Success
- Description: investigar cómo crear un bot de Discord en Python para resumir mensajes y enviarlos por email
- Reflection: Devin resumió el plan intermedio en un archivo Markdown, y aunque el código final no era perfecto, sí ayudó a entender el concepto
-
Research on Transcript Summarization With Accurate Timestamps
- Status: Failure
- Description: querían encontrar una manera de generar resúmenes preservando la información de timestamps
- Reflection: Devin solo enumeró de forma general temas relacionados y no propuso una dirección real para resolver el problema
-
Create a minimal DaisyUI theme as an example
- Status: Failure
- Description: pidieron un ejemplo mínimo de un tema de DaisyUI
- Reflection: el tema en realidad no se aplicó y se siguieron usando los colores del tema por defecto
3. Analyze Existing Code
-
Performing a security review of a code base
- Status: Inconclusive
- Description: se le pidió revisar un repositorio de GitHub de menos de 700 líneas desde la perspectiva de vulnerabilidades de seguridad
- Reflection: acertó parcialmente, pero también señaló vulnerabilidades inexistentes y sobredimensionó los problemas de seguridad
-
Review blog posts and make a pull request with improvements
- Status: Failure
- Description: se le pidió revisar posts de blog y crear un PR acorde con el código fuente basado en Quarto
- Reflection: al no entender la estructura de Quarto, falló con el manejo de metadatos y front matter
-
Review an application and identify potential areas of improvement
- Status: Failure
- Description: se le pidió proponer mejoras integrales para una app de registro de tiempo creada anteriormente
- Reflection: la mayoría de las sugerencias no fueron efectivas
-
Debug why ssh key forwarding is not working in a setup script
- Status: Inconclusive
- Description: había un problema con el reenvío de claves SSH durante la configuración de un servidor mediante script
- Reflection: Devin investigó de forma obsesiva solo el script y no reconoció que la causa podía estar en otro lugar
4. Modify An Existing Project
-
Making changes to a nbdev project
- Status: Failure
- Description: querían añadir una API para Apple Shortcuts a una app de seguimiento de tiempo hecha con FastHTML + nbdev
- Reflection: en vez de editar directamente los notebooks, Devin intentó modificarlos mediante scripts de Python, aumentando la complejidad
-
Migration of Python Project To nbdev
- Status: Failure
- Description: querían migrar un proyecto existente de Python a nbdev
- Reflection: ni siquiera logró configurar correctamente lo básico de nbdev, y el proyecto terminó enredado
-
Integrate Styling Package Into FastHTML
- Status: Failure
- Description: querían integrar MonsterUI en un proyecto basado en nbdev
- Reflection: Devin no entendió correctamente la estructura del repositorio nbdev y fracasó
-
Add feature to check for conflicts between user input and database
- Status: Failure
- Description: querían agregar una UI que avisara cuando hubiera conflictos entre la entrada del usuario y los valores de la base de datos en una app existente
- Reflection: tomó demasiado tiempo corregir hasta el final el intento de Devin; implementarlo directamente tomó solo 90 minutos y fue mucho más rápido
-
Generate LLMs context file with the contents of every fasthtml gallery example
- Status: Failure
- Description: se le pidió generar archivos de texto para LLMs con todos los ejemplos de la galería de fasthtml
- Reflection: fue interesante que Devin creara cada ejemplo como un archivo Markdown separado, pero la forma real de escribirlos no coincidía con la documentación y además añadía dependencias innecesarias, así que hubo muchos problemas
1 comentarios
Opiniones de Hacker News
El creador de OpenHands enfatiza que la IA aún no ha llegado al nivel de reemplazar a los ingenieros de software. El código escrito por IA necesita una revisión exhaustiva, como el de un ingeniero junior. Sin embargo, si se aprovecha bien la IA, la productividad puede mejorar mucho. Aproximadamente el 20% del codebase de OpenHands fue escrito o coescrito por IA. La IA es útil para tareas simples como resolver conflictos de merge o corregir errores del linter. También menciona que la IA mejora cada semana y que la competencia es intensa
Un usuario que usa herramientas de codificación con IA todos los días considera que el enfoque de agentes como Devin intenta abarcar demasiado. Las herramientas de codificación con IA deberían consolidarse como herramientas para desarrolladores, en lugar de reemplazarlos. GitHub Copilot es útil para completar código repetitivo, y Aider puede realizar tareas de edición de más alto nivel. Pero todavía no son perfectos y, al resolver problemas, pueden hacer cambios innecesarios
El problema con agentes de IA como Devin es que su inteligencia parece quedarse estancada en cierto nivel. A veces resuelven en minutos tareas que a un ingeniero intermedio o senior le tomarían horas, pero también cometen errores simples. Una cualidad importante de un ingeniero junior es que puede ser guiado, y ahí los agentes de IA tienen una limitación, porque no se les puede guiar
Hay escepticismo ante la idea de que la IA pueda reemplazar a los ingenieros humanos. La IA sirve para tareas pequeñas y repetitivas, pero no para trabajos complejos como la gestión de infraestructura o el despliegue de aplicaciones. Dice que no creerá en esas afirmaciones hasta verlo realmente
Los agentes de IA deberían poder pedir intervención humana cuando la necesiten, pero Devin no lo hace bien en situaciones de "soft stop". Un desarrollador humano pediría ayuda después de unas horas, pero la IA puede caer en un bucle infinito
Al igual que la generación de imágenes con IA, las herramientas de codificación con IA muestran resultados sorprendentes al principio, pero todavía tienen muchos errores. Aun así, se espera que en unos años haya avances impresionantes. Herramientas como Midjourney pueden dar resultados distintos a lo esperado, y hará falta una función que permita a los usuarios iterar rápidamente
En las reseñas de uso de Devin, la evaluación es que el agente no cumple con las expectativas. Implementar un agente es fácil, pero implementarlo de manera útil es difícil. Las limitaciones de Devin generan preocupación sobre el avance de los sistemas basados en agentes
Devin intentó hacer demasiadas cosas, y tiene valor generar artefactos de código dentro de una capacidad limitada. Es importante centrarse en elementos específicos del loop de desarrollo. Empresas como Factory AI están adoptando este enfoque y están recibiendo atención por su producto
Devin impresiona cuando entiende el formato del código y la configuración de pruebas locales, pero puede agregar cambios innecesarios y arruinar otras cosas. Como no puede revertir esos cambios, hace falta limpieza adicional. Devin mostró el potencial de los flujos de trabajo con agentes, pero como no ahorra tiempo, no lo recomiendan
Un usuario que ha usado mucho Cursor siente que hay que forzar el sistema en una dirección concreta. A veces el LLM da snippets de código útiles, pero si se va por el camino equivocado, hay que detener sus sugerencias y empujarlo hacia otra dirección. Cursor es especialmente útil para refactorización y ahorra mucho tecleo y tiempo.