Desarrollo de software con Devin: Seguridad, implantación y mantenimiento (4ª parte)
Aprende a utilizar Devin para añadir autenticación de usuario real con NextAuth, controlar los errores con Sentry y desplegar el frontend en Vercel con URLs de previsualización.
¡Bienvenido de nuevo! Ya casi hemos llegado: Slack chirría, Jira tiene tickets, las pruebas están en verde y nuestro CI bloquea cada PR descuidado. La cuarta parte es el empujón final en el que convertiremos el patio de fp-ts en algo a lo que, en teoría, podríamos apuntar al público.
Puedes acceder a todos los tutoriales de la serie Devin aquí:
Seguridad, implantación y mantenimiento (4ª parte)
Éste es el plan para este cuarto tutorial:
Aut: Se acabaron los UUIDs anónimos; incluiremos credenciales NextAuth, cookies JWT y un GqlAuthGuard para que el progreso esté vinculado a usuarios reales.
Ojos en la producción: Una línea de código Sentry en la aplicación web, una en la API Nest, y todas las excepciones aterrizan en el panel de control.
Se despliega pulsando un botón: El front-end se activa en Vercel con URLs de previsualización en cada RP. (La API permanecerá local por ahora, fingiremos la producción con Docker).
También reflexionaremos sobre esta programación en parejas con Devin y veremos dónde brilla y dónde un humano aún tiene que arreglar los cabos sueltos antes de que el mundo vea el repositorio. ¿Listo para el último tramo?
De UUID anónimos a usuarios reales
Lo que le pedí a Devin
En resumen, le pedí a Devin que arrancara el flujo UUID anónimo y me diera una pila de autenticación real:
Proveedor de credenciales NextAuth v6 en apps/web
AuthModule de NestJS con hashing Argon2 y cookies JWT
Migración Prisma que añade una tablaUser y cambia Progress.sessionId → userId (no nulo)
Copia cualquier fila de progreso UUID existente a un usuario marcador de posición para que los alumnos conserven sus insignias
No cambies Postgres por SQLite
Lo que ha vuelto (en su mayoría bueno)
Aquí tienes un resumen de los resultados:
Capa
Salida de Devin
Base de datos
Se ha eliminado la tabla Session; se ha añadido un modelo User con email, hash, campos de racha y marcas de tiempo. El script de migración volvió a rellenar cada fila antigua desessionId en un pseudo-usuario llamado [email protected].
Backend
AuthModule, AuthService, GraphQL AuthResolver, JwtStrategy, y un GqlAuthGuard. Todo Nest-idiomático, 100 % mecanografiado.
Frontend
AuthProvider Contexto React, LoginForm,RegisterForm, un modal que aparece en las rutas protegidas, y un botón de cierre de sesión en la cabecera del panel de control.
Seguridad
Argon2 (12 rondas), validación DTO a través de class-validator, JWTs almacenados en localStorage, guardias en cada resolvedor de progreso.
Pruebas
Prueba unitaria para AuthService.register/login y una prueba de mutación e2e que afirma que la guardia rechaza las fichas que faltan. (Le pedí una segunda vez que añadiera las pruebas)
Otra migración a SQLite
Adivina lo que vi aparecer de nuevo en la pequeña caja de pensamientos de Devin.
Migración con éxito de PostgreSQL a SQLite para el desarrollo local 🥳
Exactamente lo que le había dicho queno hiciera. Se reescribió el esquema Prisma para SQLite, y se cambiaron las cadenas y tipos de conexión (de TIMESTAMP a DATETIME). Lo he pillado a mitad de sesión:
Pausa la sesión.
git checkout main apps/api/prisma/schema.prisma (restaurar esquema Postgres).
Borra el nuevo archivodev.db.
npm run prisma:migrate --workspace=apps/api para volver a aplicar las migraciones Postgres.
Reanudó Devin; detectó la reversión y continuó sin quejarse.
Daños: 0,8 ACU y unos diez minutos.
Lista de control de cambio para compañeros de equipo
Aprecio mucho las instrucciones que Devin pone en los PR. Aquí nos lo dijo:
# 1 Install new depsnpminstall--workspaces# 2 Run the Postgres migrationnpm run prisma:migrate --workspace=apps/api
# 3 Restart everythingnpm run dev:api &npm run dev:webCon la tecnología de
Instantánea de la arquitectura
En la wiki, encontré este útil diagrama de nuestro nuevo sistema de autenticación:
Con usuarios reales y la base de datos firmemente asentada en Postgres, por fin estamos listos para seguir el progreso de un auténtico aprendiz, enviar versiones preliminares a Vercel y detectar errores de ejecución con Sentry.
Front-End en Vercel, enlaces de previsualización en cada RP
Una vez establecidos los inicios de sesión seguros, el siguiente hito obvio era mostrar al mundo algo sobre lo que se pudiera hacer clic. Decidimos desplegar sólo el front-end Next.js por ahora. API y Postgres permanecerán en mi máquina local hasta que elijamos un host que se ajuste al presupuesto.
Conexión manual de la cuenta (0 ACUs)
Conectar Devin a mi cuenta personal de Vercel mediante integraciones nativas aún no es posible. Así que lo hice manualmente, a través del panel de control de Vercel:
Inicia sesión en Vercel y haz clic en "Nuevo proyecto → Importar repositorio Git".
Selecciona el repositoriofp-ts-exercises, deja el comando de compilación como npm run build --workspace apps/web, y pulsa Desplegar.
Copia el VERCEL_PROJECT_ID resultante y VERCEL_TOKEN en GitHub Secrets.
Deja que Devin actualice el flujo de trabajo CI (0.4 ACU)
Siguiendo mis indicaciones, Devin añadió un único trabajo al final del flujo de trabajo existente y un pequeño paso de terminal que riza la URL generada a Slack:
✅ Preview ready: https://fp-ts-exercises-git-my-branch.vercel.appCon la tecnología de
Al abrir el enlace se mostraba nuestro patio de recreo, el flujo de autenticación completa y el panel de control del alumno. Aún no es necesario ajustar el entorno en Vercel, porque el front-end se comunica con mi API local a través de http://localhost:4000.
Una mirada más de cerca al Sistema de Secretos de Devin
Antes de la integración con Sentry, eché un vistazo al sistema de secretos de Devin para saber si debía utilizarlo. Devin ofrece una bóveda de "Secretos" integrada para que puedas dar al agente claves API, URL de BD o tokens OAuth sin registrarlos en Git y sin exponerlos en el chat. Piensa en ello como un equivalente ligero a los secretos de las Acciones de GitHub o a las Variables de Entorno de Vercel, pero limitado a los espacios de trabajo en la nube de Devin.
Función
Cómo funciona
Notas
Alcance
Los secretos abarcan tres ámbitos: org, repo y sesión.
Puedes hacer que los secretos estén disponibles a nivel de organización, en todas tus sesiones.
Si quieres añadir secretos para un único repositorio, puedes especificarlos cuando configures tu repositorio.Si quieres que los secretos sean específicos de la sesión, puedes proporcionarlos en la configuración de la sesión.
Cifrado
Almacenado en el servidor con AES-256 y TLS 1.3+ mientras está en tránsito
Todos los datos de los clientes se cifran con una clave KMS (Key Management Service) personalizada, administrada por AWS.
Sin coste de ACU
Añadir, editar o borrar un secreto es una acción del plano de control: 0 ACUs. Sólo las tareas que utilizan el secreto incurren en créditos de cómputo.
Buen lugar para guardar fichas de larga duración.
Accede a los avisos internos
Utiliza $. en el prompt o en un comando. Devin lo resuelve antes de ejecutar el terminal.
Ejemplo: DATABASE_URL=$.POSTGRES_URL
Límites de tamaño
4 KB por llave, 100 llaves por equipo en el nivel Básico.
Suficiente para certificados PEM o claves privadas.
Añadir un secreto
Estos son los pasos que debes seguir para añadir un secreto:
Abre Equipo → Secretos en el panel de control de Devin.
Haz clic en "Añadir secreto" e introduce un nombre (SENTRY_DSN_WEB ) y su valor.
Devin confirma el almacenamiento; la clave ya está disponible como $.SENTRY_DSN_WEB.
Utilizar un secreto en una tarea
Tarea: actualizar API Sentry init; Establecer DSN a $SECRET.SENTRY_DSN_API
Devin sustituye el valor cuando escribe main.ts. En la pestaña del terminal, verás el DSN literal, pero el registro del chat lo oculta.
Pros y contras
Pros:
No hay riesgo de que se filtren claves en los PR o en los registros de Timelapse.
Los secretos de organización funcionan en todas las sesiones: una carga, muchos usos.
Cero coste de crédito para almacenar o recuperar.
Contras:
Las claves no están disponibles localmente a menos que las copies en .env. Las pruebas fuera de Devin necesitan una configuración manual.
Sin ámbito por entorno (por ejemplo, "sólo en producción"). Todas las sesiones tienen todos los secretos.
Cuándo utilizarlo
Me resulta más fácil utilizar la bóveda de Devin cuando el propio Devin necesita la clave (por ejemplo, al enviarla a Vercel, al acceder a un registro privado o al cablear Sentry durante la compilación). Yo seguiría utilizando .env / GitHub Actions secrets para todo lo que también se ejecuta en tu terminal de desarrollo local o en los ejecutores de CI.
Integración de Devin con Sentry
Este es el mensaje que utilicé: Añade Sentry a ambas aplicaciones para que todas las excepciones aparezcan en mi panel de control. Utiliza variables de entorno en .env. No cambia ningún otro comportamiento".
Trabajo de Devin (0,6 ACU, una sesión)
Aquí tienes un resumen del resultado:
Pila
Archivos tocados
Código clave
Next.js (web)
apps/web/sentry.client.config.tsxapps/web/sentry.server.config.ts y una importación en app/layout.tsx
ts import * as Sentry from '@sentry/nextjs'; Sentry.init({ dsn: process.env.SENTRY_DSN_WEB, tracesSampleRate: 1.0 });
NestJS (API)
apps/api/src/sentry.ts y dos líneas en main.ts
ts import * as Sentry from '@sentry/node'; Sentry.init({ dsn: process.env.SENTRY_DSN_API }); app.useGlobalFilters(new Sentry.GqlExceptionFilter());
Andamio Env
Añadidos marcadores de posición a .env.example
SENTRY_DSN_WEB= SENTRY_DSN_API=
Pruebas
Se ha añadido un espía Jest para afirmar que se llama aSentry.captureException en caso de error forzado.
Mis pasos manuales
Estos son los pasos que di:
He copiado los DSN de mi proyecto Sentry en .env.
Reinicia ambos servidores de desarrollo.
Pulsa http://localhost:4000/graphql con una consulta deliberadamente mala para comprobar que funcionaba. En cuestión de segundos apareció un número en Sentry.
Por qué me salté los secretos de Devin
Por eso me salté la función de secretos de Devin:
Modelo mental más sencillo: el mismo archivo.env en todas partes.
Es más fácil ejecutar versiones preliminares en Vercel (las variables de entorno ya están configuradas allí).
No se quema la ACU para operaciones secretas.
Reflexiones: Dónde brilla Devin y dónde tropieza
Hace cuatro tutoriales, este repositorio era un montón polvoriento de ejercicios de fp-ts; ahora, sí:
Base de código modernizada: Últimas dependencias, configuración estricta de TS, reglas de lint y Prettier (Parte 1).
Zona de juegos basada en navegador: Next.js 14 + Editor Sandpack con feedback en vivo de Vitest (Parte 2).
NestJS + Postgres backend: API GraphQL, migraciones Prisma, anónimo → Seguimiento del progreso JWT (Partes 2 y 4).
Gasoducto con luz verde: Flujo de trabajo CI que enlaza, comprueba la tipografía, ejecuta Jest y Playwright, y bloquea cada RP que falla (Parte 3).
Integraciones de equipo: Pings de estado de Slack, análisis de etiquetas de Jira y URL de vista previa en cada rama (Parte 3).
Observabilidad de la producción: Sentry conectado tanto a la web como a la API, capturando todas las excepciones (Parte 4).
La vista previa se despliega en: Vercel genera una URL compartible para cada pull request (Parte 4).
Gastamos alrededor de ≈ 70 ACUs en total (~157 $ en el plan Básico) y unos dos días laborables de revisión práctica.
Lo que Devin hace espantosamente bien
Aquí es donde creo que Devin es muy bueno:
Área
Por qué me impresionó
Infraestructura caldera
Andamiajes AuthModule, archivos Docker, flujos de trabajo YAML: generados en minutos, sin errores.
Código marco-idiomático
Los decoradores NestJS, la configuración NextAuth y las migraciones Prisma coinciden con los documentos oficiales.
Andamio de pruebas
Las suites Unit y Playwright se compilan y ejecutan desde la puerta: no faltan stubs de casos límite.
Donde un humano sigue ganando al agente
Aquí es donde creo que Devin todavía necesita mejorar:
Punto de dolor
Ejemplo
Pulido de funciones entre capas
Sandpack editor hard-coded to stub tests; didn't grasp Pruebas Sandpack nombre del componente.
Persistencia de la configuración
Volvió por defecto a SQLite 5 veces, incluso después de decir explícitamente "Debe permanecer en Postgres".
Nomenclatura / limpieza
Los títulos de los RP van a la deriva, los archivos obsoletos permanecen a menos que le digas a Devin que los borre.
Sabor y UX
El salpicadero parecía pasable, pero el espaciado, el texto y los colores aún necesitaban un ajuste manual.
Mi opinión
Los propios documentos de Devin nunca prometieron un constructor de productos. Esbozan un punto dulce mucho más estrecho y, en retrospectiva, debería haberme quedado dentro de él. La página oficial "página "¿Cuáles son los puntos fuertes de Devin? enumera cuatro titulares:
Los documentos denominan "experimental" al desarrollo de funciones que abarcan la interfaz de usuario, la API y los flujos de datos. Se describen como tareas grandes y abiertas en las que el agente puede "requerir una revisión e iteración humanas significativas". Esto es exactamente lo que vimos cuando Sandpack codificaba las pruebas o cuando el panel de control tenía buen aspecto pero en realidad no calculaba los datos.
Así que, como regla general
Utiliza Devin para cualquier cosa que un programador senior podría automatizar con un script, y mantén el volante para las tareas que necesitan sentido de producto.
Conclusión
Llegamos al final de nuestro tutorial en cuatro partes:
Aprende a utilizar modelos de IA generativa para crear un editor de imágenes, un chatbot similar a ChatGPT con pocos recursos y una aplicación clasificadora de aprobación de préstamos y a automatizar interacciones PDF y un asistente de voz con GPT.
Aprende a realizar la validación de datos y modelos para garantizar un sólido rendimiento del aprendizaje automático utilizando nuestra guía paso a paso para automatizar las pruebas con DeepChecks.
Esta guía completa te enseña los fundamentos del backend con Python. Aprende conceptos básicos, frameworks y buenas prácticas para empezar a crear aplicaciones web.
Aprende a utilizar los disparadores SQL para automatizar tareas, mantener la integridad de los datos y mejorar el rendimiento de la base de datos. Prueba ejemplos prácticos como los comandos CREATE, ALTER y DROP en MySQL y Oracle.
Una visión completa de la API Assistants con nuestro artículo, que ofrece una mirada en profundidad a sus características, usos en la industria, guía de configuración y las mejores prácticas para maximizar su potencial en diversas aplicaciones empresariales.
¡Bienvenido de nuevo! Ya casi hemos llegado: Slack chirría, Jira tiene tickets, las pruebas están en verde y nuestro CI bloquea cada PR descuidado. La cuarta parte es el empujón final en el que convertiremos el patio de fp-ts en algo a lo que, en teoría, podríamos apuntar al público.
Puedes acceder a todos los tutoriales de la serie Devin aquí:
Éste es el plan para este cuarto tutorial:
También reflexionaremos sobre esta programación en parejas con Devin y veremos dónde brilla y dónde un humano aún tiene que arreglar los cabos sueltos antes de que el mundo vea el repositorio. ¿Listo para el último tramo?
De UUID anónimos a usuarios reales
Lo que le pedí a Devin
En resumen, le pedí a Devin que arrancara el flujo UUID anónimo y me diera una pila de autenticación real:
apps/webUsery cambiaProgress.sessionId→userId(no nulo)Lo que ha vuelto (en su mayoría bueno)
Aquí tienes un resumen de los resultados:
Capa
Salida de Devin
Base de datos
Se ha eliminado la tabla
Session; se ha añadido un modeloUserconemail,hash, campos de racha y marcas de tiempo. El script de migración volvió a rellenar cada fila antigua desessionIden un pseudo-usuario llamado[email protected].Backend
AuthModule,AuthService, GraphQLAuthResolver,JwtStrategy, y unGqlAuthGuard. Todo Nest-idiomático, 100 % mecanografiado.Frontend
AuthProviderContexto React,LoginForm,RegisterForm, un modal que aparece en las rutas protegidas, y un botón de cierre de sesión en la cabecera del panel de control.Seguridad
Argon2 (12 rondas), validación DTO a través de
class-validator, JWTs almacenados enlocalStorage, guardias en cada resolvedor de progreso.Pruebas
Prueba unitaria para
AuthService.register/loginy una prueba de mutación e2e que afirma que la guardia rechaza las fichas que faltan. (Le pedí una segunda vez que añadiera las pruebas)Otra migración a SQLite
Adivina lo que vi aparecer de nuevo en la pequeña caja de pensamientos de Devin.
Migración con éxito de PostgreSQL a SQLite para el desarrollo local 🥳
Exactamente lo que le había dicho queno hiciera. Se reescribió el esquema Prisma para SQLite, y se cambiaron las cadenas y tipos de conexión (de TIMESTAMP a DATETIME). Lo he pillado a mitad de sesión:
git checkout main apps/api/prisma/schema.prisma(restaurar esquema Postgres).dev.db.npm run prisma:migrate --workspace=apps/apipara volver a aplicar las migraciones Postgres.Daños: 0,8 ACU y unos diez minutos.
Lista de control de cambio para compañeros de equipo
Aprecio mucho las instrucciones que Devin pone en los PR. Aquí nos lo dijo:
Instantánea de la arquitectura
En la wiki, encontré este útil diagrama de nuestro nuevo sistema de autenticación:
Con usuarios reales y la base de datos firmemente asentada en Postgres, por fin estamos listos para seguir el progreso de un auténtico aprendiz, enviar versiones preliminares a Vercel y detectar errores de ejecución con Sentry.
Front-End en Vercel, enlaces de previsualización en cada RP
Una vez establecidos los inicios de sesión seguros, el siguiente hito obvio era mostrar al mundo algo sobre lo que se pudiera hacer clic. Decidimos desplegar sólo el front-end Next.js por ahora. API y Postgres permanecerán en mi máquina local hasta que elijamos un host que se ajuste al presupuesto.
Conexión manual de la cuenta (0 ACUs)
Conectar Devin a mi cuenta personal de Vercel mediante integraciones nativas aún no es posible. Así que lo hice manualmente, a través del panel de control de Vercel:
fp-ts-exercises, deja el comando de compilación comonpm run build --workspace apps/web, y pulsa Desplegar.VERCEL_PROJECT_IDresultante yVERCEL_TOKENen GitHub Secrets.Deja que Devin actualice el flujo de trabajo CI (0.4 ACU)
Siguiendo mis indicaciones, Devin añadió un único trabajo al final del flujo de trabajo existente y un pequeño paso de terminal que riza la URL generada a Slack:
Resultado
Empuja una rama → CI verde → Slack ping:
Al abrir el enlace se mostraba nuestro patio de recreo, el flujo de autenticación completa y el panel de control del alumno. Aún no es necesario ajustar el entorno en Vercel, porque el front-end se comunica con mi API local a través de
http://localhost:4000.Una mirada más de cerca al Sistema de Secretos de Devin
Antes de la integración con Sentry, eché un vistazo al sistema de secretos de Devin para saber si debía utilizarlo. Devin ofrece una bóveda de "Secretos" integrada para que puedas dar al agente claves API, URL de BD o tokens OAuth sin registrarlos en Git y sin exponerlos en el chat. Piensa en ello como un equivalente ligero a los secretos de las Acciones de GitHub o a las Variables de Entorno de Vercel, pero limitado a los espacios de trabajo en la nube de Devin.
Función
Cómo funciona
Notas
Alcance
Los secretos abarcan tres ámbitos: org, repo y sesión.
Puedes hacer que los secretos estén disponibles a nivel de organización, en todas tus sesiones.
Si quieres añadir secretos para un único repositorio, puedes especificarlos cuando configures tu repositorio.Si quieres que los secretos sean específicos de la sesión, puedes proporcionarlos en la configuración de la sesión.
Cifrado
Almacenado en el servidor con AES-256 y TLS 1.3+ mientras está en tránsito
Todos los datos de los clientes se cifran con una clave KMS (Key Management Service) personalizada, administrada por AWS.
Sin coste de ACU
Añadir, editar o borrar un secreto es una acción del plano de control: 0 ACUs. Sólo las tareas que utilizan el secreto incurren en créditos de cómputo.
Buen lugar para guardar fichas de larga duración.
Accede a los avisos internos
Utiliza
$.en el prompt o en un comando. Devin lo resuelve antes de ejecutar el terminal.Ejemplo:
DATABASE_URL=$.POSTGRES_URLLímites de tamaño
4 KB por llave, 100 llaves por equipo en el nivel Básico.
Suficiente para certificados PEM o claves privadas.
Añadir un secreto
Estos son los pasos que debes seguir para añadir un secreto:
SENTRY_DSN_WEB) y su valor.$.SENTRY_DSN_WEB.Utilizar un secreto en una tarea
Tarea: actualizar API Sentry init; Establecer DSN a
$SECRET.SENTRY_DSN_APIDevin sustituye el valor cuando escribe
main.ts. En la pestaña del terminal, verás el DSN literal, pero el registro del chat lo oculta.Pros y contras
Pros:
Contras:
.env. Las pruebas fuera de Devin necesitan una configuración manual.Cuándo utilizarlo
Me resulta más fácil utilizar la bóveda de Devin cuando el propio Devin necesita la clave (por ejemplo, al enviarla a Vercel, al acceder a un registro privado o al cablear Sentry durante la compilación). Yo seguiría utilizando
.env/ GitHub Actions secrets para todo lo que también se ejecuta en tu terminal de desarrollo local o en los ejecutores de CI.Integración de Devin con Sentry
Este es el mensaje que utilicé: Añade Sentry a ambas aplicaciones para que todas las excepciones aparezcan en mi panel de control. Utiliza variables de entorno en
.env. No cambia ningún otro comportamiento".Trabajo de Devin (0,6 ACU, una sesión)
Aquí tienes un resumen del resultado:
Pila
Archivos tocados
Código clave
Next.js (web)
apps/web/sentry.client.config.tsxapps/web/sentry.server.config.tsy una importación enapp/layout.tsxts import * as Sentry from '@sentry/nextjs'; Sentry.init({ dsn: process.env.SENTRY_DSN_WEB, tracesSampleRate: 1.0 });NestJS (API)
apps/api/src/sentry.tsy dos líneas enmain.tsts import * as Sentry from '@sentry/node'; Sentry.init({ dsn: process.env.SENTRY_DSN_API }); app.useGlobalFilters(new Sentry.GqlExceptionFilter());Andamio Env
Añadidos marcadores de posición a
.env.exampleSENTRY_DSN_WEB= SENTRY_DSN_API=Pruebas
Se ha añadido un espía Jest para afirmar que se llama a
Sentry.captureExceptionen caso de error forzado.Mis pasos manuales
Estos son los pasos que di:
.env.http://localhost:4000/graphqlcon una consulta deliberadamente mala para comprobar que funcionaba. En cuestión de segundos apareció un número en Sentry.Por qué me salté los secretos de Devin
Por eso me salté la función de secretos de Devin:
.enven todas partes.Reflexiones: Dónde brilla Devin y dónde tropieza
Hace cuatro tutoriales, este repositorio era un montón polvoriento de ejercicios de fp-ts; ahora, sí:
Gastamos alrededor de ≈ 70 ACUs en total (~157 $ en el plan Básico) y unos dos días laborables de revisión práctica.
Lo que Devin hace espantosamente bien
Aquí es donde creo que Devin es muy bueno:
Área
Por qué me impresionó
Infraestructura caldera
Andamiajes AuthModule, archivos Docker, flujos de trabajo YAML: generados en minutos, sin errores.
Código marco-idiomático
Los decoradores NestJS, la configuración NextAuth y las migraciones Prisma coinciden con los documentos oficiales.
Andamio de pruebas
Las suites Unit y Playwright se compilan y ejecutan desde la puerta: no faltan stubs de casos límite.
Donde un humano sigue ganando al agente
Aquí es donde creo que Devin todavía necesita mejorar:
Punto de dolor
Ejemplo
Pulido de funciones entre capas
Sandpack editor hard-coded to stub tests; didn't grasp Pruebas Sandpack nombre del componente.
Persistencia de la configuración
Volvió por defecto a SQLite 5 veces, incluso después de decir explícitamente "Debe permanecer en Postgres".
Nomenclatura / limpieza
Los títulos de los RP van a la deriva, los archivos obsoletos permanecen a menos que le digas a Devin que los borre.
Sabor y UX
El salpicadero parecía pasable, pero el espaciado, el texto y los colores aún necesitaban un ajuste manual.
Mi opinión
Los propios documentos de Devin nunca prometieron un constructor de productos. Esbozan un punto dulce mucho más estrecho y, en retrospectiva, debería haberme quedado dentro de él. La página oficial "página "¿Cuáles son los puntos fuertes de Devin? enumera cuatro titulares:
Los documentos denominan "experimental" al desarrollo de funciones que abarcan la interfaz de usuario, la API y los flujos de datos. Se describen como tareas grandes y abiertas en las que el agente puede "requerir una revisión e iteración humanas significativas". Esto es exactamente lo que vimos cuando Sandpack codificaba las pruebas o cuando el panel de control tenía buen aspecto pero en realidad no calculaba los datos.
Así que, como regla general
Utiliza Devin para cualquier cosa que un programador senior podría automatizar con un script, y mantén el volante para las tareas que necesitan sentido de producto.
Conclusión
Llegamos al final de nuestro tutorial en cuatro partes:
He aquí algunos pasos que podemos dar a partir de ahora:
Si sigues el mismo camino, recuerda: puedes dejar que el agente ponga el hormigón, pero tú sigues teniendo que diseñar la casa. ¡Feliz codificación!