Spec Driven Development (SDD): a melhor forma de programar com IA?
Desenvolvimento Orientado a Especificação e Inteligência Artificial
Introdução ao Desenvolvimento Orientado a Especificação (SDD)
- O vídeo aborda a importância do desenvolvimento orientado a especificação (SDD) na construção de soluções sérias com inteligência artificial.
- A afirmação de Andre Carpat destaca que falhas na IA muitas vezes são atribuídas à falta de habilidades do desenvolvedor, não à incapacidade da tecnologia.
- É enfatizado que, mesmo quando a IA falha, isso pode ser um reflexo das limitações humanas em conectar as ferramentas adequadamente.
A Natureza do Problema
- Embora existam modelos de IA melhores ou piores, o foco deve ser em maximizar as chances de sucesso ao resolver problemas com IA.
- O vídeo menciona um recurso da IBM que explica as diferenças entre SDD e o Vibe Coding tradicional, destacando a necessidade de uma abordagem mais estruturada no desenvolvimento.
Abordagem Histórica e Mentalidade
- O apresentador faz um disclaimer sobre como o desenvolvimento sempre exigiu planejamento antes da codificação, não sendo uma prática nova.
- Um artigo anterior do apresentador é mencionado para ilustrar como pensar em alto nível ao desenvolver funcionalidades, utilizando user stories como guia.
User Stories e Implementação
- As user stories são descritas como narrativas que definem o que os usuários devem conseguir fazer dentro do aplicativo.
- Exemplos práticos são dados para mostrar como essas histórias ajudam na implementação das funcionalidades desejadas pelos usuários.
Evolução do Papel do Desenvolvedor
- A crescente necessidade dos desenvolvedores adotarem uma mentalidade semelhante à de gerentes de projeto (PM), especialmente no contexto atual onde orquestrar modelos se torna crucial.
- A transição da dificuldade na escrita de código para a orquestração dos modelos é discutida, ressaltando mudanças nas responsabilidades dos desenvolvedores.
Diferenças entre Vibe Code e Spec Driven Development
Conceitos de Vibe Code
- O termo "vibe code" é utilizado para descrever uma abordagem onde o desenvolvedor não compreende completamente o código que está escrevendo, mas se preocupa apenas com o resultado final.
- Quando um desenvolvedor entende o código, mesmo sem escrever uma linha, ele não está em "vibe coding", pois possui confiança e consciência sobre a implementação.
- No "vibe code", as instruções dadas à IA são genéricas, levando a muitas suposições por parte da máquina na geração do código.
Desafios do Vibe Code
- A dificuldade em prever resultados no "vibe code" pode levar a um processo iterativo longo e frustrante, onde o desenvolvedor tenta ajustar suas solicitações à IA até obter um resultado satisfatório.
- Embora essa abordagem seja barata e útil para exploração inicial de ideias, ela pode ser estressante quando a IA não compreende corretamente as intenções do desenvolvedor.
Limitações em Projetos Sérios
- O uso de "vibe code" é problemático em projetos maiores ou mais estruturados, onde especificações claras são necessárias.
- Em equipes de desenvolvimento, é essencial ter instruções bem definidas e outputs desejados para evitar confusões durante a implementação.
Ciclo de Vida do Desenvolvimento de Software (SDLC)
Estrutura Tradicional do SDLC
- O ciclo tradicional começa com planejamento e design, seguido pela implementação, testes e manutenção. Este modelo é conhecido como modelo waterfall (cascata).
- O SDLC envolve iterações até que os requisitos sejam atendidos antes do deploy final do software.
Transição para Especificação Orientada
- A abordagem orientada à especificação (spec driven development - SDD) se baseia nos princípios tradicionais do SDLC, mas inicia-se com prompts que descrevem funcionalidades desejadas ao invés de implementações específicas.
- Começa-se com histórias de usuários para definir requisitos claros (PRD), enfatizando a importância da arquitetura no desenvolvimento de software.
Importância da Engenharia de Software
- A engenharia de software continua sendo crucial; mesmo com novas abordagens como cloud coding ou Codex, os fundamentos permanecem relevantes.
- É necessário aprovar planos antes da implementação efetiva; isso garante que todos os requisitos estejam alinhados antes que o código seja escrito.
Implementação Baseada em Especificações
- Após gerar requisitos claros, os desenvolvedores podem criar tickets e itens específicos para serem atacados pelos agentes durante a implementação.
- Essa metodologia inverte o processo tradicional: ao invés de documentar após codificar, começa-se com testes ou especificações claras antes da escrita do código.
Abordagens de Desenvolvimento: TDD vs SDD
Diferenças entre Métodos de Desenvolvimento
- O método tradicional envolve escrever código primeiro e documentar depois, enquanto no TDD (Test Driven Development), o teste é escrito antes do código, servindo como documentação.
- No SDD (Specification Driven Development), a especificação é criada inicialmente através de user stories, que guiam a implementação do código. Essa abordagem é mais focada em um nível estratégico.
- A preferência pessoal do apresentador por programar com SDD é destacada, especialmente após o surgimento da IA, que se alinha com essa metodologia.
Aplicação Prática do SDD
- O apresentador menciona uma série chamada "Criando um site do zero", onde utiliza o SDD para desenvolver um projeto real. Os primeiros episódios estão disponíveis gratuitamente.
- Ele recomenda assistir ao primeiro episódio da série, onde todos os requisitos foram organizados previamente, facilitando a produção dos vídeos subsequentes.
Ferramenta Tracer AI
- O Tracer AI é apresentado como uma ferramenta que transforma intenções de produtos em especificações estruturadas e compartilháveis, alinhando-se aos princípios do SDD.
- A ferramenta permite criar especificações e guiar agentes de programação dentro de um contexto definido, assegurando que as mudanças estejam conforme o plano estabelecido.
Instalação e Modos do Tracer AI
- Após criar uma conta gratuita no Tracer AI, o usuário deve instalá-lo como extensão na IDE preferida. A instalação pode ser feita em várias plataformas como VS Code ou GitHub App.
- O Tracer possui quatro modos: Epic Phases, Plan e Review. Cada modo serve para diferentes tipos de desenvolvimento; o modo Phases é recomendado para projetos complexos que envolvem múltiplas áreas.
Comparação entre Modos
- O modo Phases é ideal para grandes funcionalidades que requerem coordenação entre diversas partes do código; já o Plan mode é mais adequado para tarefas com escopo bem definido.
- O apresentador destaca a importância de escolher corretamente entre os modos dependendo da complexidade e das necessidades específicas do projeto em questão.
Refatoração do Portfólio no Quant Brasil
Importância do Modo de Raciocínio
- O uso do modo "Frontier" é recomendado para obter o máximo de raciocínio, equilibrando qualidade, velocidade e custo em projetos de múltiplas fases.
- Investir em um planejamento adequado desde o início pode economizar tempo e recursos na implementação futura.
Contexto da Refatoração
- O apresentador deseja refatorar a funcionalidade do portfólio no aplicativo Quant Brasil, que atualmente funciona como uma lista de observação (watchlist).
- A funcionalidade atual permite calcular métricas como beta, mas não fornece informações detalhadas sobre a composição financeira do portfólio.
Necessidades da Refatoração
- O apresentador quer saber a porcentagem de cada ativo no portfólio e o valor total investido em cada um deles.
- A refatoração requer integração com banco de dados e back-end, sendo considerada uma mudança significativa.
Vantagens do Uso do Tracer
- Utilizar ferramentas como Tracer dentro do VS Code facilita o planejamento ao ter acesso direto ao repositório existente.
- O Tracer analisa automaticamente a estrutura do repositório e identifica elementos já existentes que podem ser utilizados na refatoração.
Processo de Planejamento
- O apresentador inicia um prompt para descrever as necessidades da nova funcionalidade, destacando que os portfólios devem conter informações detalhadas sobre transações.
- Ele utiliza o Whisper Flow para converter suas falas em texto, facilitando a comunicação das ideias desejadas.
Perguntas Cruciais Durante a Refatoração
- O Tracer faz perguntas relevantes sobre como modelar as posições dos usuários e se deve rastrear transações individuais ou simplificar o modelo.
- A discussão inclui manter conceitos atuais separados da nova funcionalidade proposta.
Portfólio e Watchlist: Como Integrar?
Estrutura do Portfólio
- O portfólio não deve ser completamente substituído; a funcionalidade de "watch list" é considerada relevante e deve ser mantida.
- A atualização dos endpoints analíticos, como momentum e variação beta, deve ser feita para incorporar novos dados, mas o foco inicial será no portfólio cru e na exibição.
Funcionamento Interno
- O sistema utiliza agentes que monitoram diferentes aspectos, como modelos e definições de front-end, permitindo uma integração eficiente.
- Um diagrama mermaid é gerado automaticamente, mostrando a lógica do negócio envolvida na criação do portfólio.
Decisões Chave
- As decisões incluem a sincronização automática do portfólio sempre que uma transação é adicionada. Os endpoints analíticos devem continuar funcionando sem interrupções.
- O modo padrão será o "watchlist", garantindo que os usuários atuais não precisem migrar seus dados.
Fases de Implementação
- Quatro fases foram definidas para a implementação:
- Extensão do modelo de dados para suportar tanto o portfólio quanto a watchlist.
- Criação dos endpoints da API para transações.
- Atualização da interface do usuário (UI) para aceitar múltiplos modos.
- Desenvolvimento da UI para adicionar transações e visualizar posições em tempo real.
Planejamento Detalhado
- Cada fase pode ser dividida em tickets de desenvolvimento, permitindo trabalho paralelo entre desenvolvedores com dependências claras entre as tarefas.
- A especificação detalhada do plano é criada utilizando um desenvolvimento orientado por especificações (spec driven development), reduzindo as chances de erro durante a implementação.
Finalização e Exportação
- O plano finalizado inclui detalhes sobre migrações e verificações usando ferramentas específicas como Ruff.
- Há opções para exportar o plano em formato markdown ou integrá-lo diretamente com agentes preferidos como Cloud Code ou Codex.
Implementação de Cloud Code e Verificação de Mudanças
Introdução ao Cloud Code
- O apresentador introduz um plano para implementar um cloud code com 1 milhão de contextos, destacando sua eficácia.
- Demonstra como o código se integra ao sistema, utilizando a funcionalidade de handoff para alternar entre diferentes modelos.
Execução do Código
- O apresentador menciona que não implementará todas as fases devido à complexidade, mas irá rodar o cloud code para testar funcionalidades.
- Ele destaca a rapidez da implementação, mencionando que todo o processo foi concluído em menos de quatro minutos, apesar de um erro não relacionado.
Etapa de Verificação
- A fase atual é a verificação das mudanças feitas pelo CLI do Cloud Code, onde se analisa a implementação realizada.
- O apresentador compara essa etapa a uma revisão de código (code review), onde são gerenciados comentários e sugestões para melhorias.
Resultados da Verificação
- Durante a verificação, foram encontrados dois problemas: valores não limitados no modo e tipo de transação e queries sem índice que podem ser caras.
- O apresentador elogia os detalhes fornecidos pela ferramenta Tracer AI na identificação dos problemas técnicos.
Conclusão e Reflexões Finais
- Ele conclui ressaltando a importância do Spec Driven Development como uma abordagem profissional na programação.
- Agradece à parceria com o Tracer e incentiva os espectadores a se inscreverem no canal e compartilharem o vídeo com outros interessados em programação.