Curso
Bem-vindo de volta! No primeiro tutorial desta série, Devin tirou a poeira do meu antigo repositório fp-ts-exercises e abriu um PR de atualização de dependências. Nesta segunda parte, aumentaremos a dificuldade e criaremos recursos de pilha completa.
Você pode acessar todos os tutoriais da série Devin aqui:
- Configuração e primeira solicitação pull (parte 1)
- Enviando uma fatia vertical com Devin (Parte 2)
- Integrações, testes e CI/CD (Parte 3)
- Segurança, implementação e manutenção (Parte 4)
Quando chegar ao final desta segunda parte, você terá:
- A Playground Next.js 14, onde os alunos editam o código no navegador;
- Testes Vitest ao vivo que ficam verdes (ou vermelhos) em tempo real; e
- A NestJS com banco de dados SQL que salva o progresso com nada mais do que um UUID anônimo no localStorage.
Ao longo do caminho, permitiremos que o Devin gere sua própria lista de tarefas, observe-o fazer malabarismos com tíquetes de front-end e back-end e intervenha quando ele tropeçar em problemas de configuração. Mostrarei a você onde gastei (e economizei) ACUs, o que consertei manualmente e como manter as sessões eficientes.
Recapitulação e pré-requisitos
Ao longo desta série de tutoriais, estamos trabalhando no meu repositório de exercícios fp-ts (anteriormente) abandonado.
O projeto é uma coleção de pequenos desafios destinados a ensinar conceitos de programação funcional (como Option, Either, etc.) em TypeScript. No momento, é um repositório de clonagem e execução: os alunos o baixam, editam os arquivos localmente e executam os testes em seu próprio terminal.
O objetivo é transformar esses exercícios em um playground interativo baseado em navegador, no qual as pessoas podem ler uma explicação, ajustar o código em um editor na página e ver os testes serem aprovados (ou reprovados) instantaneamente. Os alunos também terão a oportunidade de fazer login para salvar seu progresso.
O que realizamos na primeira parte
Lembre-se de que no primeiro tutorial, nós:
- Modernizou o antigo repositório fp-ts: dependências mais recentes, linting, verificações de tipo.
- Conectamos o Devin ao GitHub e provamos que ele pode abrir uma solicitação pull limpa.
Ferramentas locais que você precisa para a segunda parte
Para este segundo tutorial, precisaremos de você:
- Node 20+ e npm 10 (vem com suporte a espaços de trabalho pronto para uso).
- Docker executando um contêiner do PostgreSQL (ou uma instância local do PostgreSQL).
Configurações recomendadas do Devin
Recomendo as seguintes configurações para o Devin:
- Defina um limite flexível de 5 ACUs por sessão em Configurações > Uso e limitesVocê pode definir um limite máximo de 5 ACUs por sessão em Settings > Usage & limits; vamos criar uma nova sessão para cada fase.
- Mantenha a guia de lapso de tempo visível para pausar ou cutucar o Devin se ele parar.
Deixe Devin escrever o plano de jogo
Achei que seria interessante começar testando as capacidades de planejamento de Devin. Criei um prompt e pedi a Devin, usando o recurso "Ask" (atualmente gratuito na versão Beta), que me ajudasse a planejar o trabalho que faríamos hoje.
Sugestão:
Quero transformar meu repositório fp-ts-exercises Node + TypeScript existente (atualmente, exercícios CLI de clonagem e execução) em uma plataforma de aprendizado baseada em navegador que programa o progresso.
Experiência alvo:
- Os alunos abrem um aplicativo da Web Next.js, escolhem um exercício, editam o código no navegador e veem os testes Vitest serem aprovados ou reprovados instantaneamente.
- O progresso (slugs concluídos) é armazenado no lado do servidor e recarregado em visitas posteriores, mas ainda não estamos adicionando contas de usuário (use um UUID anônimo armazenado no navegador).
Escolhas técnicas para as quais estou inclinado:
- Frontend: Next.js 14 (React 18, App Router)
- Editor e executor de código: Sandpack + @vitest/browser
- API: NestJS 13 com @nestjs/graphql (driver Apollo)
- Banco de dados: Prisma 5 com PostgreSQL
- Workspace: workspaces npm simples (apps/web, apps/api, packages/exercises)
Proponha um plano de implementação passo a passo (lista de tarefas) que dê vida a essa fatia vertical. Faça uma estimativa do custo relativo da ACU para cada tarefa e sinalize as etapas de longa duração (por exemplo, grandes migrações ou instalações de dependências pesadas).
Devin, de forma útil, retornou uma lista de tarefas de seis fases com estimativas de ACU para cada uma delas e sinalizou as etapas de "instalação de dependência pesada".
Resposta de Devin:
Fase 1: Configuração do espaço de trabalho (2-3 ACU)
- Inicializar a estrutura do espaço de trabalho do npm (1 ACU)
- Criar aplicativos/web, apps/apie packages/exercises diretórios
- Configurar a raiz package.json com definições de espaço de trabalho
- Mova os arquivos de exercícios existentes para packages/exercises/src/
- Configurar o front-end do Next.js 14 (1-2 ACU - Long-running: instalação de dependência)Inicialize o Next.js com o App Router em apps/webConfigurar o TypeScript e o Tailwind CSSConfigurar a estrutura básica de roteamento
Fase 2: Migração de pacotes de exercícios (3-4 ACU)
- Extraia o conteúdo do exercício para o pacote compartilhado (2 ACU)
- Criar pacotes/exercícios com extração de metadados de exercícios
- Analise os arquivos de exercícios existentes para extrair:
- Instruções
- Código inicial
- Soluções
- Definir interfaces TypeScript para a estrutura do exercício
- Implementar o sistema de descoberta de exercícios (1-2 ACU)
- Crie um scanner do sistema de arquivos (como fs.readdirSync em exercise.js:17-28)
- Exportar metadados do exercício: título, descrição, dificuldade, testes
Fase 3: API de back-end (4-5 ACU)
- Configurar a API do NestJS com GraphQL (2 ACU - Longa duração: instalação de dependência)
- Inicialize o projeto NestJS em apps/api
- Configurar o servidor Apollo GraphQL
- Configurar endpoints básicos de verificação de integridade
- Implementar Prisma + PostgreSQL (2 ACU - Longa duração: configuração do banco de dados)
- Esquema de design para:
- Sessões de usuários
- Exercícios concluídos
- Configurar o cliente Prisma e as migrações
- Criar resolvedores de programas de controle de progresso
- Gerenciamento de sessões de usuários anônimos (1 ACU)
- Gerar UUID e armazenar no navegador localStorage
- Habilitar a persistência do progresso baseado em sessão sem autenticação
Fase 4: Recursos principais de front-end (5-6 ACU)
- Interface do navegador de exercícios (2 ACU)
- Listar exercícios por categoria (opção, ou, tarefa, etc.)
- Mostrar indicadores de progresso e status de conclusão
- Permitir a seleção e a navegação de exercícios
- Integração com o editor de código Sandpack (2-3 ACU - Em andamento há muito tempo: Configuração do Sandpack)
- Configurar o Sandpack com suporte a TypeScript
- Carregue o código inicial e o fp-ts dependências
- Configurar o sistema de arquivos para arquivos de exercício + teste
- Integração do corredor do navegador Vitest (1 ACU)
- Substituir execSync Chamadas do Vitest (exercise.js:45-47) por @vitest/browser
- Permitir a execução de testes em tempo real e a exibição de resultados
Fase 5: Programa de progresso (2-3 ACU)
- Gerenciamento do progresso no lado do cliente (1 ACU)
- Configurar o cliente Apollo para GraphQL
- Sincronizar o progresso com o backend
- Detecção de conclusão de exercício (1-2 ACU)
- Adaptar a lógica de detecção de sucesso existente (exercise.js:48-49)
- Acionar atualizações de progresso do backend na aprovação do teste
Fase 6: Polonês e implantação (2-3 ACU)
- Aprimoramentos de UI/UX (1-2 ACU)
- Garantir um design responsivo
- Adicionar estados de carregamento e tratamento de erros
- Melhorar a exibição das instruções de exercícios
- Configuração da implantação de produção (1 ACU)
- Configure o Docker para ambos os aplicativos
- Gerenciar variáveis de ambiente
- Configurar a implantação do banco de dados
Custo total estimado: 18-24 ACU
No geral, o plano foi muito bom. Mudei algumas coisas, principalmente na fase seis, já que abordaremos a implantação no quarto tutorial.
Fase 1: Espaço de trabalho e andaime frontal
Objetivo: Crie espaços de trabalho npm, mova os arquivos herdados e inicie um shell Next.js 14 em branco.ACU burn: 3,66 (planejado 1-2).Resultado: O repositório agora tem /apps/web
, packages/exercises
compartilhado e um aplicativo Next.js pronto para o Tailwind em execução em localhost:3000
.
O prompt
Pedi a Devin que criasse o plano que ele fez para a primeira fase. O Agentic Devin não tem contexto do que você poderia ter perguntado anteriormente no recurso "Ask Devin", portanto, você precisa criar um prompt separado e fornecer o contexto.
Não vou colar todos os prompts neste artigo, mas aqui está o primeiro:
Sugestão:
Tarefa: Inicialize a estrutura do espaço de trabalho npm e o front-end Next.js para a plataforma do navegador fp-ts-exercisesContext:
Estou convertendo meu sistema de aprendizado baseado em CLI fp-ts-exercises existente em uma plataforma baseada em navegador. O sistema atual tem exercícios organizados em 10-from-either.exercise.ts:1-3 com a configuração do TypeScript em tsconfig.json:88 e a configuração do Vitest em vitest.config.ts:7 .
Requisitos:
- Crie uma estrutura de espaço de trabalho npm:
- Root package.json com a configuração do espaço de trabalho para apps/web, apps/api, packages/exercises
- Mova os arquivos de exercícios existentes do src/ atual para packages/exercises/src/
- Preservar a convenção de nomenclatura do arquivo de exercício atual (.exercise.ts e .solution.ts)
- Inicialize o front-end Next.js 14 em apps/web:
- Use o roteador de aplicativos (não o roteador de páginas)
- Configure o TypeScript com configurações rígidas semelhantes às atuais tsconfig.json:88
- Adicionar CSS do Tailwind para estilização
- Criar uma estrutura básica de roteamento para navegação de exercícios
- Manter a compatibilidade:
- Garantir que a estrutura de exercícios e as importações existentes ainda funcionem
- Mantenha as dependências do fp-ts acessíveis em todo o espaço de trabalho
- Preservar os padrões atuais de configuração do Vitest
Entregáveis:
- Package.json configurado no espaço de trabalho na raiz
- Aplicativo Next.js em apps/web/ com TypeScript e Tailwind
- Exercícios migrados em packages/exercises/
- Estrutura básica de roteamento (/exercícios, /exercícios/[categoria], /exercícios/[categoria]/[slug])
Pilha tecnológica:
- Next.js 14 com o App Router
- TypeScript (modo estrito)
- Tailwind CSS
- Espaços de trabalho npm (não yarn/pnpm)
Submissão:
- Garantir a aprovação do script de verificação de tipo e lint
- Crie um PR com suas alterações
Todos os prompts que escrevi posteriormente seguiram o mesmo padrão: destaque da tarefa, contexto, requisitos, resultados, pilha de tecnologia e detalhes de envio.
O que Devin realmente fez
Demorou bastante tempo para decidir seu curso de ação (cerca de quatro minutos), mas conseguiu:
- Criou o esqueleto do espaço de trabalho
- Você migrou todas as pastas de exercícios para
packages/exercises/src
. - Você fez o bootstrapped do Next.js 14 com o App Router, TypeScript e Tailwind.
- Adicionados scripts de verificação de tipo e lint ao aplicativo front-end (depois que eu o cutuquei).
Por que o custo da ACU aumentou
O custo da ACU aumentou porque:
- Devin passou um minuto inteiro fazendo looping em
npm install
tentativas após um tempo limite do espelho. - Você tentou interromper o servidor de desenvolvimento e os processos com
q
no Vim e, em seguida, comCtrl-C
, e ambos falharam. Dei a ele um pouco de tempo para tentar consertá-lo sozinho, mas acabei intervindo manualmente e encerrando os processos nas duas vezes. Cada minuto extra significava ACUs extras, e eu não teria detectado esse problema rapidamente se não estivesse acompanhando de perto as ações de Devin.
Intervenções humanas e lições aprendidas
Aqui está um resumo das correções que precisei fazer:
Consertar |
Tempo |
Como eu fiz isso |
Tarefa de observação de nó suspenso encerrada |
15 s |
Processo encerrado no shell da VM. |
Reinstalação do Tailwind |
90 s |
npm install tailwindcss postcss autoprefixer --workspace=apps/web e reiniciei o tailwind init. |
Adicionado .next/ a .gitignore |
10 s |
Comprometido manualmente para evitar PRs inchados. |
Mover grandes árvores de arquivos é mais rápido manualmente e muito mais barato, pois Devin cobra por tempo/tarefa. Arrastei as pastas, fiz o commit e deixei que o agente pegasse a nova estrutura. Ele conseguiu extrair minhas alterações sem problemas e fazer uma mesclagem sozinho!
Dito isso, tive que solicitar que ele executasse os scripts lint e typecheck, mesmo que eu tivesse especificado isso em meu prompt inicial. No final, os dois funcionaram, mas falharam. Mesmo assim, Devin considerou o evento um sucesso e seguiu com as relações públicas.
Corrigi os dois problemas localmente, executei os scripts e executei o novo servidor de desenvolvimento da Web para garantir que ele iniciasse como pretendido e enviei o commit.
Fase 2: Empacotamento dos exercícios
Objetivo: Extraia todos os arquivos de desafios em um pacote reutilizável packages/exercises
e gere metadados para cada exercício.ACU burn: 0,6 (planejado 2+).Resultado: O pacote compartilhado exporta metadados digitados que o aplicativo da Web e a futura API podem importar com import { exercises } from '@exercises/registry'
.
O que Devin realmente fez
Devin criou:
- Interfaces TypeScript estruturadas para exercícios, metadados, categorias e o catálogo completo.
- Analisador de exercícios que:
- Extrai metadados de comentários de código e assinaturas de funções
- Analisa o código inicial, o código da solução e os casos de teste do Vitest
- Gera automaticamente tags a partir do uso do
fp-ts
- Converte nomes camelCase em títulos legíveis
- Sistema de descoberta de exercícios que:
- Você verifica o sistema de arquivos em busca de pares
.exercise.ts
e.solution.ts
- Cria um catálogo baseado em slug (por exemplo,
option-01
) - Organiza os exercícios por categoria, com armazenamento em cache para melhorar o desempenho
- Exportações convenientes para consulta de exercícios e categorias:
getExercises()
,getExerciseBySlug()
,getExercisesByCategory()
,getCategories()
,getCategoryBySlug()
Por que Devin terminou abaixo do orçamento
A Devin conseguiu manter o custo da ACU baixo - eis como ela fez isso:
- Sem instalações pesadas ou chamadas de rede
- A movimentação de arquivos foi simples; Devin usou
git mv
(barato) em vez de copiar e colar e diff - A geração de metadados era pura TypeScript, rápida para planejar e executar
Intervenções humanas
Desta vez, você não terá nenhum!
Aprendendo com a última vez, verifiquei a ramificação do Devin e executei os scripts localmente. Tudo foi compilado e o registro exporta definições de tipo limpas, o que o torna o material de entrada perfeito para a interface do usuário e a API que criaremos em seguida.
Fase 3: NestJS + GraphQL API
Objetivo: Monte um serviço NestJS 13 que exponha o progresso do exercício via GraphQL e persista os dados no PostgreSQL com Prisma.ACU burn: 4.2 (planejado 4).Resultado: apps/api
boots on localhost:4000/graphql
. Você pode consultar e alterar os registros de progresso com a chave de um ID de sessão anônimo.
O que Devin realmente fez
Para a terceira fase, Devin:
- Você criou uma API NestJS completa em
apps/api
com TypeScript e Apollo GraphQL - Integração do PostgreSQL com o Prisma ORM e configuração do esquema com os modelos
Session
eCompletedExercise
- Implementação do gerenciamento de sessões anônimas usando UUIDs (sem necessidade de autenticação)
- Você criou resolvedores GraphQL para criação/validação de sessões, consultas de exercícios e acompanhamento do progresso.
- Conectar o backend ao pacote de exercícios compartilhados (
packages/exercises
) para descoberta de dados - Você configurou o CORS para dar suporte à comunicação com o front-end Next.js
- Garantiu a compatibilidade de tipos entre o esquema GraphQL e as interfaces TypeScript existentes.
- Configurar scripts de desenvolvimento, fluxo de migração de banco de dados e integração com o Prisma Studio
Onde Devin tropeçou
Estes são os problemas que encontrei durante a terceira fase e as correções que tive de fazer:
Problema |
Consertar |
Tempo |
Você esqueceu de importar |
Solicitou Devin: "Estou encontrando este erro ao tentar executar o A metapropriedade 'import.meta' só é permitida quando a opção |
1 ACU, 5 minutos |
Falta o script Lint |
Solicitou Devin: "Adicione o script lint ao pacote api e certifique-se de que ele seja aprovado." |
1 ACU, 4 minutos |
Acidentalmente cometido |
|
20 s |
Lições aprendidas
Estas são minhas conclusões:
- Configuração vs. código: O Devin é excelente quando o modelo de estrutura está em vigor, mas o diagnóstico de problemas de dependência ainda precisa de um olho humano.
- Sempre execute localmente: Eu já havia criado um banco de dados PostgreSQL local em minha máquina, e as instruções do PR para executar a migração do Prisma e iniciar o ambiente de desenvolvimento foram claras e fáceis de seguir (veja a imagem abaixo). O comentário de Devin diz que você conseguiu executar a API localmente, mas o
npm run dev
travou até que oreflect-metadata
fosse adicionado.
- Devin é bom em lidar com comentários de RP. Comentei sobre o PR, explicando a Devin que eu havia tentado executar a API localmente e encontrei um erro. Imediatamente, ele me mostrou um pequeno emoji de olho, e a sessão foi retomada por si só para corrigir o erro, e uma correção foi enviada alguns minutos depois.
- Sempre verifique se há arquivos secretos: Devin havia enviado um arquivo
.env
com uma variávelDATABASE_URL
, que continha um nome de usuário e uma senha fictícios. Depois de extraído localmente, alterei o nome de usuário e a senha para os identificadores do meu banco de dados local e me certifiquei de remover o arquivo do sistema de rastreamento git e adicioná-lo ao site.gitignore
. Nos próximos tutoriais, você verá como lidar com segredos com segurança.
Fase 4: Playground do Sandpack e testes ao vivo
Objetivo: Ofereça aos alunos um editor de navegador que executa soluções fp-ts e verificações Vitest em tempo real.Queima de ACU: 7.2 (planejado 3-4).Resultado: Ao acessar /exercises/option-01
, você abre uma exibição dividida: O editor do Sandpack à esquerda, o túnel de teste à direita, e uma mensagem de sucesso é exibida no momento em que todas as especificações são aprovadas.
O que Devin realmente fez
Aqui está o que Devin fez na quarta fase:
- Páginas de navegação e listagem de exercícios construídas com suporte dinâmico a categorias e slug
- Editor Sandpack integrado com suporte a TypeScript, fp-ts e sistema de arquivos em tempo real
- Substituição do executor de testes CLI pelo Vitest no navegador e feedback ao vivo
- Conectar o front-end ao back-end por meio do Apollo Client para acompanhamento do progresso baseado em sessão
- Implementação de uma interface de usuário responsiva com estados de carregamento e tratamento de erros
Onde Devin queimou ACUs extras
Devin queimou mais ACUs do que o esperado para essa fase - aqui está o motivo:
Causa |
Como corrigi / mitiguei |
Deixei o código do executor da CLI desatualizado em |
Excluí o site |
Esperou por feedback, mas não perguntou explicitamente → loop ocioso. |
Digitei "Parece bom, continue." no bate-papo após três minutos de silêncio. |
Lições aprendidas
Minhas conclusões desta vez são:
- Assistir silenciosamente = queimar dinheiro. Mantenha a guia Timelapse aberta e, se o Devin fizer um loop, empurre-a ou pause.
- Exclua o código morto com antecedência. O Devin realmente não exclui o código obsoleto por si só, a menos que você o solicite. Cometi o erro de pedir anteriormente que ele movesse os arquivos sem que dissesseexplicitamente para excluí-los, e assim acabamos com vários pontos de entrada que confundiram muito o pobre Devin nessa fase.
Devin demorou um pouco aqui. Ele entrou em loop e entrou em loop, tentando salvar os mesmos problemas, não conectando o backend e o frontend corretamente, fazendo alterações, reiniciando os servidores, verificando no navegador se funcionava etc. Foi como um trabalho de desenvolvimento normal, suponho...
Agora você tem um aplicativo funcional. Consegui iniciar os servidores da API e da Web, navegar até localhost, editar a função stub, pressionar Save e ver o painel de teste passar de vermelho para verde. Então, percebi que ele só fazia o trabalho até a metade e codificava o teste e a solução do primeiro exercício em todas as páginas de exercícios. Apontei o problema e, depois de mais loops, ele conseguiu corrigi-lo e enviar suas correções.
Fase 5: Sincronização de progresso com UUID
Objetivo: Mantenha o status de conclusão de cada aluno e repinte a barra lateral ao recarregar, tudo sem contas de usuário.ACU burn: 2,7 (planejado 2-3).Resultado: Um pequeno gancho do React agora armazena um UUID gerado pelo navegador, chama a API do GraphQL em cada passagem de teste e pré-carrega o progresso sempre que o playground é montado.
O que Devin realmente fez
Para a quinta fase, Devin:
- Cliente Apollo integrado para comunicação GraphQL entre o front-end e o back-end
- Implementação do gerenciamento de sessões anônimas com UUIDs armazenados no localStorage
- Dados de progresso sincronizados em tempo real e indicadores visuais nos níveis de categoria e exercício
- Detectou a conclusão do exercício ao se conectar ao executor de testes Vitest no navegador
- Adicionado suporte off-line, atualizações otimistas e tratamento robusto de erros com lógica de repetição (que eu nunca solicitei).
Uma das vantagens é que Devin adicionou a atualização otimista da UI para que os emblemas mudem para ✅ instantaneamente. Isso é importante porque mantém a interface ágil mesmo em conexões de alta latência.
Lições aprendidas
Minhas conclusões são as seguintes:
- Um escopo pequeno significa erros mínimos: Essa foi uma tarefa pequena e de escopo restrito, portanto Devin a executou bem e dentro de um bom prazo.
- Diga o que você quer, mas também o que você não quer: Percebi que Devin tem uma tendência a tentar ampliar o escopo e, mais uma vez, ele me deu mais do que eu pedi. Nesse caso, não me importei, mas se houver algo que você realmente não quer que ele faça, diga explicitamente. Por exemplo, em todos os avisos, especifiquei "nenhuma funcionalidade de login" porque achei que ele tentaria ir até lá.
Agora temos a prova de que nosso pipeline de sessão anônima funciona de ponta a ponta. É hora de dar uma boa aparência na fase final de polimento.
Fase 6: Polimento da interface do usuário e painel de progresso
Objetivo: Transforme a interface utilitária em uma experiência pastel e "arejada" e adicione um painel que visualize a sequência de cada aluno, a escala de dificuldade e a atividade semanal.ACU burn: 11 (planejado ≈ 3).Resultado: Temas em tons pastéis claros/escuros, cartões de exercícios redesenhados e um painel de controle ao vivo que mostra anéis, barras e contadores de sequência. Devin conseguiu os traços gerais, mas eu entrei em cena para resgatar as incompatibilidades de nomes e as trocas de dependências desonestas.
Nessa fase, ampliei deliberadamente o escopo para ver como o Devin lidaria com um conjunto maior de solicitações. Na verdade, achei que seria muito mais fácil para o Devin lidar com isso do que com a fase 3, com toda a implementação de back-end. Alerta de spoiler: Eu estava errado.
O que Devin abordou desde o início
Este é o detalhamento de meus requisitos e do resultado de Devin:
Requisito |
Produção de Devin |
Sistema de design Pastel |
Foram adicionadas variáveis CSS do Tailwind para o primário em azul suave, sucesso em menta e acentos em lavanda. Defina |
Tipografia e espaçamento |
Introduziu uma classe |
Painel de progresso |
Nova rota
|
Cartões aprimorados |
Você substituiu |
Expansão do catálogo |
Gerou mais 10 exercícios de esboço com nomes narrativos e modelos de espaço reservado. Os metadados incluem dificuldade, tempo estimado e categoria. |
Onde Devin errou
As coisas não saíram perfeitamente - Devin:
- Nomes de arquivos de pacotes de exercícios alterados sem atualizar o wrapper ou resolver → tempo de execução 500s; correção +1 ACU.
- Substituiu discretamente o Postgres pelo SQLite "para facilitar o desenvolvimento local" sem pedir minha autorização. Eu não saberia se não estivesse assistindo.
- Deixei dezenas de declarações
console.log
em componentes React, e as verificações de lint continuaram tentando novamente.
Lições aprendidas
Minhas conclusões:
- A lógica do painel ainda precisa ser trabalhada: Devin conectou contadores de tempo e de sequência, mas os deixou não funcionais. As métricas de back-end devem ter pelo menos um teste de integração para que a interface do usuário do "caminho feliz" não seja mesclada prematuramente.
- O uso da ACU acelera em sessões longas: Depois de aproximadamente 8 ACUs, a sessão ficou visivelmente mais lenta. Sessões curtas e limitadas (< 5 ACUs) mantêm o contexto apertado e o agente responsivo.
- Devin trocará as dependências de forma "útil": Ele substituiu o Postgres pelo SQLite sem perguntar. Fixe os serviços essenciais em seu prompt: "Não mude o mecanismo do banco de dados; permaneça no Postgres."
- As tarefas de design acionam a rotatividade de carga quente: Cada atualização do Tailwind/Vite conta como tempo de agente. Talvez a melhor maneira de fazer isso seja pausar a sessão antes de editar estilos em massa e, em seguida, ativar o Devin quando o projeto for compilado de forma limpa.
Essa tarefa foi longa e cara, em comparação com o restante do trabalho que fizemos. Pelo menos Devin está ciente de onde as coisas deram errado:
Temos algo bonito, mas levou um pouco de tempo e não está totalmente funcional. Algumas das métricas do painel são codificadas - dois exercícios em nossa categoria de opções? Temos 10. As métricas de sequência e tempo gasto também não estão conectadas a nada, e a interface do usuário nas páginas de exercícios individuais é muito ruim.
Retrospectiva de custo e tempo
Como ficaram os números
Aqui está um resumo de como tudo aconteceu:
Fase |
UACs planejadas |
UACs reais |
Delta |
Notas |
1 - Espaço de trabalho e andaime |
1 - 2 |
3.66 |
▲ ≈ 1.7 |
Loops extras no site |
2 - Pacote de exercícios |
2 |
0.60 |
▼ 1.4 |
Movimentação simples de arquivos, sem instalações pesadas |
3 - API e Prisma |
4 |
4.20 |
▲ 0.2 |
Configurar rugas (falta |
4 - Playground e testes |
3 - 4 |
7.20 |
▲ ≈ 3.5 |
Ciclos de recarga a quente, paralisação do editor de mesclagem |
5 - Sincronização de progresso |
2 - 3 |
2.70 |
▼ ≈ 0.3 |
Gancho simples + consultas |
6 - Polimento da interface do usuário e painel de controle |
2 - 3 |
11.00 |
▲ ≈ 8 |
Reinstalações, troca silenciosa de banco de dados, grandes recargas de CSS |
Total |
18 - 24 |
29.36 |
▲ ≈ 6 – 11 |
Aproximadamente 35 % acima da estimativa inicial |
Custo: 29,36 ACUs × US$ 2,25 ≈ $66 |
Economia de tempo em relação ao trabalho manual
Essa é a minha estimativa de tempo economizado:
Tarefa |
Estimativa humana |
Devin (+ correções) |
Líquido |
Bootstrapping NestJS + GraphQL + Prisma |
4 horas |
1 hora (incluindo consertos) |
-3 horas |
Fiação do navegador Sandpack + Vitest |
3 horas |
1 hora e 20 minutos |
-1 h 40 min |
Redesenho completo em tons pastéis e painel de controle |
6 horas |
2 horas (mas ainda não está funcionando) |
−4 h |
Tempo total |
~13 horas |
~4 horas e 20 minutos |
-8 horas e 40 minutos |
Principais conclusões
Essas são as coisas que eu recomendo:
Tema |
O que você deve fazer |
Por que isso é importante |
Mantenha as sessões curtas |
- Limite cada execução em ≤ 5 ACUs. - Divida as grandes metas em bilhetes pequenos. |
As sessões > 8 ACUs são lentas, e as taxas de erro saltam para ≈35%. As rajadas curtas permanecem ágeis e mais baratas. |
Incentivar com antecedência, fazer pausas com frequência |
- Observe a guia Timelapse; se Devin fizer um loop, digite "Continue" ou "Sleep". - Faça uma pausa enquanto você edita em massa o CSS ou os documentos e, em seguida, desperte o Devin quando o código for compilado. |
Os loops ociosos ainda fazem o contador funcionar; a agitação de carga quente durante o trabalho de projeto é pura queima de ACU. |
Tratar a configuração como trabalho manual |
- Você mesmo pode mover/renomear árvores de arquivos grandes (arrastar e soltar supera os scripts ACU 0.8). - Corrija manualmente os erros de pacote da primeira vez; as novas tentativas são um desperdício de ACU. |
A E/S de arquivos e as instalações repetidas são responsáveis por cerca de 30% dos créditos desperdiçados. |
Verificação de tipo e fiapos localmente |
- Sempre execute seus scripts de teste (no nosso caso, lint e typecheck) antes de mesclar. - Adicione esses comandos ao seu CI (mais sobre isso no próximo tutorial!). |
Devin declarará sucesso mesmo quando o pipeline falhar. |
Tecnologia crítica de pinos |
- Diga o que você não deve mudar: "Fique no Postgres, sem login, mantenha o Tailwind." - Liste as variáveis de ambiente necessárias em |
Devin "ajudará" a trocar o Postgres pelo SQLite ou adicionará novos executores de teste, a menos que você seja solicitado a não fazê-lo. |
Você mesmo deve lidar com os segredos |
- Remova os arquivos - Planeje uma etapa de gerenciamento de segredos para tutoriais posteriores. |
Devin não distingue necessariamente credenciais fictícias de credenciais reais. |
Eliminar os impasses do editor de mesclagem |
- Entre em contato para ajudar com commits de mesclagem e saídas de processos. |
Os travamentos do Vim desperdiçam minutos e ACUs. |
Excluir código morto antecipadamente |
- Após as mudanças, |
Arquivos redundantes confundem o agente e aumentam o tempo de compilação. |
Adicionar testes de unidade para a nova lógica |
- Contadores de sequência, cronômetros ou métricas precisam de testes de back-end, não confie apenas na interface do usuário. Novamente, espere um pouco, pois abordaremos esse assunto no próximo tutorial. |
Devin conectou o painel, mas deixou os contadores não funcionais até que os testes expusessem a lacuna. |
Diga o que você quer e o que você não quer |
- As negativas explícitas ("No auth yet") impedem o aumento do escopo. - Analise o plano proposto por Devin e corte os extras. |
O agente gosta de entregar em excesso, o que é ótimo para demonstrações, mas ruim para orçamentos. |
O que vem a seguir?
Agora você tem:
- Um playground com acabamento em tons pastéis que executa testes fp-ts no navegador
- Uma API NestJS + PostgreSQL que lembra o progresso com nada mais do que um UUID
- Um painel de progresso que realmente parece divertido
Em próximo tutorialmudaremos o foco dos recursos para o fluxo de trabalho e a colaboração com você:
- Testes contínuos: Adicione as suítes Jest e Playwright e deixe que Devin mantenha ambas verdes a cada RP.
- Pipeline de CI/CD: Gere GitHub Actions que criam os aplicativos da Web e da API e executam os testes no Chrome sem periféricos.
- Integrações de equipe: Conecte o Devin ao Jira para atualizações de tíquetes, envie resumos de compilação para o Slack e experimente o novo recurso Wiki do Devin no produto para obter uma documentação leve.
Se você estiver pronto para continuar, clique no terceiro item da lista abaixo para ir para o próximo tutorial:
- Configuração e primeira solicitação pull (parte 1)
- Enviando uma fatia vertical com Devin (Parte 2)
- Integrações, testes e CI/CD (Parte 3)
- Segurança, implementação e manutenção (Parte 4)