Engenharia de Software com IA: Spec Driven Design na Prática (Hands-on)
Convidados
Gustavo Passi
Podcaster @ Empreendacast
Explore o episódio
A era do prompt acabou? No mundo da Engenharia de Software com IA, a resposta é sim e não. Neste episódio épico do PPT Não Compila, mergulhamos de cabeça no "Spec Driven Design", a metodologia que redefine a forma como construímos software de alta qualidade e manutenibilidade. Esqueça os prompts genéricos; aqui, o foco é na documentação robusta e no contexto bem definido para guiar a inteligência artificial. Se você busca entender como escalar e reproduzir processos de Engenharia de Software com IA, este é o guia definitivo. Com a presença especial de Gustavo Passi, que assume o papel de “corneteiro” e questionador, Wellington Cruz conduz um hands-on de quase 3 horas, demonstrando o desenvolvimento de um gerenciador de decks de Pokémon. Você verá como dois agentes de IA – Gemini como o planejador e Claude como o programador – interagem com especificações detalhadas em arquivos Markdown. Da arquitetura com React, Next.js, Spring Boot e Java, passando por Docker e Kubernetes, até a integração com a PokiAPI e o uso de ferramentas como Swagger e Google Cloud (GCP), cada etapa é cuidadosamente planejada para gerar um código limpo e funcional. Descubra os desafios da documentação, a importância da validação humana e como a IA pode otimizar a criação de software, mesmo com o uso de um banco de dados SQL Lite e a gestão de segredos via Secret Manager. Este episódio prova que o conhecimento técnico do arquiteto e do desenvolvedor é mais crucial do que nunca para direcionar a IA com precisão, garantindo a qualidade e a longevidade do produto final. Não perca este mergulho profundo no futuro do desenvolvimento de software. Confira o código-fonte e a documentação detalhada no GitHub (link na descrição), inscreva-se no canal para não perder a continuação, onde abordaremos qualidade (QA), DevOps e o code review com IA, e deixe seu comentário sobre o que mais você quer ver!
- O Fim da Era do Prompt: Por Que a Documentação Guia a IA?
- Boas-Vindas e o Retorno do Corneteiro: Gustavo Passe no PPT Não Compila
- Spec-Driven Design Explicado: O Segredo para uma IA Produtiva
- Preparando o Terreno: Estrutura do Projeto e o Poder do Markdown para LLMs
- Desvendando o `project.md`: As 10 Regras Inegociáveis para Nossos Agentes de IA
- Arquitetura Detalhada: Stack Frontend/Backend, Segurança e Persistência de Dados
- Regras de Negócio e Layout: Definindo a Experiência do Usuário e o Core do Pokedeck
- Planejamento Ágil com IA: Dividindo o Desenvolvimento em Sprints Validadas
- Gemini Entra em Ação: O Agente Planejador Detalhando as Especificações
- Validação da Arquitetura: Detalhes Técnicos, Modelagem de Dados e API Design
- Riscos e Decisões Pendentes: A IA Revela Falhas na Especificação Humana
- Refinamento das Regras de Negócio: Corrigindo a Lógica de Transferência de Pokémon
- Detalhando o Layout e Infra: Cores, Componentes e Pipeline de CI/CD
- Planejando a Sprint 1: O Detalhamento Minucioso para o Desenvolvedor
- Gemini Conclui o Planejamento: Todas as 9 Sprints Detalhadas e Prontas
- Cloud Entra em Cena: O Agente Programador Identifica Inconsistências
- Diálogo com a IA: Corrigindo as Pendências do Planejamento
- Início da Sprint 1: Cloud Começa a Gerar Código e Estrutura
- Desafios da Automatização: Lidando com Permissões e Dependências
- Scaffold Completo: A Estrutura Básica do Projeto Ganha Vida
- Validação da Sprint 1: Rodando o Backend (Spring Boot) e o Frontend (Next.js)
- Sprint 2: Mock do Web Service – API Design e DTOs em Ação
- Validação da Sprint 2: Explorando a API Mockada do Pokedeck
- Sprint 3: Mock do Frontend – A Interface do Usuário Ganhando Forma
- Validação da Sprint 3: A Experiência Visual do Pokedeck
- Conclusão e Próximos Passos: O Poder da Engenharia de Contexto com IA
O que a gente chama de da era do prompt acabou.
Ah, é, você pode, você vai utilizar prompts ainda, mas o spec driven design ele é baseado em documentação, não é questão do efeito final que você quer. Mas quando você fala sobre manutenabilidade e qualidade de software, você tem que falar sobre como isso pode ser mantido na linha do tempo. O objetivo aqui é mostrar como você documenta, sim. como você dá escala e como você reproduz o processo de engenharia de software junto com o processo diário. Qual a qualidade do código foi gerado aqui? Eu não sei. Ou eu reviso passo a passo manualmente ou eu coloco uma IA para me ajudar para para fazer isso. Muito bem.
Muito bem, meus amigos do PPT não compil. Estamos aqui para mais um episódio. Hoje é um episódio diferente.
Hoje é um episódio Rzone, mão na máquina, mão no MD, pra gente mostrar como que se desenvolve software com inteligência artificial. E para isso eu tô aqui com meu amigo, meu irmão Gustavo Passe. Tô aqui para cornetar, fazer perguntas difíceis e mostrar que eu ainda lembro algumas coisas da programação.
Duvido.
Vixi, você vai se surpreender.
Eu duvido com inglês assim, ó. Nível CNA.
Não acredito. Eu pode ser.
Pode, pode acreditar.
Sabe que até hoje eu duvido que você escreveu uma linha de código na sua vida.
Escrevi, cara. Escrevi. Eu enganei bastante gente.
Não pode ser, cara. Mas eu era um programador nota cinco para seis, assim, logo os caras falou: "Mano, vamos levar pro comercial porque não dá, velho. Não dá, não dá. A chance desse cara dar um delete sem é muito alto, mano.
O Gustavo que é o host também do PPT, do do podcast compil do PPT não compila, não, que é o o imprend da Cast que eu já tive o prazer de ser host algumas vezes e que se você não sabe o PPT no compil só existe por causa do empreend que é aí, tá vendo? um fork, né?
Isso aí.
E que deu certo e que estamos aqui até hoje, né?
Muito bem. E o ainda estamos lá falando da parte de negócios aqui no PPT. Lá é fronte, aqui é back. Não, aí mais ou menos, né?
É, lá é pi, aqui é dev. Queredo, Piou?
Pien.
Obrigado, mano. Bom te ver aqui com a gente de novo. Valeu. Vamos lá porque a gente teve muito feedback positivo sobre o episódio falando de engenharia de software com e aqui a gente vai sentar o dedo na máquina e vamos fazer na real.
Então, se você tá com tempo, senta.
Me dica, senta e presta atenção. Aqui a gente vai explicar exatamente como que você faz engenharia de contexto.
Muito bem.
A gente vai explicar como que você usa a seu favor e como o deve e o arquiteto é tão ou mais importante nesse momento do uso da IA.
Solta a vinheta. Quem é esse Pokémon? Fu o editor faz isso e fica da hora. Sabe que aparece assim, você tem que te É, é, é isso aí, pô. Faz, faz. Ô, vai ser bom. Ô, ô, Berê, vai ser bom.
Bota aí pra gente. E ó, se você curte o PPT no Compila, se você acha que a gente traz benefício pra sua vida profissional, que a gente contribui de alguma forma ou até de entretenimento, sei lá, o cara dá risada.
É isso aí, às vezes é um momento que o cara tem para rir.
Isso. Exatamente.
Trampa com um monte de gente chata, né?
Exatamente. Quer quer ouvir aqui, trocar uma ideia com a gente, você pode ser um contribuidor do PPTo com pila, você pode ser membro do PPTo com pila lá no YouTube, né? E se você não gosta de dar dinheiro pra BigTech, você pode contribuir diretamente pro PPTIL.
Isso aí. [email protected].
Mentira, esse aí não é [email protected].
Vai lá, contribui com qualquer valor que você acha que contribui aqui com com o nosso ecossistema, porque tem que pagar o bolívio ali, ó.
Isso aí. A cerveja, né?
O Zé Delivery tá caro, mano.
O Zé Delivre tá caro. Então, ajuda a gente aqui e a gente vai est sempre gerando conteúdo de qualidade, de graça.
O conteúdo desse episódio aqui, cara.
Hum.
Eu tenho certeza que qualquer curso aí seria mais de R$ 500.
Acho que vai virar série, hein? que não vai caber num episódio só, não. Vamos ver.
Vamos lá. Bora.
Eu vou começar deixando o card aqui para vocês. Eh, quem não assistiu esse episódio, eu acho que é uma boa começar vendo esse episódio como introdução pro que a gente vai tratar aqui hoje, que é a engenharia de software utilizando IA.
a gente gravou esse episódio e recebemos muitos feedbacks de aprofundar o assunto e trazer uma noção de hand zone, de como isso funciona na prática, né? Então, eu conversei com o Valdir aqui, que é um do dos nossos parceiros do PPT no Cupila, sobre como a gente tá olhando pro mercado de desenvolvimento de software pelo ponto de vista de engenharia e arquitetura, utilizando os agentes de inteligência artificial. E eu recebi muitos comentários, tanto no Instagram quanto no LinkedIn de como tratar isso na prática, como que isso funciona de fato, né? Então, hoje a gente vai fazer aqui um episódio handone, onde a gente vai desenvolver em poucos minutos uma aplicação inteira do zero até quase a produção. vocês vão entender lá no final, mas a gente vai mostrar aqui exatamente como que você utiliza os agentes de IA para produzir esse software com todos os o o os preceitos e todas as boas práticas de engenharia e arquitetura de software utilizando esses agentes. Então, a gente vai fazer isso na prática com vocês aqui. Então, eh, vocês estão vendo a gente aqui agora, né, que estou aqui com o meu amigo Gustavo Passe, que há muito tempo não vem aqui no podcast.
Dá um oi. Dá um oi aí, gordinho.
É hoje que a gente acaba com os programador Júnior e Pleno.
É, é quase isso.
É hoje. Tá certo. Vou voltar a programar e aí a gente vai focar aqui o vídeo na tela aqui do meu PC que tá que já tá aqui na tanto no estúdio quanto na tela aí para vocês. Eu vou me esforçar o máximo para ler um pouco dos arquivos que a gente vai tratar aqui, de escrever para quem tiver ouvindo isso só em áudio. Mas recomendo que se você estiver ouvindo em áudio e ficar com alguma dúvida ou quiser aprofundar o assunto depois vá lá e acompanha a versão em vídeo. Tanto no YouTube quanto no Spotify você vai conseguir ver a gente por vídeo, tá? Então a ideia aqui é a gente mostrar um hand zone e e e dar uma ideia exatamente de como funciona essa parte de engenharia de software utilizando IA. Tem um disclaimer que eu preciso fazer aqui, Gustavo.
Hum. Eh, isso daqui não é um framework, isso aqui não é um padrão de mercado, é uma um exemplo que eu criei ali pra gente conseguir didaticamente mostrar como isso funciona.
Achei que você ia falar: "Eu não vou entregar hoje como todo programador.
Agora não tem mais a desculpa".
Agora não tem mais a desculpa.
Tem um disclaimer, né? não vai ficar pronto hoje, não vai ficar pronto. Vocês vão ver isso rodando. Só que muito provavelmente você que já tá acostumado a desenvolvimento com a vai perceber que existem outros frameworks que automatizam boa parte do que a gente vai fazer. Existem skills, por exemplo, no Cloud ou no Gemini, que você consegue automatizar e deixar esse processo ainda mais aperfeiçoado, ainda mais automatizado. Mas o meu objetivo aqui não é mostrar o estado da arte, mas didaticamente mostrar para vocês como que funciona uma coisa chamada, Gustavo, Spect Driven design.
Spect driven design.
Sabe o que significa spec driven design?
Não é specification. Driven design. Então você vai desenvolver um software a partir da sua especificação, certo?
No episódio que eu recomendo que vocês vejam lá com o Valdir, a gente comentou inclusive de que o próximo passo, talvez pra IA, seja você documentar o software para que a IA gerec,
né?
Certo? Então, a gente tá num processo de amadurecimento desse processo.
Se eu pegar as histórias que eu escrevi de alguma outra coisa, ele vai gerar software para mim. Sim, mas você consegue até deixar isso um pouco mais automatizado. A gente vai mostrar aqui hoje. Eh, a gente mostrou, pô, mas isso é um desafio legal, né?
Várias pessoas que desenvolveram aquele modelo de histórias pode reunir esses documentos e tentar.
Nós vamos fazer isso agora. Ah, é ao vivo. Ao vivo não, porque estamos gravados, masivo, uma live, vocês entenderam, é uma live gravada vivo ao vivo não. Eh, na unha, sem edições.
Na unha, exatamente, né? Então, o que que é o spec Driving design? é você definir as especificações do software e você direcionar os agentes para fazer exatamente aquilo que você quer que ele faça.
Um exemplo, se fosse um software de locadora de de vídeo, como que a gente faria? B podia dar um exemplo mais velho, sei lá, um ába?
Não, [ __ ] Não é que uma locadora de filmes é mais legal, né? O catálogo, um cadastro, tem um crudezinho, certo?
Um crude de filme, de estilos.
O que a gente vai fazer é mais legal.
É, a gente vai fazer um ger a Netflix, a gente vai fazer um gerenciador de deck de Pokémon.
Ah, vamos vender pro Thiago Negro.
Vamos. Isso. E talvez ele talvez compre e a gente fique milionário, né? Então, a gente vai fazer um um gerenciador de deck de Pokémon em web, certo? Eu já vou falar sobre arquitetura porque eu vou mostrar para vocês como é feito essa especificação. Mas o que eu quero eh deixar claro para vocês desde o começo é o porqu ter o conhecimento técnico para utilizar Bia. Vocês vão ver que nós estamos num processo de evolução que a gente não vai simplesmente sentar no cloud ou no Gemini, nós vamos usar os dois, tá pessoal? tanto clou como gemini hoje e ficar pedindo através de prompt. A o que a gente chama de da era do prompt acabou.
Ah, é, você pode, você vai utilizar prompts ainda, mas o spec driven design ele é baseado em documentação. E é isso que eu quero mostrar aqui para vocês no arquivo MD, Markdown. Exatamente. Arquivo MD. Para quem não conhece o formato MD é um formato de de marcação de texto, assim como é o HTML, que é um formato de marcação de texto, só que mais enxuto, onde você consegue definir prioridade, consegue dar semântica pro pro texto, né? Então você consegue dar hierarquia, etc., que pro modelo de LLM é muito importante.
Ah, ela ela também lê da esquerda pra direita, de cima para baixo.
Sim. E aí, se você define um título ou subtítulo ou subsubtítulo, ela entende o que, né?
Isso, ela entende o que tá dentro do que o tab e o contexto com tab. Conta tab com alguns símbolos que tem no no próprio mark. Então, sim.
Então, eh, eu vou o que que a gente vai utilizar hoje aqui? Vamos utilizar o cloud. Eu tenho o plano pago do Cloud, mas o que a gente vai fazer aqui hoje, nem de longe vai usar o limite, então vocês poderiam usar no plano gratuito. E o Gemini vamos utilizar também no plano gratuito, certo?
Todos eles nós vamos usar no modo console. O que a gente vai utilizar aqui é uma máquina com buntu. Eu vou utilizar dois terminais aqui, BH.
Eh, um para rodar o três terminais, para falar a verdade, um para rodar o Clode, um para rodar o Gemini e um para executar a aplicação.
Vou usar o VS Code pra gente fazer as revisões e analisar o código que é gerado.
E vou utilizar o Firefox pra gente testar a aplicação rodando.
[ __ ] tudo alternativo. Não vai usar o Chrome, não vai usar o Não vai usar o os agente oficial. Você é muito Vamos usar os agentes oficientão, mano.
Vamos usar o jinais, só que do modo terminal.
Posso posso sugerir? Vamos matricular a galera, né? Meu conhecimento e o seu conhecimento. Você arquiteto de software, certo? Pós-graduado, sei lá o quê, tem tanta certificação aí que não cabe nem no duas linhas no LinkedIn, certo? Manja de Python, lógica de programação.
É o que se espera de um arquiteto.
Não, então eu eu an fui programador bem mais ou menos, tenho noção de lógica de programação, um pouquinho de script SQL, mas tô há 20 anos sem mexer em nada.
Você não é um ignorante no mundo de desenvolvimento, não. Mas sou júnior de novo.
Mas é um júnior. E e é por isso que eu convidei o meu amigo, meu irmão Gustavo aqui, cara de muitos anos que eu tenho uma grande amizade, para que ele visse acompanhar e fazer as perguntas como alguém que não conhece faria.
Sim.
Tá. Então ele vai acompanhar com a gente aqui. Eu vou explicar o que tá sendo feito e o Gustavo vai fazer as perguntas.
Muito bem. Então nós vamos fazer um deck de gerenciamento de cartas Pokémon.
Isso. Primeira coisa que eu vou mostrar para vocês é isso aqui, ó. Poki, poqui que é uma API gratuita, ela não precisa de de autenticação e ela é exatamente utilizado para fins didáticos, né? Então você tem aqui uma PI gratuita, eh, sem autenticação, onde você consegue ter informações sobre os Pokémons, como eles evoluem, quais são as Tazua.
Ah, é, cara, legal, né? Isso aqui para ensinar, cara, é muito legal. Então, você consegue pegar as cores, as formas, quais são os habitates, tudo isso aqui de forma e mas nós vamos fazer visual recognition também. Se eu tirar foto de um Pikachu, ele Ah, isso é, isso é interessante você falar, Gustavo, para eu poder explicar.
O que a gente vai fazer aqui hoje, gente, é uma aplicação web gerada por IA, mas que não usa IA. Ela é uma aplicação, depois de pronta, ela não usa IA.
Ah, tá. O código é sintético, né? Como que fala? É, ele não tem vida, ele não ele ele ela não é inteligente por si só aplicação.
Entendi. Entendi. Se eu tirar foto do Pikachu e não falar o que é, ele não faz nada. Aqui vai ser uma aplicação web que eu faria eh aqui no VS Code codando do zero para mostrar um catálogo de de Pokémon. Se você quer que a gente faça uma continuação desse vídeo com utilizando IA para gerar aplicações que usam IA, comenta aqui embaixo, engaja bastante no vídeo que talvez a gente consiga dar evolução nisso.
Primeira coisa que eu ia fazer é tirar a foto do cardio e ele organizar para mim, né?
Dá para fazer aí?
Exatamente. E por que que dá para fazer?
Porque esse é o primeiro ponto que eu quero compartilhar aqui com vocês. Aqui eu tenho toda a especificação da API dentro desse endereço. Poki, Docs, evolution sections. E aqui eu tenho todos os métodos e todas as assinaturas de como eu chamaria essa API, quais são os retornos. Isso aqui para mim é ouro para trabalhar com IA, porque a IA pode entender isso daqui e fazer exatamente o que eu preciso. Vocês vão entender porqu, tá? Então, esse é o primeiro ponto. O nosso objetivo é fazer um gerenciador de decks, onde eu vou colocar os Pokémons dentro desses decks.
Eu vou ter uma área logada, onde eu vou entrar com usuário e senha para ver quais são os meus decks. E eu posso trocar Pokémons com os meus amigos.
Então, eu posso entrar lá e falar: "Ó, vou te mandar o Pikachu e te mande de presente." Esse é o escopo. É um escopo simples de formato didático, tá, pessoal? Eu quero Charmander, não quero cachorro.
Tá bom, eu mando o Charmander para você, tá bom?
Como é que a gente começa? Já falei, vamos utilizar apenas o Firefox, seu celular tá vibrando aí.
O console, nada demais. o console do Linux aqui, o próprio Bash aqui eu tô usando uma máquina com Buuntu e o VS Code. Eu já adicionei aqui ao workspace do meu VS Code uma pasta que eu criei spec Driven Pokdeck.
Você criou no no diretório mesmo lá.
Cri criei no diretório. Veja, não tô usando framework, não tô usando skill.
Uma coisa que eu recomendo que você use tanto no Gemini quanto no Cloud, no Cloud Code são os plugins de memória para ele poder recuperar contexto de uma forma automatizada. Eu ainda não testei se ele usa mais tokens ou menos tokens quando você usa esses plugins. Algumas pessoas dizem que economiza mais tokens, outras pessoas dizem que quando ele recupera o contexto que tá persistido no disco e manda de volta pro cloud, você gasta mais tokens. Eu não sei se você sabe, se você já fez esse exame de de como funciona esses plugin de memória, deixa o comentário aqui pr passar. Isso que você fala, você que já fez exame de token.
Exame de token é meio esquisito.
É, ia ser ruim. Agora a dúvida, você que me ensinou a mexer no Antigravity, o Visual Studio Code é estilo Ant Gravity? O o Antigravity é uma versão do do VS Code feita pela Google para interagir com o Gemini, Google, tá, né?
Que cospe no final Python, não, qualquer linguagem que você quiser.
É, exatamente qualquagem aquele que a gente configurou no caso, Python porque é um mundo que você ama.
Sim, Python, não, porque era a linguagem adequada para aquele para aquela aplicação que você me pediu ajuda, né? E aí entra o conhecimento do desenvolvedor, do do arquiteto, definir exatamente o que vai ser feito com a linguagem correta, tá bom?
Você pode fazer qualquer aplicação com qualquer linguagem e o agente vai te obedecer. Mas aí você e aí eu o que eu vou mostrar aqui nas especificações, como a gente controla isso.
E nós vamos cuspinho o que é isso.
Vou mostrar aqui agora, tá? Mas o importante é, vou mostrar aqui para vocês que nós vamos começar somente com uma estrutura de pastas, onde eu tenho aqui o meu code base, uma pasta escrito specification, uma pasta de planning e um arquivo inicial que é o project. Markdown.
Eu vou abrir esse aqui para vocês verem.
Mas, ó, o code base ele tá vazio, não tem nada criado. O specification tem quatro arquivos que eu já vou mostrar para vocês. E o planning tem um arquivo, vocês vão entender porquê. Vamos lá. Eu vou abrir o primeiro que é o project.m.
Quero falar com você agora que ainda não conhece a Clever. Clever é uma empresa que já tem mais de 3 milhões de usuários em 30 países com 30 idiomas diferentes que tem trazido soluções em blockchain, criptomoedas e ativos digitais. O objetivo da Clever é te dar liberdade financeira para operar nesse mercado de cripto. Então, se você acredita nisso, se você acredita nessa liberdade, você já pensa como a Clever, vai conhecer os caras, é clever. estão contratando também pessoal para trabalhar com cripto, com blockchain. Então, se você tem interesse, se você tem conhecimento nessa área, procura a Clever. Se você gosta de criptomoedas, se você opera no mercado, você precisa conhecer a Clever, precisa conhecer as soluções da Clever.
Então, o endereço tá aqui embaixo no vídeo. Para quem não tá no YouTube, é clever. Vai lá, vai conhecer que realmente é um mercado sensacional.
MDão, tá? Tá? Então, tenho aqui, ó, o o qual a estrutura do meu arquivo project. MD.
Vou eu vou ler aqui só os principais, tá, pessoal? Para quem tá nos ouvindo em áudio. Eh, mas isso daqui vai est público depois para vocês no diretório lá do KitHub, para quem quiser acompanhar. Mas basicamente eu tenho um header aqui com a primeira tracinha, traça, né? O nome dessa cerquinha. A cerquinha, jogo da velha.
Jogo da velha. Projeto PPTNC Pokedeck.
Isso daqui é o que liga todos os os nossos arquivos. Aí a vai ver isso daqui e sabe que o arquivo pertence aquele projeto, né?
Então aqui, ó, objetivo. Tá vendo que aqui é duas dois joguinhos da velha, duas tralha.
Isso. Então isso aqui é um título, esse aqui é um subtítulo.
Ah, então significa que aqui quando eu tenho dois subtítulos, ele faz parte dentro desse título principal, certo? Certo? Então aqui, ó, primeiro subtítulo, objetivo: criar uma aplicação web com alto padrão de qualidade e segurança para que usuários possam montar os seus próprios decks de Pokémon. A aplicação é multiuário e persiste os decks individualmente por usuário. Isso é o resumo máximo da aplicação.
Macro, macro, definido em duas linhas. Aqui vem a parte mais importante para que a gente consiga trabalhar com os agentes e com dois agentes, que inclusive vamos trabalhar com Gemini e com Cloud.
Estrutura e engenharia deste contexto. O que é o contexto? contexto é um um bloco de informações que eu vou passar pro LLM.
Então eu eu defino aqui para ele, ó. Um, esse é o documento principal e resumo do projeto. Então ele sabe que sempre que ele precisar procurar alguma informação sobre o projeto, ele pode procurar nesse documento. MD. Então esse é o documento principal e o resumo. A partir daqui ele pode encontrar qualquer outra informação que ele precisa.
Dois, a estrutura de passas é descrita abaixo.
Primeiro, o arquivo project.mmd, que é este documento, specification, que é o diretório das especificações.
Depois eu tenho dentro da pasta especification o architectury. MD, que eu vou definir qual é o setup do desenvolvimento, qual é o meu stack e qual é a arquitetura da minha aplicação.
Dentro do specification, eu vou ter o layout. MD, onde eu vou definir o layout e o user experience em cada um deles também com os markdowns e lá dentro as estruturas parecidas com essa.
Exatamente. A gente vai comentar cada um deles aqui, tá? Aí depois eu vou ter um businessrules.
Que é onde eu vou definir quais são as regras de negócio da minha aplicação.
Isso daqui, gente, é só um material didático. Claro que você numa aplicação maior não colocaria todas as regras de negócio em um arquivo só, porque ficaria exageradamente grande e confuso, né?
Aqui, como a gente tá falando de uma aplicação simples com poucas regras, ele cabe num arquivo só. Então, como eu disse, isso aqui não é um framework, isso daqui é um exemplo de como você consegue trabalhar a engenharia de contexto. Depois eu vou ter um outro arquivo que fala de infraops para instruir o agente de como trabalhar com deploy e produção. Dentro do specification, eu vou ter uma outra pasta files, onde eu vou ter os arquivos auxiliares. Vocês vão entender o porquê.
E depois eu vou ter a pasta planning.
Dentro da pasta planning eu tenho um planning.md, MD, que é onde eu vou definir quais são os marcos importantes do projeto. Essa é a parte mais crítica pra gente trabalhar como ser humano, com os agentes, que a gente vai validar cada step.
Exatamente. Então, eu vou definir aqui quais são os marcos e quais qual é a validação dos entregáveis que eu vou ter para entregar esse projeto.
Mas isso depende do seu nível de Caxias, porque se você deixar ele livre, ele vai tocar o pau.
Sim. Mas aí você não vai ter controle e aí [ __ ] o que aconteceu no caminho.
E aí você pode ter uma propagação de erro. Se o cara erra, por exemplo, se a máquina errou no meu setup de desenvolvimento no meu stack, todo o resto tá desenvolvido em cima de uma base que tá errado. Ó, mas tudo bem. Mas é que aqui tem, a gente até fez junto lá no Antigravity e aí ficou claro, tem um arquiteto por trás, ele entende que os steps são importantes.
Sim, mas eu entendo que isso parte muito de um cara de conhecimento mais avançado.
Sim. de em debug e construção de software, né?
É, veja, aqui a gente tá falando de desenvolvimento profissional do software. Você tem que ter um cara responsável pela arquitetura e engenharia do software e não tem como você desenvolver um software para produção com efeito de negócio, sem ter nenhum tipo de validação.
Não, tudo bem. É que aqui eu acho que é onde separa os adultos das crianças.
Isso, exatamente.
Porque se você pedir pro meu sobrinho lá entrar no cláudio, fazer essa mesma [ __ ] ele ele vai comer isso aí, tá? Não, ele vai lá, vai sair alguma coisa no sinal parecido que você não sabe o que aconteceu.
Sim, sim. Tá bom. Mas é até pra galera entender. Eu acho que aí aí tem um pingo a mais no I. Aí é aqui estamos falando de desenvolvimento profissional.
Tá bom.
dentro da pasta planning, eu falo para ele que eu vou eu vou ter arquivos no mesmo nesse formato sprint N, onde N é o número da sprint com o escopo e as entregas de cada sprint dentro da pasta planning.
Essa [ __ ] vai ser em uma hora, mas nem [ __ ] Vamos ver. Code base, que é onde ficarão os fontes, documentation, que é onde eu vou ter a documentação do projeto. Eu vou ter um arquivo techdbits.
Que é onde eu vou ter os débitos técnicos se houver, e code review, que são os eixos da revisão de código que eventualmente tenha também se houver, que nos steps ele vai gerar.
Exatamente.
Na verdade, a gente pode fazer o code review de duas formas. Eu posso fazer um code review a cada sprint, eu posso fazer um code review no final do projeto.
Mas se os marcos importantes e as validações do planning.md, ela também pode alimentar o code review, pode alimentar. E é por isso que é importante você ter essa documentação, porque tudo que a gente tá tratando aqui, provavelmente não caberia na janela de contexto do saquei, não saquei. Já aí já tinha estourado já meu meu limite no Lovb. Já já. Exatamente. Então aqui, por que que eu peço para ele gerar os arquivos e ir documentando?
Para que a o próprio agente quando ele precisar fazer uma alteração, ele tem onde consultar o que foi feito anteriormente e como ele tem que fazer a alteração. Isso vai ficar evidente aqui no no processo que a gente vai fazer, tá?
Então, eu tenho aqui 10 pontos dentro da estrutura engenharia do contexto, né? O primeiro, eu defini para ele que este é o documento principal que ele vai usar como referência. No dois eu descrevi todos os arquivos que ele vai encontrar.
E aí no do três até o 10 eu dou instruções para ele de como ele tem que trabalhar no meu processo de desenvolvimento software. Então eu vou ler para vocês aqui esses pontos que são os mais importantes, que são os macros, tá? E novamente isso aqui foi coisa que eu fiz ontem à noite tomando uma cerveja. Você você pode fazer com as suas regras, com o seu eh Ah, você que escreveu esse MD, você não fez com Prompt ele?
Não, esse aqui eu escrevi ontem do zero.
Caraca, você é nerdão, mano.
Eu escrevi, peguei uma cerveja e fui escrevendo.
Tá certo?
Então aqui, ó, número três. Para cada arquivo de especificação que ele encontrar na pasta especification, será criado um documento com o mesmo nome adicional, com o prefixo details, detalhes e mesmo extensão MD. É lá onde serão criadas as especificações. Você pode ver que não foi feito por tá cheio de rio de português, tá vendo? Uhum. é lá onde serão onde serão criada a especificação detalhada ao nível de iniciar o desenvolvimento. Cara, isso é importante pelo seguinte, Gu.
Eh, uma foi uma pergunta que fizeram até no episódio com Valdir, que é, cara, beleza, eu vou ter produtividade com a EA se eu especificar muito bem a minha aplicação, mas eu vou perder, se eu vou perder tanto tempo especificando muito bem, não era melhor desenvolver? Eu vou mostrar para você que não por tem uma coisa chamada expansão de contexto. Eu vou dar uma linha para IA e ela vai expandir esse contexto para mim. Ela vai enriquecer com detalhes. Então, por que que essa regra é importante que ele vai criar o details? Eu escrevi cada um desses MDS de forma resumida e aí eu vou utilizar uma IA para expandir isso e detalhar. E outra IA vai olhar o contexto detalhado e vai gerar o código. Não vai sair código direto daqui.
Entendi.
Entendeu? Então vou expandir esse contexto.
É como você desse o caminho do pão ali.
Isso. E aí eu vou revisando. Então eu não preciso fazer um mega documento detalhado, assim como eu não fiz esse que eu tô lendo aqui para vocês, para que a IA consiga gerar um bom código. Eu posso ter evoluções de de especificação utilizando a própria IA para que quando eu tenho um nível muito rico de detalhe, o código saia perfeito, né? E isso não evita que a IA também não expanda caso você seja muito muito pobre na especificação.
Sim, claro que quanto se você for muito pobre você dá margem para ela preencher as lacunas por conta própria, tá? Mas ela toma a decisão assim, ela toma decisão de acordo com a probabilidade de tá mais adequado com o que você pediu, tá? que isso quando você chegar lá no item 10, que eu acho que é o que o que limita também ela, né?
Exatamente. Que você já leu aqui e eu vou continuar lendo para os nossos ouvintes que estão via áudio. Número quatro, importante na Então, só fechando o número três.
Então, o que que eu tô dizendo aqui?
Para cada arquivo que eu criei no especification, ele vai expandir um que é traço detales, dizendo a mesma coisa que eu especifiquei, só que com mais detalhes.
Beleza?
Quatro. Importante na fase de especificação, apenas o detalhamento máximo é é desejável. Não iremos produzir código. Será criado, esse será criado posteriormente. Pera aí que errado. Com base no detalhamento.
Beleza?
Então, primeiro eu vou especificar, vou detalhar só depois vou gerar código.
É o Kiko ainda lambendo isso aí.
A orelha.
Número cinco. Para cada arquivo de sprint na pasta planning.
Haverão dois arquivos adicionais, o sprint N traço tesques, onde ele vai detalhar quais são as as atividades necessárias para realizar aquele sprint. Então, veja, primeiro eu falei para ele, eu quero essas sprints.
Ele vai definir o escopo e o que entregar em cada sprint. Depois ele vai me detalhar quais são as atividades que ele tem que fazer para cumprir aquele sprint. E só aí eu vou mandar pro outro agente gerar código.
Por que que isso é importante? Para eu ter a manutenabilidade desse dessa aplicação e poder pedir, olha, tal sessão, coisa tal, preciso que mude isso. Ele vai consultar essa documentação para saber como foi construído, para ele poder ter assertividade para poder fazer isso.
Aquilo que a gente fez no sprint, agora vai ser a V2.
E aí eu tenho um outro documento que é o sprint ns logs, que ele vai documentar quais são quais ações ele gerou para aquele sprint.
Então são as atividades previstas e o que que ele fez na prática? São coisas diferentes. É igual você desenvolvendo.
Você tem um um card no gira pedindo para você fazer tal coisa, você vai fazer outra coisa e vai definir o que você fez. Então o agente ele vai respeitar isso. Primeiro eu vou definir o que precisa ser feito, o que que eu vou entregar, quais são as atividades que eu tenho que fazer e vou documentar o que eu fiz.
Mas você vai deixar a critério dele dar como done ou não as paradas?
Sim, no sprint sim, mas eu eu vou você vai ver que eu vou pedir para validar cada sprint.
Ah, tá.
E também se der erro para ele fazer o fall e tá.
Isso. No regra número seis. Nenhuma implementação deve exceder ou faltar o escopo do que está definido em cada sprint na pasta planning. Esse aí o arquiteto chato do lado do programa.
Isso, exatamente. Não, não inventa a moda e entrega o que precisa.
Já, já, já fiquei de xereca já.
Sete, cada etapa ou criação de especificação de arquivo novo. Para cada para cada etapa e criação de um arquivo novo, você deve solicitar a revisão antes de continuar para o próximo.
Esse é o chefe centralizador.
Isso. Exatamente.
Os documentos na pasta specification e codebase e os arquivos traços logs das sprints anteriores servem de contexto para a definição das sprints e tesques do code base do sprint atual.
Então você tá na na sprint 5.
Ah, tá. nas anteriores.
Olha o que foi feito nas anteriores para você fazer a sprint atual condizente com todo o resto e nem pilhar código e não fazer merda ou fazer diferente.
Uhum.
Nove. Pergunte antes de tomar decisões de forma autônoma, especialmente se encontrar situações como essa, informações conflitantes entre as definições.
Pronto.
Pode ser que no documento tal eu falei tal coisa e no documento X eu falei coisa uma coisa que é contraditória com outra.
Mandaram o PIO e o PM embora. Já deu briga isso aí. Aqui ele vai falar: "Não, que que eu tenho que fazer?" Porque aqui tá tá dando essa instrução e aqui tá dando essa instrução e elas se anulam, né?
Falta de informação suficiente para realizar a implementação.
Então, pô, preciso implementar tal coisa, mas não tenho a informação correta. Ele tem que parar de gerar o código e perguntar.
e sugestões de melhorias de performance e especificação ou implementação. Então, eventualmente o agente pode falar: "Olha, tá especificado para fazer dessa forma, mas dessa forma pode ser que tenha uma uma performance melhor". Ao invés dele tomar essa decisão sozinho, ele vai nos perguntar se ele se ele deve fazer isso ou não. E 10. Nunca, em hipótese alguma, inicie uma atividade não especificada ou não solicitada. Não delire.
Se for necessário para a realização do trabalho, solicite autorização.
Mano, é essa hora que as máquina vai te pegar, mano.
Pois é.
A hora que os malucos tiver aqui, você vai ver só. Agora aqui é a parte mais importante.
Aqui a gente definiu as regras, o que precisa ser feito, certo?
Certo.
Eh, aqui eu coloquei um temperinho pro pra parte didática ficar mais interessante.
Um tomoro. Isso.
A gente vai utilizar o Gemini e vamos utilizar o Cloud. Então, que que eu defini aqui, ó? Dinâmica dos agentes.
Eles têm que aprender a trabalhar juntos.
Pronto. O RH já querendo fazer dinâmica lá.
Isso. É lá.
Nesse projeto vamos trabalhar com dois LLMs diferentes. Um vai ser o planejador.
Esse agente vai realizar todas as atividades relacionadas à especificação e planejamento do projeto. Realizará todas as atividades do início e todas as atividades até o início da produção de código. Então é o cara que vai definir as sprints, vai criar os detalhes e o cara vai deixar todo o documento pronto pro programador sentar e fazer o código.
Esse é o Cláudio.
Esse é o Gemini.
Gemini.
A gente vai usar o Gemini para isso.
O Gemini.
Isso. A Gemini. Programador que é o Cloud, tá?
Esse a gente vai utilizar todas as atividades que o programador planejador planejou para que o planejador planejou para ele e iniciar de fato a produção do código.
De acordo com as etapas definidas na planning. Todas as instruções e validações devem ser seguidas à risca.
No final do desenvolvimento, a gente volta pro Gemini, que é o agente planejador, e ele vai fazer um code review adversarial.
Que que é isso?
Que ele vai olhar e bater se o código que foi gerado tá de acordo com o que foi especificado, tá?
Para garantir a qualidade do código e a documentação especificadas. Todos os problemas encontrados deverão ser documentados, mas o código não deve ser alterado.
Essa é a regra do jogo. Esse é o nosso project.midd.
Então aí perguntas.
Não vi instrução se ele se deparar com critical error.
Você não vai, você não vai. Isso não tá na especificação, não tá no projeto não fica.
Você vai entender na execução, tá? Mas se ele se deparar com uma parada, ele não tem como travar assim, ele vai gerar o código, você vai executar e se der um erro, você vai informar ele.
Então, mas e se ele se deparar com ovo e a galinha, hum, ele vai tomar uma decisão porque a gente já falou para ele que ele não pode.
Então, aí é o que tá aqui, ó.
Informações conflitantes entre as definições.
Ah, ele vai perguntar antes de tomar.
Vai pergunar. É, então ele vai perguntar aqui.
Não, tudo bem. Ele pergunta se ele se deparar com uma situação difícil. Agora, se der um critical error, alguma coisa.
Isso. Mas aí a gente tá falando de erro de runtime, é bug de sistema, tá?
Ele pode ter gerado um código de acordo com a especificação e que deu um erro.
Faz parte, tá?
A gente não tá cobrindo aqui, pessoal.
Só é legal a sua pergunta, porque nesse exemplo aqui eu não tô cobrindo a parte de qualidade de testes.
É. e o próprio exec dele que pode dar merda. Ah, a execução a gente vai ver que que ela é simples, mas por exemplo, eu deveria ter casos de testes automatizados para cobrir isso. E a é muito boa nisso.
Isso. Então, poderia tá dentro do depois do code review da comunicação.
Eu poderia ter aqui, ó, no specification, eu poderia ter aqui uma um um outro arquivo MD, onde eu coloco a política de teste automatizado de qualidade de software.
Ah, você colocaria no FDVOPs. Eu tava pensando em colocar dentro do planning.
Não, não, eu poderia criar aqui o specification quality. MD, ah, e definir para ele. Você tem que criar tantos por de cobertura de teste.
Ah, não, tudo bem. Mas no planning da sprint que tem o os débitos técnicos e o code review, não poderia ter um teste de e casos de teste?
Eu tenho que dizer para ele antes que ele tem que criar os casos de teste.
Tudo bem. Ah, tá, tá, tá, tá.
Entendeu? E como criar o planning? é para dizer quais são os entregáveis e não o como entregar, tá?
Entendeu?
Eh, de acordo com esse padrão aqui que eu tô seguindo mais ou menos o modelo de de software, de desenvolvimento de software padrão, tá?
Mas como eu disse, não é uma regra, não é um framework, [ __ ] Aí aí que separa eu também, né?
Eu eu era um programador bem mais ou menos.
Então, passando aqui pro primeiro documento. Agora eu vou ser um pouco mais rápido, pessoal, pra gente não ficar lendo MD o episódio inteiro, mas agora eu tenho aqui o architecture.md.
Aqui o que que eu defino? Então eu tenho um resumo dizendo que será uma aplicação web responsiva compostas por dois componentes, um front end e um web service como backend. Ambos serão tratados como os assets separados. Então eu vou desenvolver dois softwares. Na verdade eu tenho uma aplicação que são compostas, são compostas por dois componentes isolados. Eu tenho um front end e eu tenho um web service. É isso. O resumo é isso. Depois eu defino qual é o stack. No front end. Eu já tô definindo para ele que eu quero trabalhar com React, Next JS, Twind e Shad CN. Chatn UI.
O back end. a gente, e aqui é uma provocação, tá pessoal? Esse backend poderia ser muito mais leve. Eh, eu vou trabalhar com Java, com Spring Boot e um banco de dados local que é o SC Lite SK Lite, certo? E aí, que que eu digo aqui para ele, ó? Inclua na inclua na especificação detalhada as versões mínimas requeridas.
Detalhe, além das linguagens, as bibliotecas e os pacotes necessários para atender o escopo do projeto. O code base deve ser parado em pastas diferentes. Eu vou ter o code base de front end e o code base de back end.
Então, eu deixei isso claro para ele.
Run time.
Como que a aplicação vai ser executada?
As aplicações têm que ser containerizadas individualmente. Então, vou rodar dois contêiners. Os dois têm builds diferentes.
Eu vou usar, eu eu sugiro para ele use a imagem do do Linux alpine para reduzir ao máximo o tamanho da imagem Docker no final. Então, em vez de ele usar um Linux pesadão, ele vai usar o Alpine, que é uma imagem pequena, para poder fazer uma aplicação mais leve. Use somente o que for necessário para pleno funcionamento da app. Então não encha de linguiça. Eu preciso das camadas no Docker, as menores possíveis para funcionar a aplicação, também os pacotes mais leves, só pro que é necessário para fazer a aplicação.
Eh, aí depois eu eu dou uma instrução importante para ele também. descreve em detalhes todas as características necessárias para criar o Docker File ou o Docker Compose. Então ele vai detalhar como criar esse Docker file e como criar esse docker compose.
Documente também como deve ser o build e o run dos containers. Então ele vai para o ambiente de runtime, ele vai olhar para todas as camadas que eu tenho que ter do de Docker, quais são as bibliotecas que eu preciso instalar e qual é o script que eu vou ter que fazer para esse Docker file. Perceba que ele não vai fazer o script, ele vai só documentar, porque o agente planejador ele só leva as informações, ele não vai criar nada de código, vai só documentar.
Comunicação. A comunicação entre os assets será através de HTTP REST com autenticação.
Segurança estritamente proibido. Isso aqui é muito importante, gente, porque senão a IA ela tende a ir para um caminho mais fácil, tá? Estritamente proibido usuário, senhas, configurações ou end points hard coded no código fonte. O não pode um horse, mano.
Não pode horse. Então, se o cara tem uma um uma senha, alguma coisa, qualquer uma dessas informações devem ser tratadas por arquivo de ambiente local, o famoso ponto.
Essa é a hora que sobe só os créditos, sabe? daquele meme. E aqui fica o nosso episódio.
Então eu falo para ele, você vai tratar isso no ponto ENV, que deverá ser ignorado pelo Git ignore. Então se ele tem qualquer secret, qualquer senha, ele vai deixar no arquivo ponenv local que quando eu subir pro github que vai ser público, esse arquivo não vai para lá.
Então minhas credenciais são seguras.
Autenticação de usuários. Em caso de autenticação dos usuários, a gente vai ter login senha. Deverá ser feita uma tabela exclusiva no banco de dados, armazenandoos apenas o hash chá 256 da senha do usuário. Aqui eu botei uma pegadinha e eu quero que vocês acompanhem comigo para você saber se isso vai obter uma crítica ou não. O chá 256 não é a melhor autenticação, não é o melhor algoritmo para isso.
Por isso que você falou para ele lá naquele specification para ele usar as melhores práticas e se tiver em consistência perguntar.
Isso. Perguntar. Então eu botei aqui que eu quero ver o que que ele vai dizer. Se ele vai falar, olha, o chá 256 não é o ideal para isso, tá? Autenticação entre serviços. O back end, o front end vai se comunicar via rest, autenticando via JWT. E aí eu indico para ele, use o Spring Security para isso, que é o módulo do Spring Boot.
Detalhe toda e qualquer modelagem de dados que for necessária para autenticação de usuários, gerenciamento dos tokens ou spiricy. Então, se ele tiver que tratar sessão em banco, etc., ele vai ter que detalhar isso.
Observabilidade e tolerância à falha.
Capture e trate os logs de erros no nível warning e error.
Eh, o info também deve ser só logado, tá?
Os logs t que ser em txt simples com pend persistido em disco. Coisa simples.
Aí eu entro aqui em especificações que são de cada componente.
Primeiro, o front end.
Com base nas regras de negócio no restante da documentação, defina e detalhe quais são quais as páginas deverão ser criadas para esse projeto.
Explica a necessidade de cada uma e qual a melhor estratégia de renderização para cada uma delas. SSG, SSR e SR ou SWR, que são a a a forma de renderização que existe no NextJS, se ele vai ser uma página dinâmica gerada no servidor, se ela se ela é pré-compilada ou se ela é interativa junto com pré-compilada e buscando informação no servidor. Então, eu quero que ele entenda o contexto e me diga: "Essa página é estática, essa é dinâmica, essa eu vou fazer assim". Isso ele vai ter que me definir.
O front end não persiste e não acessa qualquer informação que não esteja disponível no backend. Então só o backend passa informações para o front end. Ele não pode buscar informação na internet, não pode buscar outro serviço.
Frontend só se conecta com o meu backend, certo?
Backend deve expor publicamente uma documentação com os métodos da PI via Swagger.
Então eu vou ter, vou expor uma API que vai ser consumida pelo meu front end. Tô deixando isso aqui claro para ele. Eu tenho que ter um swager, beleza?
Deve tratar a questão de cores, então que é o cross origin research security.
Quem se conecta com quem? Isso costuma dar problema quando você trabalha com web service, mas no spring você trabalha, você corrige isso questão de cores muito, muito facilmente.
Aqui eu dei uma complicada para ele para ver se ele consegue resolver que é, ó, a persistência vai ser no escalite, portanto você tem que definir corretamente onde vai tá o arquivo ponto db. O SK, para quem não conhece, pessoal, o SK é um é um banco de dados que é utilizado, por exemplo, em aplicativos Android para manter um controle de dados local estritamente para aquela aplicação. Então, não preciso ter um Oracle para rodar uma aplicação no Android. Então, aqui eu tô criando um arquivo, um SK, só para persistir as informações ali durante o teste. E esse banco de dados fica dentro de um arquivo pdb.
Então eu falo para ele que ele tem que saber exatamente onde colocar esse arquivo ponto db.
Só que aí eu falo para ele, ó, o contêiner é efêmero.
Você que tá aí escutando esse episódio bacana e quer levar toda essa tecnologia, essas novidades pra sua empresa e não sabe como, chama o time da VMBERS. A gente pode ajudar vocês com desenvolvimento de software, com arquitetura de soluções, a entender os problemas que vocês estão vivendo e sair do outro lado com uma solução bem bacana. E se você tá escutando o podcast para aprender coisas novas, faz o seguinte, manda um e-mail pra gente no peoplecare@vemers.
E você pode fazer parte também do nosso grupo de talentos. Valeu.
Agora o time do Relações Públicas vai gostar mais de mim.
Eh, o que que é um contêiner efêmero?
Significa que quando eu desligar, tudo que tá gravado no disco perde e volta ao estado original. Então, nada é persistido.
Isso significa efêmero. Então, falo para ele, se o contêiner é efêmero, o arquivo ele tem que tá no volume persistente.
Quando você trabalha com cubernetes, Gustavo, você consegue, todo contêiner ele é efêmero, ele sobe, sempre que você liga um contêiner, ele liga no seu estado inicial. E tudo que você grava lá, quando você desliga, é perdido. O Cubernet te dá um recurso que é o volume persistente. Em alguma daquelas pastas você consegue mapear um disco persistente que o que que você gravar naquela pasta ele mantém. E aí quando você liga, o arquivo continua lá.
Então eu falo para ele, como o contêiner é efêmero, logo o arquivo do volume tem que estar no volume persistente.
Considere isso quando for especificar o Docker file, porque eu preciso definir no Docker File onde vai estar o meu arquivo de arqu de de dados e qual pasta tem que ser um um volume persistente.
Eh, beleza? Aí eu falo aqui, o back end atende todas as necessidades do front end, ou seja, ele é um back end for front end, que é o que a gente é um padrão que a gente chama de BFF.
Pensei que ele era best friend.
É, é, é quase isso. Best friend forever.
Isso.
Então, seja fornecendo os dados que ele mesmo persiste, ou seja, fornecendo dados de proxy de uma P externa. Por que que eu tô falando isso? Porque a gente vai pegar os dados do Pokémon na outra PI. Se o front end só fala com o back end, o back end que vai ter que acessar os dados da PI externa do Pokémon e não o front end. Percebe?
Então, mas aí o nosso back end vai dar uma outra uma outra assinatura pro front consumir.
Exatamente.
Porque aí ele vai modelar o API design exatamente para o que o backend precisa.
Mas isso não perde performance não. Porque quando você roda um front end JavaScript, por exemplo, a a boa parte do que roda roda na sua máquina, no client. Então, se você precisa pegar, por exemplo, eh, nome do Pokémon, as habilidades, eh, cor, etc., eventualmente você precisa fazer mais de uma chamada na PI.
E aí você vai ter o client fazendo várias chamadas fora e você vai ter um delay visível na tela do usuário. Quando você tem um BFF, você pode ter um método só, uma chamada única, que o front end pede todas as informações. E o back end, que é mais ágil, ele faz uma coisa chamada composição. Ele roda, ele faz todas as chamadas que ele precisa fora.
pode utilizar dados que ele mesmo já persistiu, por exemplo, qual Pokémon tá no seu deck e dar informação pronta pra frontend. É isso que faz um BFF. Mas sempre a primeira vez vai demorar um pouquinho mais.
Sim e não, porque uma chamada rodando num back end, por exemplo, ela é muito mais rápida que uma chamada no browser.
E se você deixa isso no front end, pode ser que você vai ter que fazer um X HTTP request ou alguma chamada direto do browser, que é mais lenta do que você fazer essa chamada numa tecnologia que roda em backend, por exemplo, como Java.
E não tem risco dele ficar se perdendo entre os sharodes e os e os tipos de campo lá.
Tem, é por isso que a gente tem que revisar, tá?
Então aqui, ó, o backend, [ __ ] pergunta vai.
Tá, tá, tá bem, tá bem, tá bem. Chupa, chupa, mano. Chupa.
Então, estamos acabando, pessoal, a parte da arquitetura. Depois as outras vou passar mais rápido, tá? O backend será proxy da PI P KI, que é aquilo que eu falei. E aqui o puro do gato Gu, a documentação está disponível e eu ponho o link aqui da documentação. Percebe que nenhum momento eu tô falando para ele acessa aqui para pegar o Pokémon, acessa ali para pegar foto. Eu não estou dizendo isso. Tô falando a documentação está aqui.
Uhum.
Essa PI não requer autenticação.
Algumas requisições do front end, aquilo que a gente tava falando, ó, algumas requisições do front end podem exigir mais de uma chamada as APIs externas e ou composição de dados com SK. Então, pode ser que eu tenha aqui pegar dado daqui, dado dali e mandar pro front end.
Use o padrão de facade para esses casos e elimine a complexidade do fonte end.
Facend é, eu crio uma fachada, você não sabe o que tá rodando atrás, posso estar fazendo 500 chamadas, vou te dar um resultado único, você não sabe. Então o front end ele não precisa lidar com essa complexidade.
com base nessas informaçõ aqui. Esse é o ponto que eu acho maravilhoso, gente, com base nessas informações e nas regras de negócio da aplicação, além da documentação da POK API, documente a API design que será exposta por esse backend.
Cada método precisa ser muito bem documentado, com assinatura coerente, objetivo claro, tratando todas as boas práticas de arquitetura, como desacoplamento, atomicidade, consistência, isolamento e indepotência.
Então, tô falando para ele, você sabe o que eu preciso fazer, sabe quais são as regras de negócio, você sabe qual é a documentação da PI lá da POK API, você vai me dizer quais são os métodos da minha PI pro backend. Eu não estou definindo. Aqui você vai autenticar.
Aqui você vai ter o end point para pegar o Pokémon. Ele vai definir isso e ele vai tirar do cu a a nomenclatura de acordo com as boas práticas.
Então, mas aí é vamos ver acontecer na prática.
Vamos.
Qualquer persistência de arquivo, mas ele vai fazer tipo um get Pokémon.
Sim, é o que se espera, tá? Mas o get Pokémon pode ser que, por exemplo, o get traga só as características. Será que eu tenho um outro get para imagem? Então ele vai ter que ter um get Pokémon que ele passe tudo de uma vez pro front end pedir a informação, depois pedir a imagem, tá?
Entendeu?
Detalhamento. Crie um arquivo architectury details.md com todos os pontos descritos aqui no nível de profundidade adequado para iniciar o desenvolvimento, incluindo as queres, os métodos, API design e toda a informação necessária para o início do código. Qualquer dúvida, conflito ou risco deve ser apontado nesse documento.
Mais um documento que ninguém vai ler.
Aí vai.
Então eu li aqui o o mais importante que é o de arquitetura, pessoal, mas eu tenho aqui também business roles. Aqui eu coloco o fluxo comum, que aí é o que a gente chama de histórias dos usuários, né?
A única tela acessível sem login, dashboard para ver, detalhe, usuário pode ler as características, como vai ser o catálogo, como vai ser o primeiro acesso, usuário master, o que faz o usuário master. Daí no final eu coloco aqui, ó, detalhamento. Cria um arquivo Business Rules Details com todos os pontos descritos no nível de profundidade adequado para iniciar o desenvolvimento.
Caraca, é muito documento, velho.
Sim, isso, cara, isso aqui eu perdi uns 40 minutos escrevendo. E aí depois eu tenho aqui não, mas ele vai girar para [ __ ] E a Ia vai sair e vai falar: "Irmão, chega, mano." Ó, esse que é importante citar, ó, Infrodevops.
É, eu falo pra ele, o resumo, são aplicações dois contêiners, vai rodar no Google Cloud. O repositório é Git e do OURR do Git.
É, vamos fazer um versionamento semântico.
Release. Aqui eu coloquei featur, mas é version, né? Release version e build. A versão inicial vai ser o 0.1.0.
Cada sprint completada significa o incremento no build number. Então, quando eu fizer o build da primeira sprint, eu vou ter o 0.1.0, depois eu vou ter o 0.1.1.1.2, entendeu? Aí eu falo para ele aqui, ó, infed run time, cloud run sem autenticação. O próprio web service vai tratar a autenticação por JWT, que eu já especifiquei lá na arquitetura. Vou usar a zona West East One e o projeto PPN PPTNC Stage, que é o meu projeto lá no Google Cloud.
segurança. Todas as chamadas de API de GCP vão usar o ADC, que é o application default Credentials, ou seja, é autenticação que já tá setada na minha máquina.
Isso significa que ele vai ter acesso já aos recursos do GCP. E aí eu falo para ele, em produção, uma conta de serviço vai ser atribuída pra execução daquela aplicação e aí eu consigo definir quais são os acessos daquela conta de serviço.
Mas você já deixou isso pr pr pr prépronto? Não, aí eu vou ter que quando ele fazer o deploy, eu vou criar essa conta de serviço e eu vou manualmente colocar isso lá.
Ah, tá.
Entendeu? Mas se você se você já tiver tivesse deixado pronto e colocado o nome, eu poderia colocar o arquivo aqui com a credencial da da conta de serviço. É, exatamente. E ele já subiria automaticamente.
E aí ele começa a ter autonomia de de buildar em produção, buildar e fazer o o update automaticamente.
E você poderia colocar como uma indicação para ele que se ele, se no build ele ver algum problema, ele abenda e te pergunta. Isso, exatamente.
Mas se tudo for dando certo, ele vai buildando. E e aí o que eu eu Mas se e se a gente fizer uma interface?
Hum. E aí dá dá pro po ficar escrevendo as histórias e apertar um botão, porque se vai seguir tudo isso daí, você pode fazer isso e pedir pro PO, por exemplo. Eh, e aí é onde entra, [ __ ] vamos montar um produto desse, mano.
Aqui é onde entra a forma de desenvolver software diferente. Por exemplo, eu posso ter um architectury. MD, que ficou um arquivo aqui com vai 53. Bom, isso é um template que eu posso usar em outros lugares.
Depende do caso. Aqui eu tirei do cu ali um por Ah, mas contrtrol c conttrol V aí 90% ainda dá para reutilizar.
Não, depende. Para essa aplicação sim, mas pode ser que para outras não. Então arquiteto, ele pode cuidar do arquitecturmd, definir quais são as boas práticas. Você pode pedir pro PO definir os business rules.
Esse cara vai definir aqui. O cara de infra pode fazer aqui a parte de DevOps e o cara de arte pode fazer aqui o layout. MD e você e você tem um time que vai conciliar e vai gerar esse código junto.
Ah, então, mas aí se eu coloco todas as diretrizes e eu quero deixar só o P dando avanço, já que o negócio tá por sprint, aí você vai aqui no business rules, faz o car.
E aí eu posso fazer o business? Não, então posso fazer até uma interface que preenche o business. Mas você não precisa fazer inter, dar um bloco de notas pro cara, deixa ele ser feliz.
Aqui ainda no no infradevops aí eu falo da segurança, falo aqui, ó. Essa parte é interessante para quem para quem trabalha com infra ou devols. Eu falo para ele que o processo de build e dos conttainers vai ser no cloud build, que é um componente do GCP. Então eu falo para ele que ele tem que especificar como vai ser o meu emo, que é o cloudbild.
pro Google a fazer o build na minha aplicação. Então ele também vai fazer isso e e principalmente as a criação das variáveis de ambiente que são os arquivos ponenv local. Então aquilo que eram as minhas senhas que não vão ficar no GitHub estão locais, ele precisa colocar no Yamel para ele subir na hora do build para ficar como variável de ambiente do meu contêiner e protegida.
E protegida.
Claro, para fins didáticos, pessoal, o ideal aqui era a gente ter um cofre de senhas, etc, etc, etc., né? Então, a gente vai utilizar a variável de ambiente por ser uma questão não crítica, mas o correto é você usar um um um cofre de senhas ou algumas é você de cybersegurança.
Isso. Não, não venha me xingar nos comentá bom. É, por favor.
Então, eu falo aqui para ele criar os documentos, etc. E aqui o layout. Essa parte le vou passar rápido, mas porque não me importa.
Não, não, mas eu quero mostrar só. Ó, cara, o que que eu fiz? Eu dei as referências, eu dei o logotipo do podcast para canva.com.
Faço o layout.
Brincadeira, eu adoro vocês, meus amigos. Lot.
Ah, aqui não tem muita importância porque a gente vai referenciar a p do canva.
Aí aqui, ó, eu defino quais são as telas. Mas o que que eu tive o cuidado de fazer? Porque eu não quero um resultado imprevisível.
Deixa eu ver se abre aqui, ó. Ó, eu criei um a frame.
Ah, legal.
Para cada para cada tela que eu que eu queria. Então, eu fiz aqui um afframe do login. Eu fiz um afframe de como tem que ser aqui o meu catálogo, o menular.
Você não, meu filho, né? O Davi fez.
Aí eu fiz aqui, ó, como tem que ser o dos detalhes.
[ __ ] Charmilion é muito top.
E fiz aqui a parte de como transferir um Pokémon pro outro.
E você fez via cloud?
Eu fiz, é, não, eu fiz no, como o nome?
No C.
Não, cara, é o que eu fazia documento de arquitetura, né? Não lembro. Enfim.
Tá, eu fiz aqui.
Ah, mas você fez arrastando mesmo. Você você não deu uma roubada?
Arrastando não. Eu queria mostrar o o Ah, para fazer essa merda, mano.
Exato, cara.
[ __ ] Aí, eu mostrei.
Deixa eu ver como você fez o sanguinho ali, só para agora. Agora meu meus deles ali base states HP ataque defesa, SP ataque.
É isso aqui eu peguei lá da API, né, que é o que tem na API.
Ah, o tipo e tal.
Se ele é fire offline, isso.
A evolução.
Isso aí. Aqui ele tem uma evolução.
Cospe fogo tão quente que derrete rochas. Ô, sabe o que eu ia te pedir?
Como a API toda vai resultar em inglês, Uhum. Só pede para ele traduzir.
Cara, eu coloquei isso aqui, ó, porque layout, ó. Ó, importante, toda interface deve conter somente elementos em texto PTBR.
Não, tudo bem. Mas os elementos e e o resultado do texto e vai ser PTBR, eu acho.
Certeza?
Não sei. Vamos ver.
Não, mas refere-se ali, ó. Toda interface deve conter toda a interface e resultado da PI. Põe aí, [ __ ] Não sabe nem escrever MD, mano. Vai resultados é da API.
Deve conter somente elementos de texto em português BR, mesmo que você tenha que traduzir.
Não, mas aí tá implícito.
Será?
Vamos ver.
Não sei, mano.
Vamos testar esses dias. O Então, aí aqui, ó, eu fiz, eu disse como é cada tela, coloquei a referência de cada wireframe. Alguns eu não tive paciência e falei: "Ó, não vou fazer o frame dessa tela, se vira".
E aqui o detalhamento.
Isso aqui é uma coisa interessante que não funcionou no cloud.
Eh, mas provavelmente se você utilizar o Gemini, algum outro que é multimodal deve funcionar, porque eu pedi para ele antes dele começar a fazer o código, ele gerar uma prévia pon de como seria.
Hum.
Mas isso aqui não funcionou.
E ali use sempre possível imagens com boa resolução. A pok a Pok deck lá, ela ela tem as fotos dos Pokémons lá, fotos, tá?
Tem as fotos. E é isso. Por último, eu tenho aqui a planning. E essa parte é importante por eu defino para ele o que que eu quero de entregável em cada em cada sprint.
E ele vai definir o tem que ser feito para entregar o que eu preciso. Eu não vou entrar aqui no detalhe, mas ó, eh, o primeiro ponto é a cada plan, a cada a cada sprint, eu quero que ele faça um commit, um tag e um push no git. Então, fez o código, entrega no gitalo para ele o que que eu espero de cada sprint. Mas tudo isso vai ficar te pedindo na linha de comando, você vai ter que dar S ou N para tudo.
Então aí tem duas formas de fazer isso que eu já vou mostrar, tá?
Eh, então o sprint número um é o setup inicial. Eu quero que ele faça os arquivos de configuração, instalação dos frameworks, criação dos docker files e o setup do CICD. Qual é o entregável? Eu quero code bases inicial, o repositório configurado e o ambiente pronto para desenvolvimento. Essa é o primeiro sprint. Segundo sprint.
mock do web service. Então eu quero o web service com toda a documentação do Sweger entregue com os métodos e mocados. Então eu quero saber quais são os métodos, qual é o API design que você fez. Não precisa ter lógica ainda, mas eu quero ter o Swaggerá, vai ter um get Pokémon, vai ter um get atributos. Eu quero entender o que que ele fez. Por que que isso é importante, pessoal? A veja, eu fiz um primeiro sprint para saber se ele configurou do jeito que eu queria. Validei. Beleza. Agora eu vou saber se ele tá fazendo o web service do jeito que eu espero ou se ele tá cometendo algum erro ali. Porque se eu continuar desenvolvendo a partir dali, eu vou est desenvolvendo uma API mal designeada, digamos assim, mal desenhada, mal escrita, é mal planejada. Então eu quero saber qual foi o que que o que que ele fez para aquela PI, né? Qual o plano para para aquele para aqueles métodos, para aquelas informações.
No terceiro, eu quero um mock do front end. Então front end não precisa est funcionando, mas eu quero saber como vão ser as telas. Se ele vai me entregar na terceira splint.
Sprint 4, autenticação e gestão. Eu quero quero que todas aquelas telas que ele me mostrou no MOC sejam protegidas por login. Então eu quero que o mecanismo de autenticação seja esteja pronto e que eu possa testar e que o app seja possível entrar como admin e eu possa criar usuários e excluir usuários.
Isso é o que eu espero pra quarto sprint. No quinto sprint sprint eu quero dashboard. Então eu consigo ver quais são os meus decks, o que que ele vai me entregar, a visualização dos decks, mesmo que ainda estejam vazio, e a funcionalidade de criar e remover deck.
Agora na seis ali eu vou fazer um pedido.
Seis, catálogo, seleção e adição de Pokémons ao catálogo. Quais são os entregáveis? Navegação no catálogo, visualização dos Pokémons, podendo adicioná-los ao deck. Visualização do deck com os Pokémons adicionados. Qual o seu pedido? Meu pedido é que tenha um sorteio para eu ganhar um Pokémon além do meu deck, que aí nós vamos um pouquinho mais.
Eh, eu quero que além de eu poder adicionar o meu catálogo, eu quero poder ser sorteado igual a sensação de abrir um pacotinho de card, entendeu?
Porque aí eu entendo que eu tô, tudo bem que a gente não vai validar se você tem ou não aquele Pokémon no deck. Ele vai acreditar na gente.
Não dá para validar para saber.
É, é. Mas vamos fazer o seguinte, eu gostei da ideia. Vamos fazer o que tá aqui e depois a gente faz um sprint programador adicional.
Tá bom. Tá bom.
Não, porque aí, ó, é importante, gente, [ __ ] 10 anos que a gente se conhece.
Igualzinho, mano. Igualzinho.
Não, mas olha só, por que que isso é importante? na frente de todo mundo na reunião ainda, porque, ó, eu vou ter que eu vou ter que colocar aqui na sprint, mas eu tenho que definir qual é a regra de negócio do sorteio. Vou ter que escrever isso.
Ah, entendi.
Entendeu?
Tá bom. Tá bom. Que que seria?
Como que é essa regra?
Então, seria muito louco, porque nós vamos criar um sisteminha que fica sorteando o Pokémon.
Exatamente. Então, a gente vamos fazer o que tá aqui.
Nem que eu acho que a API é finita, né?
Ela não é Como assim?
Ela não tem os Pokémon mais recente? Não sei, não sei. Eu não sou da geração Pokémon, tá pessoal? Sou da geração. Tá louco.
Eu sou cavaleiros zodíacos, velho.
Maluco, mano. Pokémon é tem 30 anos essa [ __ ] mano.
Não sei. Eu não sou não.
Imagina. Ah, [ __ ] Cavaleiros. Então vamos fazer aí. Qual era do dragão pontapp? [ __ ] Não tinha p cavaleiro zodiaco.
Beleza. Aí eu tenho aqui o catálogo, que é o que você falou. E a gente vai implementar então a função do do sorteio.
E aí eu tenho aqui a tela de detalhes que eu vou dizer como funciona o mecanismo de de gitar para outro para outro usuário.
Ah, gift presente.
Isso. Eu tenho um Pokémon no meu deck.
Vou mandar para você. Então veja aqui, olha como as coisas t engenharia eh condizente. Eu tô dizendo que o meu meu oitavo sprint é o mecanismo de gift. Mas qual o mecanismo de gift? Ele tá especificado aqui no meu business rules.
Cadê?
Aqui, ó.
Tá nada.
Tem que tá.
Primeiro acesso. Usuário master. Não tá não, garoto. Pode colocar ali. Sim.
Aqui, ó, detalhes. Ao escolher enviar para o amigo, ele deve escolher para qual amigo do sistema deve receber.
Ah, mas tá aqui. Vamos ver.
Quase, quase que a máquina escreve.
Óbvio, né, meu?
É, jura, jura. Imagina. Eu vou mandar.
Ah, tem outro pedido que eu quero além do sorteio, fazer blend de Pokémon.
Boa.
Polimento e ajustes gerais. É o último sprint.
Isso é funilaria e pintura total. É tipo assim, porque tem que ter uma sprint final, porque aí a pode falar, pô, faltou isso, faltou aquilo, então ela bota aqui e resolve o que tem que resolver.
Então, e esse daí vai provar se você é um arquiteto bom, se vai funcionar direito, não. Se ela colocar pouca coisa, é que a gente teve um nível de previsibilidade absurda.
Boa, boa.
Entendeu?
Boa.
Vamos ver no final se você é o cara mesmo.
Aí, ó, o que que eu deixo aqui no detalhamento? planejador. Crie os arquivos de planejamento de cada splint, conforme definido no documento anterior.
Faça isso de forma interativa com o humano, nós, no caso, declarando sua visão sobre cada sprint, aguardando a confirmação antes da criação do arquivo.
Essa é a última especificação antes do desenvolvedor. Então, seu detalhamento precisa ser minucioso no nível de desenvolvimento para que não haja interpretação vaga das tesques. e a implementação e a implementação a ser realizada.
Todo o contexto refinado aqui é importante. E aí aqui eu dou uma instrução paraa outra IA que é o programador. Siga o desenvolvimento passo a passo com humano. No final de cada sprint você deve instruí-lo como validar por conta próprios entregáveis de cada sprint. Então o que eu tô falando para ele?
Codô fez. Me diz como eu tenho que testar. O que que você fez? Ele vai falar: "Ah, vai em tal lugar.
Na minha máquina funciona isso".
Então, o que eu fiz aqui foi um trabalho de arquitetura.
Fiz as escolhas de stack, as escolhas de de runtime, de deploy. E é como se eu tivesse especificando esse software para dar para uma equipe de desenvolvimento, entendeu?
Tem só um pedaço do código que lá eu acho que o Springbook tava boot tava escrito errado.
Aonde?
É no code specification lá no primeirão.
Primeirão. O project não. Arquitetura.
Architecture.
Sobe lá, ó. Sprint.
Sprint boot.
Aí ainda bem que a IA é mais inteligente do que o cara que escreveu. Isso aqui é isso aqui é prova de que foi feito na unha mesmo.
Aí e agora você tomou um chupa porque eu prestou atenção nos bagulhos. Realmente tava prestando atenção.
Então chupa. Eu esperei o momento certo para para falar.
Vamos lá ver o que acontece aqui, ó.
Então agora vamos lá. Como é que do do da tela de comando você vai chamar o Cloud ouNi, que são aplicações web?
Não são aplicações web. É que eu tô usando eles no modo cli.
Que que é modo cli?
Roda no terminal.
Não, mas se eu fosse o o usuário [ __ ] do Windows, eu ia estar usando o EXZ do Gemini.
Você consegue instalar ele no CMD do Windows.
Ah, isso que eu não tava entrando na minha cabeça. Como é que você vai, cara? Eh, a aplicação web para desenvolvimento de software ou para uso massivo de inteligência artificial não é web, eh, via ou é via PI, que aí é quando a gente tá desenvolvendo aplicações que usam inteligência artificial ou para uso massivo, como a gente vai tratar aqui, via cliente.
Por isso que o lovable nem passa na sua mente, cara. O lovable. Eu vou me abster falar que você vai ver que o lovable é só para fazer a reframe.
É, quem foi que falou para mim Lab para prototipa tela?
Mas é é isso mesmo, cara. É isso.
[ __ ] eu tô entregando o sistema inteiro com isso.
Bom, vamos lá, ó. Então, aqui eu tenho um terminal.
Ah, agora onde eu vou executar a aplicação. Eu tenho um que eu vou rodar o Gemini, eu tenho um que eu vou rodar o Cloud. Eu tô aqui na pasta, vou dar um LS aqui, vocês vão ver. Então eu tenho aqui code base specification plan. Aí eu vou chamar o Gemini.
O Gemini é o planejador.
É o planejador. O Cloud ele ele ele lidar muito melhor com código, mas o Geminar ele lida muito bem com o planejamento.
Então pera aí, ó. Sign.
Eu como já li toda a especificação, você vai ler e vai comentar o que você tá vendo do retorno da Ya. Tá bom.
Então, mas pera aí, como é que ele sabe que você é você? Eu tô logado com o meu usuário na minha máquina.
Ah, entendi. Então o ponto clicção lá.
Já já tá autenticado. É uma ferramenta da minha máquina, entendeu?
Entendi. Entendi. Já tá pré config.
Exatamente. Então, primeira coisa que ele pergunta, como é a primeira vez que eu tô utilizando o Gemini nessa pasta, é se eu confio nessa pasta.
Por quê? Eu, tá vendo? Nem a sua máquina acredita em você, mano.
Pois é, porque Linux é assim, né? É Zero Trust. Só se você acreditar. Pode ser que eu baixei essa pasta com arquivos que eu não sei quem escreveu. E se tem um trujan aqui, entendeu?
Então, trust folder.
Então, vou, vou dizer aqui o apparent trust folder. Parent é seria a minha pasta principal.
Eu vou dizer confia nessa pasta que onde estão meus arquivos. Beleza?
Ele vai reiniciar.
Rodou. Então, eu tô aqui no terminal agora para quem tá ouvindo a gente eh só no áudio. Eu tô no terminal do Gemini Cliado com a minha conta do Google e estou dentro da pasta onde estão os arquivos MD que nós comentamos lá.
Aqui o ponto que eu acho que é a grande diferença do que a gente chama de vibe coding, que é onde você vai ficar, ah, agora põe coluna tal, agora faz tal coisa da do desenvolvimento profissional que é o spec driven. Tudo aquilo que eu fiz substitui qualquer prompt. Eu já defini exatamente o que eu que eu queria. Eu já fiz a especificação. Então aqui o que que eu vou dizer pro pro Gemini? Eu vou dizer somente isso, vocês vão ver. E aí eu quero que você diga o retorno que você tá vendo da da IA.
Vai.
Leia o arquivo projectmd.
Thinking três pontinhos.
Review the project details entendi as diretrizes principais. A sua estrutura é rigorosa. Processo de detalamento. Já entendi os papéis. Atuia aqui, ó.
Ah, tá. Li o arquivo project.mmd.
Compreendi que o projeto PPT não compila Pokdeck tem como objetivo criar uma aplicação web multiusuário para montagem de decks com persistência individual. as diretrizes, estrutura rigorosa, processo de tetelamento. Ele já entendeu que o papel dele é atuar como planejador.
A validação, ele deve solicitar a revisão a cada etapa e a autonomia limitada. Não iniciarei atividades não especificadas e perguntarei caso de conflitos ou falta de informação. Deseja que eu comece lendo as as especificações existentes na pasta especification? já até sacou já porque eu deixei isso claro Ah, é verdade, é verdade. Para então prosseguirmos com o detalhamento.
Então, então eu já falei, ó, aqui estão os documentos que você tem que entender para você fazer o detalhamento com o traçodiles. MD.
Ah, ele já vai começar a queimar no no disco lá o que ele tá. Ele já entendeu que ele é o planejador, porque eu deixei claro.
Na verdade, eu falei, vai ter um planejador e vai ter um programador. O programador vai trabalhar com base nos arquivos detales. Ele viu que não tinha detalhes. Falou: "Ah, então eu devo ser o planejador." Ah, não, mas teve um lugar ali que você escreveu que ele ia ser.
Não, eu falo que são dois agentes. Um é Eu não falei quem ia ser o quê?
Então, pergunta para ele só por desencargo.
Quem é o programador? Ele não vai saber, cara. E ele não precisa saber.
Tá bom.
Entendeu?
Desculpa, gente, que eu eu acho muito da hora isso, mano.
Você é louco.
Então, beleza. Então, ele sabe que ele vai trabalhar com specification planing codebase, agora ele vai ler os arquivos que a gente especificou, arquitetura, layout, etc. E como eu pedi para ele confirmar a cada interação, ele tá me pedindo para ler esses arquivos, tá vendo?
Ah, desejo que eu comece lendo? Sim.
Eu vou que que eu vou escrever?
Continue.
Let the magic begins.
Tá, pera aí. Vou ler os arquivos.
Lê direito para quem tá ouvindo sua gente, mano.
Pera aí. Vou ler os arquivos da especificação da pasta barra specification para entender os requisitos e preparar o detalhamento técnico. Aí ele leu architury.m, business.m, infradevops.md, layout.md.
Com base na leitura dos arquivos de especificação, tem uma visão clara do projeto PPT Pokdeck. Vou iniciar o detalhamento técnico conforme solicitado, seguindo a regra número sete. A sete era: "Farei um arquivo por vez solicitando sua revisão." Obstarfã. Ah, ele já começou até fazer a regra de baixo que você colocou. Notei um erro de digitação no arquivo architectury. MD. O correto seria architecture.
Já tomei uma comida de rabo do da É. Para manter a consistência com a estrutura atual, continuarei usando noforme conforme definida. Ah, que [ __ ] Ele ainda vai te acreditando ou prefere que eu corrija?
Sim, eu quero que corrija. Então, mas aí como tá, vou deixar você fazer. Minha proposta na ordem de detalhamento é arquitetura e details. Definir na base técnica as versões, as bibliotecas, a modelagem e o API design. Depois a business holes, detalar os fluxos, os fluxos, os estados e as regras de negócio. Depois o layout details, especificar os componentes, as cores e os comportamentos da user interface.
Infradevops details, é o quatro. Scripts de build, deploy e configuração da cloud. Plano pra arquitetura e pro architure details, que ele manteve o nome errado.
Definição da versão, já falamos que é o Java, né? Com next. 14, meter um etc ali.
Mas olha só, eu falei Java e Next. Ele já definiu Java 21, que é o último, que é o último, tá? E o 14 mais da Next também é o último também.
E por que ele bota um etc ali? É [ __ ] então porque aí ele vai gerar o arquivo e eu vou revisar.
Ah, tá. Modelagem de banco de dados, o user deck Pokémon e gift design de API e end points endpints com payloads e request response estratégia de proxy para pokalhes do docker files. Ele vai usar o alpin stage build. Posso e prosseguir com a criação?
Sim, vamos manter o nome errado.
[ __ ] Tá bom. É, não vamos perder tempo.
Percebe que eu não preciso ficar pedindo coisa coisa. Eu já O que eu faria de prompt já tá tudo especificado no MD?
Sim.
Então ele vai mexer no Ixe, agora fodeu. Pera aí.
Ah, aqui ele tá pedindo para permissão para escrever um arquivo.
Ah, tá bom. né? Então, permitir nessa sessão, ó lá, ele já criou o details.
Que que eu vou fazer aqui, ó, para vocês verem a diferença e do que que a gente tá tratando, gente.
Esse aqui é o meu architecture.
que eu falei, qu stack, runime, a comunicação, segurança, observarabilidade, tudo de uma maneira rasa, simples, porém completa de um documento de arquitetura. O que ele me gerou é isso aqui, ó, o architectury pon architecturydiles.
É o sufixo, ele vai colocar tudo tracinho details, né? Isto detalhs.
Então, ó lá, ele expandiu. Isso que eu falo que é expansão de contexto. Eu falei, eu quero Java e Next. Ele já detalhou, ó, 1.1 front end. É o Next JS 14.2, o maior utilizando PP appunter.
Linguagem Typescript 5, tem oxs 3.4, o chat CNUI baseado em redix, gerenciamento de estado de dados, tanks query que eu não conheço porque eu não sou desenvolvedor front end. Os ícones ele já definiu como lucid react e a validação ele já criou aqui, ó, o Zodio React Hook Form, back end Java 21 LTS, Spring Boot 3.2X Spring Security 6.2 2 com JWT, Spring Data JPA, SK 3, Spring Dot, SpringDC com Open API com Swagen API 2.3.2 e o Maven 3.9 ou superior. Modelagem de dados, ele já modelou as tabelas que precisam pro sistema.
Mas como que ele modelou se a gente ainda não já dei as regras de negócio?
Ah, apesar da gente tá falando da arquitetura, ele dentro da arquitetura ele também foi ele ele já leu. Por isso que eu tenho que criar aquele project MD que eu falo aqui tá tal coisa, tal. Ele tem acesso a todos os arquivos.
Então ele já chegou lá na fase que a gente tá citando qual é a POK API. Ele entrou lá dentro, fez a saquei. Saquei.
Então ele já modelou para mim aqui as tabelas. Eu sei que eu vou ter uma tabela users, vou ter uma tabela decks, vou ter uma tabela de Pokémons e uma tabela de gifts. Então ele já me definiu aqui quais são as quatro tabelas, quais são os tipos e quais são os campos dessas tabelas. Então eu consigo aqui validar, beleza? Veja, não estamos falando de código ainda, tô falando de o que vai ser gerado pro código, né?
Uhum.
API Design. Olha só que [ __ ] Ele sabe que a minha API, a base padrão vai ser a PV V1. Eu vou ter um método de autenticação. Aí eu vou ter o método get users, post users, delete users para ter um crude dos usuários.
Os decks, eu vou ter um get, um post, um delete e um get com os Pokémons para eu saber. Paginado quatro por vez. Já definiu inclusive essa regra.
Aí eu vou ter aqui o um Get Pokémons, que é um proxy da Poki, com as regras de negócio, que é a composição que a gente falou. Então eu já sei que eu vou ter um aqui, ó, o get Pokémon que você falou, tá vendo? Eu vou ter o get Pokémons que lista quais são os Pokémons que eu devo ter. E isso ele já leu na documentação que eu dei.
Hum.
Eu só dei o RL. Então ele sabe, ó lá, lista Pokémons proxis do Pokipi deve permitir busca por nome. Ele já leu isso lá. Eu tenho o get Pokémons pelo ID e eu tenho o deck deck ID Pokémon. Adiciono Pokémon ao deck. Isso é um post. E aqui eu tenho os o a parte de gift que é o get post, o pet. Caso eu consiga ter sucesso em transmitir um Pokémon para você ou não. Estratégia de Pokémon. Ah, estratégia de Pokémon. Estratégia de renderização que eu falei. O que que vai ser essas telas? Ó lá. O login é um client server rendering CSR. Então ele já definiu a estratégia. O dashboard vai ser um server side rendering, porque ele vai ter a carga inicial dos decks mais um SWR, que ele vai rodar query com a navegação dos Pokémons do deck. Então, se eu sou um arquiteto, se eu sou um desenvolvedor eh front end, eu tenho condições de falar: "Não, tá certo, é isso mesmo. No catálogo, eu vou ter um static site generation, que é um SSG, com incrementar static generation, que ele vai, eu vou ter, eu tenho uma página que é estática, que tem uma parte que não muda e tem uma parte incremental que ele carrega do servidor. Faz sentido para isso? Eu consigo avaliar e falar: "Beleza, faz sentido". Então, veja, eu não pedi para ele criar a página.
Primeiro eu falei: "Como é que você faria essa página?" Documenta, eu avalio como técnico e eu consigo ter noção do que vai ser gerado depois como código, né? E o detalhes que vai ser SSR, que é para garantir SEO, nem pedir SEO, mas ele, enfim, já definiu.
É, mas é o search engine do sisteminha, né? É, é como se eu tivesse que indexar e etc.
Uhum.
Docker e eh Docker e Runime. Então ele já usou aqui, ó, ele já encontrou qual a imagem que eu preciso do Alpine, que é o Eclipse Temurin, que é o Java 2.1JRE como base. Ele já definiu o volume como barradata que eu teria que criar como volume persistente, que é onde fica o pokdeec.db, que é o banco que vai para não ser efêmero, para não perder. Então ele vai colocar isso aqui como um volume persistente no no Cubernets. E aqui eu vou ter uma variável de de ambiente que é o ponto ENV, que é onde eu vou ter o RL de conexão do SK, que é o JDBC datapktec.db.
Então ele já definiu aqui que tenho que ter um arquivo.
Então aqui eu tenho o front end. Enfim, interessante aqui, ó. Riscos e observações. Persistência no SK Light.
Como o cloud run é efêmero, a persistência de um depende de volume montado com cloud storage fuse. O detalhamento de de infra deve resolver o arquivo ponto db para sobreviver a reinicializações. Então tá deixando claro, eu estou montando aqui o seu volume no barra data, mas lá na nuvem você tem que ir lá e definir isso como um cloud storage de fuse para poder manter esse arquivo de fato efêmero dentro do do do ponto de montagem.
Uhum. taxa de limite do POK API. O back end deve implementar um cash simples para evitar excesso de chamadas API externo. Como aqui é só didático, a gente não precisa fazer isso. Olha aqui, que [ __ ] A gente falou que, eu lembro que eu falei que o X 256 não era o ideal, ele colocou como risco.
O chá 256 solicitado no documento de arquitetura será implementado sem salte, conforme requisito, mas recomenda se cautela.
Muito bem.
Então, enfim, ele dev ele poderia até ser mais crítico falando que o chá não era o ideal para isso.
Cara, você acha que a gente pode chegar num nível que cada papel dentro da estrutura de desenvolvimento de software, o cara vai ter o o a caixinha de ferramenta dele com o MD dele já prontinho que ele não abre mão?
Sim. E existem frameworks já fazem isso.
Tipo assim, o cara de cybersegurança, ele vai entregar o MD dele e vai falar: "Cara, isso aqui é innegociável e eu quero que siga tudo isso aqui".
Sim, sim. Tanto que hoje a gente fala em em versionamento de especificação junto com o versionamento de código.
Então, tudo que a gente tá fazendo aqui é gerar especificação e isso tem que ser versionado de alguma forma.
Uhum. Então, a gente tem que versionar isso junto com o código.
Eh, beleza. Ele tá falando aqui, ó. Por favor, ref revise o conteúdo. Se tiver de acordo, prosseguirei para o business rules detales. Colocar aqui, ó.
Aprovado.
Talvez esse episódio fique maior do que a gente imaginava.
Ih, meu carregador não carregou.
Ó lá. Pô, você me salva com meu celular.
Você tá gravando, sabia?
Eu sei.
Ó o cara, o cara ficou um episódio com o meu convidado o tempo inteiro no celular. É a primeira vez que eu peguei no meu.
Quebra essa? Valeu. Pronto.
Cadê o?
A cabecinha tá aí, ó.
Pronto. Siga.
Ó lá. Estamos aqui, ó. Ele finalizou o business rules.dails. Volta nesse. Ó, lá de novo. Anota o número aí.
Beleza. A gente aceitou o detalhamento de arquitetura e agora ele finalizou o detalhamento das regras de negócio e aí ele fala aqui, ó. Lê aí você que fala a partir daí.
Finalizei o specification business holes details. Neste detalhamento estabeleci a lógica de criação automática do primeiro deck, o funcionamento da paginação no dashboard fixo em quatro itens, a regra de que o presente é uma cópia e não remove do remetente. O fluxo de interpretação de presentes no login é via modal. A exclusão em cascata para usuários removidos. Por favor, revise se aprovado para ser. Cara, só não gostei do seguinte, a regra da do presente não pode ser uma cópia. Deu, deu, sim. É, deu, perdeu.
Então, aí entra o ponto que a gente tem que corrigir a I.
É, então aqui antes eu eu vou colocar o quê aqui no texto?
Até porque a deu o presente, perdeu.
Como é que eu posso dizer? O presente não é uma cópia, deve ser removida do deck do remetente.
Isso aí.
Vou corrigir o fluxo de presente, só.
Beleza. Aí fodeu. E aí ele já segue daqui, ó.
Regra de negócio corrigida no specifications.
Agora o envio de um Pokémon funciona como uma transferência real. Ele sai do deck do remetente e caso seja recusado, ele retorna. Aí, boa. Já até pensionar.
Podemos prosseguir?
Vamos revisar o documento rapidinho aqui, ó. Business rules details. Eu quero mostrar aqui para vocês, meu objetivo, não vou ler tudo, mas eu quero deixar claro o que é expansão de contexto disso daqui. Tá vendo?
Ele gerou isso daqui, então, com muito mais riqueza de detalhe e com instruções para que seja gerado um código. Então aqui ele diz sobre a visualização, sobre as regras de adição e o que a gente acabou de falar, ó.
Ó lá. Receber.
Se você enviar e o cara devolver, ó que legal. E se o cara receber e sai da sua carteira? Aí que é animal, mano. Animal.
Então aqui ele já Olha detalhe, deixa eu ver sobre a segurança de dados.
Todas as operações, as senhas é armazenado. Admin cria o usuário. Agora, agora, agora é aquela que eu te falei para ver se você é um arquiteto bom.
Riscos e decisões pendentes.
Limite de decks definido inicialmente como ilimitado. Se houver restrição de performance no SK Lite, né, um limite de 10 decks por usuário pode ser implementado. Então ele já tá até te entubando, já tá dizendo, ó, tá entubando isso.
Remoção de usuário. Ao remover um usuário, todos os seus decks e registros deck Pokémons associados devem ser removidos com o cascading lá que a gente falou.
Exatamente.
Tá bom. Beleza, aprovado. Eu volto aqui e diz aprovado.
Pode seguir. E aí ele vai pro layout.
Veja que eu não precisei criar um skill, nada.
dentro do project MD que eu defini as regras de como tem que ser o trabalho, ele tá seguindo sozinho. Exatamente o que eu pedi.
Vamos lá. Finalizei o specification do layout details neste document defini paleta de cores baseado na marca PPT no compil azul roxo, verde, vermelho.
Eu não sei da onde ele achou o verde, mas beleza.
Estrutura de navegação com side bar e dashboard paginado. Componização baseada em shadow UI.
Shadsen UI.
Shadsen UI. Cards, progressers, bars e toasts. Meu inglês é medíocre, tá galera? Garantia de que todos os textos e resultados da API sejam em português brasileiro.
Descritivos detalhados que substituem as imagens de prévia para orientar o desenvolvedor. Isso é aquilo que você tinha pedido para ele antes dar uma prototipada antes de codar, né?
Sim.
Por favor, revise se aprovado. Eu vou prosseguir. Ah, mano, senta o dedo. Só tira o verde, mano. Não pode verde, né?
É que eu acho que o que ele falou aqui do verde e vermelho é para estado, tipo aprovado, não aprovado, entendeu? Verde e vermelho para estados. O azul e o roxo é o cor do podcast. Faltou o laranja, né?
Mas vamos ver o que que sai.
É, deixa, deixa. Vai, vamos ver o que sai. Vamos abrir o documento aqui rapidinho para quem tá vendo a gente por vídeo.
E agora é o leão de Details, né?
Details. Isso. Olha que legal. Ele põe o primária brand, ele já coloca o código exa, né, do do dos documentos lá.
Sucesso, aceite, ver de esmeralda.
Então, mas ele ampliou o contexto, né?
Porque em momento nenhum a gente deu uma referência para ele pegar as cores do PPT. Onde ele pegou?
Aqui ó, layout.md.
Referências. Logotipo do podcast onde?
Ah, esqueci de de falar. Tá bom.
Entendeu? Eu coloco próprio mascote. Tá bom.
Isso. Então ele leu esses arquivos, pegou as cores e gerou aqui já com o código extra de cada uma das cores, a tipografia, os componentes. Então aqui eu tenho todos a todas a as referências de como ele deve criar o layout, né?
Você quer ver aqui, ó? E não apontou nenhum risco aqui, tá vendo?
Então, tá tudo certo. Ó, aqui que eu falei, devido a limitações técnicas, imagens não podem ser geradas fisicamente.
Mas por quê?
Eu não sei por acho que o Gemini Clean não gera imagem.
Ou ele não consegue gravar em disco e não, ele consegue tanto que ele gravou em disco esse arquivo, né?
Mas enfim, ele ele ele não grava. Mas beleza, mas ele diz aqui como seria, tá vendo? Cada um. Beleza. Então agora infradevops, vamos dizer aqui, aprovado para ele seguir pro próximo.
Aprovadinho.
Aprovadinho.
Aprovadinho.
Agora ele vai fazer o DevOpse.
Isso. Fazer o DevOps. É esse. Esse eu vou ler, mas eu sou cabaça, né? Quer dizer, e os outros não. Não era.
Esse eu vou ler e eu sou ignorante. Tem que arrumar aí, editor.
Desculpa, B. ajuda nós.
Anota aí, senão vou ser cancelado.
Bolívia. E o cara quer que eu faça live.
Ó, finalizei a criação do arquivo specification infraops details. Neste documento de infraestrutura, especifiquei que o deploy é o cloud run na região US East One. Tratei o problema do SK Lite efemmer utilizando o cloud storage fus, que ele tinha dito que seria ter que deixar configurado lá.
montado como volume, limitando a estância do back endar problemas de concorrência e lock no arquivo do banco.
Definir a necessidade de um service account customizado, que a gente vai ter que dar os privilégios lá. Esboceia a lógica do cloud build yam para o CICD, construção do deploy em ambos serviços.
Isso eu não sei, eu não manjo muito. Que que é o Isso aqui o cloudbild. mão é como fazer o build para subir a aplicação para rodar no no no GCP.
Mas isso é um arquivo que quando a gente põe no GC no quando roda o CD, ele segue essas normativas.
Ele segue essas regras.
Mas quem escreve isso? Um arquiteto.
Um arquiteto.
E ele já deixou aqui tipo no esquema.
Por você vai subir uma aplicação pra produção ou pro para rodar no cloud run.
Você tem que fazer o build, tem que construir o contêiner, tem que subir no cloud run, tem que rodar teste. Então dentro do cloud. Você tem passo a passo tudo que precisa ser feito para subir a aplicação, tá? Mas até que a gente tenha vivido o 2026, a era da IA, os caras já escreviam isso?
Sim. Era escrito manualmente pro dentro das melhores práticas de programação, né? Tá bom. É que os caras me levaram pro comercial, né, mano? Com isso, concluímos que o detalamento de todos os arquivos da base pasta specification, arquitetura, o as regras de negócio, layout e a infra DevOps, eh, ele tá dizendo que detalhou tudo. Por favor, revise o arquivo de infra. Se aprovado, qual seria o nosso próximo passo?
Ele quer falar do project ou iniciar a definição da primeira sprint? Ele já quer entrar no plan, né? Então, mas vamos ver o detils do devops lá.
Devops details. Então, cara, ele definiu aqui, ó, quais são os serviços, qual é a porta, o que, se vai ser público ou não, quais são as variáveis de ambiente. Ele definiu a persistência de dados do cloud run. Qual é a solução definitiva? Como que eu tenho que montar aqui, ó, para poder ter um volume persistente com o fuse para deixar isso no cloud storage?
Ele definiu aqui como vai ter que ser a segurança do service accounts para, ó, sugeriu até o nome do service account que eu tenho que criar e quais são os roles que eu vou ter que criar para poder que essa e essa service account tenha acesso ao storage aqui com como objectal aqui, ó, pro para fazer um cloud tracing para poder ter log de observabilidade do acesso desses arquivos. E ele fala aqui do ADC, que é o application de foto credentials, que eu coloquei já lá antes, que ele continua utilizando o service account para produção. Por isso que eu coloquei para para ele usar o ADC. Aqui eu tenho a minha autenticação padrão e lá ele vai usar a a conta de serviço. Ele define aqui exatamente quais são os passos para construir e subir a aplicação para pra nuvem usando o GCP. Então ele tem um script do cloudbild.
Para o back end. Então ele fala construir a imagem docker, fazer o push da imagem Docker pro pro Registry, fazer o deploy no cloud run e depois com o cloud run montar o o cloud storage fuse para poder ter o documento guardado dentro do storage e configurar as variáveis do ambiente do ponto ENV. Como se aqui, ó, aqui olha, olha que da hora.
Eu não tinha falado que que o ideal era ter um um banco de um cofre de senhas. Ele já definiu usar o Secret Manager para substituição do Cloud Build.
Muito bem.
Então ele falou: "O arquiteto é burro, eu vou".
Mas aí ele tirou da cabeça dele.
Sim, ele poderia ter colocado isso só como É que a gente tá com o Gemini, então ele pegou o GCP Secret Manager.
É que na verdade ele puxou a sardinha pra Google. Não, cara, eu falei que ia ser GCP.
Ah, eu falei que ia ser GCP, mas eu falei que tinha que seguir as melhores práticas de segurança, etc. Então, ele teria que colocar as senhas dentro do cloudbild.
Isso não é uma boa prática. Então, ele vai utilizar isso para utilizar o o GCP Secret para não expor isso no cloudbild.com.
Frontend, construir a imagem docker, fazer o push, fazer o deploy. Então, ele colocou tudo aqui, ó. Versionamento.
Versão inicial é o 0.1.2, como eu coloquei, e o build number será controlado com os com as tags no Git, com o ID execução do cloud build com a variável build ID. Observabilidade, os logs, cara, perfeito.
Não escreve, cara. Só ali tem uma nota de risco aonde?
É mais para cima ali. Vai lá.
Hum.
Cara, não vai dar pau nesse sistema se ficar trocando os gift ali, ó. Quer ver, ó? Eh, cadê a nota de risco que ele tinha colocado que ele vai colocar numa instância só? Ó, o SK Lite com cloud storage fuse pode ter problemas de locking se houver múltiplas do cloud run.
Se eu tiver muitas instâncias do backend acessando o mesmo esquelite, eu posso ter esse problema. Então, mas se eu ficar eu e você mandando presente, nós quatro aqui, não vai dar merda não, porque aqui o o back end e o front end eles estão no mesmo contêiner, então se eu tiver mais de um contêiner, eu vou ter um problema, que eu tenho dois bancos de dados.
Ah, tá. Mas aí teria que na sua máquina ter aberto duas vezes o negócio e ficado fazendo. Ah, entendi.
Sim. Essa arquitetura aqui, ela não escala porque eu não posso ter mais de uma instância de back end, porque como elas estão mapeadas o mesmo volume eh persistente, eu teria duas máquinas escrevendo o mesmo arquivo. Isso daria uma merda do [ __ ] Então, mas como ele é um sistema web, não vai dar merda não, porque aqui é pr car É. Ah, não, mas o deck é seu. Aí quando eu abrir o meu deck, ele abre o meu contêiner.
Não, o front end tá isolado.
O front end fala só com o back end, tá?
Eu não posso ter dois back ends, porque se eu tivesse muitas requisições no backend, eu precisaria escalar ele para que eu tivesse que atender mais requisições.
Então, mas aí se eu manter só um back end, a aplicação fica segura.
Agora eu vesti o Wellington, hein? Para efeito dos próximos episódios, a gente teria que colocar lá no nas especificações da arquitetura que a gente não poderia limitar a fazer algo não escalável, porque aí a gente construiu um negócio limitado.
Sim. Exatamente. O correto aqui do ponto de vista de arquitetura seria que o SK, na verdade, o correto não seria usar SK para uma aplicação que vai escalar, né?
Ah, tá. a a escolha que nós fizemos do banco serem limitou a gente em escala.
Isso, exatamente. Conscientemente.
O ideal é que eu usasse um banco gerenciado ou caso persistisse em ter um banco escelite, ele deveria estar no contêiner separado, com uma persistência única, com o back end lidando direto com esse banco, tá? Aqui o back end tá junto com o banco, então eu não posso ter mais de um back end porque senão vou ter dois bancos escrever no mesmo disco, entendeu?
Então se nós, se a gente fizer um bagulho legal, não dá para escalar e ganhar dinheiro com isso.
Dá aqui é pra gente e efeitos didáticos.
Tá bom. Capitalismo não vai rolar.
Beleza.
Podemos partir pro pro planning?
Podemos.
Prossiga pro planning.
Se você chegou até essa parte do episódio, comenta aí.
Isso. Coloca aí que que você tá vendendo cerveja IPA. Cerveja IPA. Se você vier aqui no estúdio, eu pago para você.
Isso da Lagu.
Vamos lá. Eh, vou ler, vou ler o arquivo planning.md para entender os marcos já definidos e estruturar a primeira sprint de desenvolvimento. Com base no planning MD, as fases do projeto estão bem estruturadas. Como planejador, eu vou detalhar sprint um e o setup inicial.
Meu objetivo é que ao final dessa sprint o desenvolvedor tem o esqueleto do projeto pronto para codificar as funcionalidades.
Propostas para o sprint um do setup inicial. Escopo criação da estrutura de pastas em barracodebase, setup do front, setup do back, doquerização básica, scripts de C e CD e configurações de variáveis de ambiente que vai usar lá no ponto envia, etc.
Minha visão desse detalhamento, vou listar cada dependência, plugin do Maven, biblioteca do Next e passos do Docker para que os desenvolvedores apenas execute e configure, sem ter que tomar decisões arquiteturiais.
Para prosseguir com a criação dos arquivos Sprint 1 e Sprint Tesk de OK.
Ah, não, não é para, é posso prosseguir.
Isso. Prossiga.
Prossiga.
Se a gente escrever gira, ele entende.
Será?
Vai, mano.
Tipo, go ahead, irmão.
Vai, brother.
Segue.
Vamos lá.
Criando o planing. Este documento detalhe cada tarefa.
[ __ ] é muito louco, né, mano? Ó, os arquivos da Sprint 1 foram criados. Eles estabelecem uma base técnica sólida e detalhada pro início do movimento. Vamos abrir ele lá para ver, então.
Tá, vamos lá. Sprint um. A gente vai criar um e depois a gente vai dar o go horse para ele fazer os outros pra gente poder cobrir a parte de código quando não vai dar tempo.
Tá bom?
Então vamos lá. Sprint um. Fala aí, Gu.
Objetivo: configurar a infraestrutura base do projeto em ambos os assets de front de back, garantindo que os ambientes de desenvolvimento build, deploy estejam operacionais. O escopo que ele escreveu no MD foi o seguinte: estruturação do diretório pon/codebase e na inicialização do projeto com front que vai ser em next.js, inicialização do projeto de back ending boot que a gente falou, configuração do docker e docker compuse para desenvolvimento local e definição do pipeline de CI e CD inicial. entregáveis dessa sprint. O COD base estruturado nas pastas de front de back, o ambiente de Docker com IML, o CD com o Cloud build y que você falou, né?
Ele vai escrever o Ian. Então, sim.
E as configurações com os arquivos de ponto ENV e o git ignore que a gente falou para ele. A validação humana tem que dizer o seguinte, isso é legal, ó.
Validação humana com os checkpoints. Se o comando docker compuse o up, sobe os dois contêiner sem erros. Se o projeto de front end responde na porta 3000, página padrão do next.js, se o projeto de back end responde na porta 8080, que é o end point do Swagger UI, ou V3 da PI docs, esse eu não manjo, hein? Se a estrutura e a pasta segue rigorosamente definido, como a gente colocou lá no arquitetura. MD, é isso. E e veja só, esse é só o escopo geral do sprint do sprint um. Ele cria ainda esse cara aqui, ó.
Aí ele detalha em cada um, né? Eu não vou ler que é muita coisa, mas ele colocou lá o setup geral do repositório, o asset do back end, o asset do front, a infra do C e do CD e toda a documentação de execução, ele vai criar um Redmi ainda.
Isso aí ele cria cada atividade que precisa ser feita.
É readm, é, né, a pronúncia ou Redm aonde?
Lá no final. Documentação de execução.
Criar um Redmi.
MD. É readm.
Redm. Tá bom. Como é que eu não fiz CNA, mano? Desculpa.
Então aqui, ó, ele gera cada atividade que precisa ser feita e o que que o desenvolvedor deveria fazer. Então, aqui no no sprint um, ele diz o que precisa ser feito, qual o escopo e qual entregável. E aqui no arquivo tesques, quais são as atividades para chegar lá?
Então ele fala, ó, esse documento lista as atividades técnicas detalhadas para execução do sprint um. Um setup geral, asset, back end, asset, front end, infracid. Então aqui e inclusive ele dá aqui, ó, exatamente quais são as bibliotecas, tudo que precisa ser feito.
Agora, só por desencargo de pergunta mesmo, ele tá dando os colchetes que caberiam um checked ali bonitinho, porque ele espera que o outro agente complete.
O agente programador.
Isso.
Da hora.
Muito louco. Então aqui, gente, pra gente facilitar e poder evoluir para caber no episódio só, eu vou falar para ele seguir com a documentação das outras sprints todas, porque ele ele acertou a primeira, tá aprovado. Lá no planing. MD a gente disse o que esperava de cada uma das novas prints. Então, vou pedir para ele gerar os outros sem nossa validação.
escreve pr ele gerar sem a nossa valalização, mas deixa lá no Visual Stúio, a gente vendo nos arquivos sendo criados, como se o agente tivesse trampando.
Então vou colocar aqui: Prossiga para todas as sprints sem interrupção.
Dá, dá uma Ia falar, puxa, puxa o saco dele, coloca assim. Eu acredito em você, piscadinha.
Aí aqui a gente vai ver aqui os Deixa eu ver se Ó, tá tá criando. Ó lá, dentro do plane tem que fazer até o oito, né?
Tem que fazer até o nove.
Até o nove.
Ué, cadê os arquivos?
Não é que ele tá falando agora o fluxo de trabalho tem que seguir com o programador, ó.
Não, mas ele não. Ah, tá. Criou aqui, ó.
Ih, agora sim, ó.
Ai, que legal, ó.
Então, a gente tem aqui cada sprint o que precisa ser entregue, cada tesque de cada sprint que precisa ser feito. E agora, ó lá, ele falou: "Tenho tudo aqui prontinho. Agora a gente precisa gerar código.
Agora é o cloud.
Agora vai pro Claudião.
Claudião. Claudião. Chama o Claudião. Ó lá, Gu, eu pedi para ele seguir tudo, certo? Que que qual foi o resultado que a gente teve aqui? Conclui o detalhamento completo de todas as nove sprints, conforme solicitado. Cada sprint agora possui seu respectivo arquivo de escopo, o ponto MD, e de tarefas técnicas, que é o underline, né, o sufixo_linetesks.m, prontos para serem executados pelo programador. Estrutura final do planejamento. Sprint 1, setup. Sprint 2, o web service, Sprint 3, o MOC do front.
O Sprint 4, autenticação e gestão. O cinco é o dashboard. O seis é o catálogo, o sete é os detalhes, o oito é o mecanismo de gift e o nove é o polimento, funilaria e pintura.
Como planejador, eu finalizei todas as especificações e o planejamento de longo prazo do projeto. Todas as diretrizes lá do project.m foram seguidas. Deseja realizar alguma revisão final em algum desses arquivos ou posso encerrar meu turno de planejamento?
Já quer meter embora. Já bati na [ __ ] Caiu a caneta. Monstro, caiu a caneta.
Eu ainda vou ser cara de pav. Obrigado.
Vou para o programador e já Não, calma, calma, calma. Vamos fazer uma brincadeira rápida.
Não, cara.
Tá bom. Eu ia falar para ele. Você acha que precisa de mais um sprint?
Tá bom, vou perguntar.
Vai perguntar. Vou vou mudar sua pergunta.
É só, é só para não fazer o que eu tô pedindo, mano. É igualzinho minha esposa, velho. Vai.
Não, então vou perguntar como você quer.
Isso. Do jeito burro que eu faço.
Pronto. Isso. Vai. Você acha que sim que precisa?
Você vai tomar um pedala do do do LM, ó. De outra sprint. Ah, mas beleza. Eu não tô aqui para fazer o Lego.
Tá bom.
É, então.
Não, mas você não precisa fazer o burro, você pode ser só o [ __ ] Mas eu fui inteligentaço até agora. A galera tá falando assim, mano, esse maluco tem um back legal, mano.
Você quer que eu pergunte assim? Ah, sim. Você acha que precisa de outro sprint?
Qual?
Ó, planning, considerando os sprints. Opa, opa, opa.
Tá, tá, tá, tá, tá, tá.
Aí, chupa. Analisando o escopo de alto padrão e qualidade definido no Project, eu sugiro a inclusão de uma sprint chamada qualidade quei.
Mas que eu falei no começo, a gente não incluiu isso propositalmente, né?
Ah, falei, a gente poderia ter e tem a parte de documentação. Inclusive, a gente pode fazer isso, Gu.
Hum. Se você acha que que a gente tá agregando aqui no episódio para você e você quer que a gente continue esse mesmo projeto fazendo um outro sprint de Q&A e documentação, comenta aqui embaixo.
Muito bem.
Eu vou falar para ele que não, mas que depois a gente continua evoluindo, dependendo dos comentários. Você vai comentar que a extreme go horse.
Não, já volto. Colocar já volto. Agora eu vou lá na telinha.
Coloca. Vamos tomar no café.
Agora nós estamos aqui, veja, LS pelo menos la. Estamos na mesma pasta, sendo que dentro do planning tem o cli do nós temos temos todos os todas as definição das da da das sprints. Veja, em nenhum momento o Cloud teve contato com esse projeto. Eu vou entrar, vou chamar o Cloud, mesma coisa, ele vai perguntar se eu se eu confio na pasta.
E estamos aqui no Cloud.
Que da hora. Eu come back, Wellington.
Então tô aqui no Opus 4. O tamanho da sua cabeça mesmo, né? O bonequinho.
É, né? Da tamanho da minha cabeça, da a distância dos olhos também.
Então eu vou falar pro Cloud, veja, eu defini no project.md exatamente a dinâmica dos agentes. Aquele agente Gemini no primeiro, ele já entendeu que ele era o planejador.
Eu vou dar o mesmo comando pro cloud.
Vou falar, leia o project. MD.
Não, mas por que que ele vai ler um cloud.md.
Não, ali é caso eu queira fazer uma memória de longa persistência, criar skill, etc.
Aí ele criaria isso.
Isso é aqui eu vou usar o cloud vanila padrão, tá bom?
Sem skill nem nada. Vou falar, ó, leia o arquivo project. MD, exatamente como eu fiz com Gemini.
Por na engenharia de contexto, no spec driven, eu já defini o que cada um tem que fazer.
Então, mas vamos ver. Agentes planejador, ó. Vamos lá. Le project.md.
Resumo. O projeto PPTNC Pokedeck é um app web multiusuário para montar decks de Pokémon com persistência individual.
A estrutura specification tem os specs de arquitetura, layout, regras de negócio. Cada spec ganha sua versão sufixo traço detils com detalhamento máximo. O plan.m, as sprints, o code base e as fontes, a documentação, os débitos técnicos e o code review. Regras chave. Fase de especificação, só detalhamento sem código. Pedir revisão a cada spec. Nunca exceder a falta de escopo do sprint.
Perguntar antes de de decidir sozinho em caso de conflito, falta de informação ou sugestão de melhoria. Nunca iniciar atividade não especificada ou solicitada. Agentes, planejador e programador implementação. Qual o próximo passo? Mas ele ainda não se auto isso.
Eu e aí eu vou falar, ó.
Analise.
Analise.
Desculpa, pessoal, o microfone tá meio longe. Analise recursivamente os arquivos e descubra o seu papel e defina o próximo passo.
Você acha que ele vai saber o papel dele?
[ __ ] até eu que sou burro saberia.
Imagina o Clou.
Você tá ligado que o Cloue é o sócio do maluco que tretou, né? Do Sandman lá.
Sultman.
Abriu. É. E Simon. Eh, e ele ele tretou.
Eu quero do SES.
E ele tretou e abriu a Cloud, né?
E que aí opinião pessoal, tá gente? O Clou para mim é disparado o melhor modelo anos luz do que qualquer um. Assim, você não usa mais GPT?
Não, não usa mais.
Gemin.
E aí você me deixou lá com a licença pagando, né? Ah, você tá usando de trouxa. Eu uso Gemini.
Sorte sua que eu cancelei tudo.
Eu uso Gemini e Cloud.
É cara, Gemini pr pra imagem com Nano lá é é muito maravilhoso. E para planejamento o Gemin inclusive nossas TB nós tem que fazer no Gemini.
Maravilhoso, mano. Só que ele põe o bagulhinho lá, se é grátis, ele põe o a estrelinha dele.
Eu pago também.
É, precisa ter para para definir que é uma imagem erada e não você não enganar ninguém, entendeu?
É.
E tem uma marca d'água invisível também que diz que foi gerado por por I.
Por isso que a que os algoritmos estão pegando, né? O ele sabe que você gerou alguma coisa por ele. Sim, porque tem uma marca d'água invisível ali que você você lembra de um, só a título de curiosidade, você lembra que tinha um site chamava um pixel que o cara vendeu cada pixel para coisar?
Lembro.
E depois teve um negócio que você tinha que achar o milhão dentro de vários pixels. Se você milhão, eu não lembro, se você achasse o pixel, você ganhava o milhão da cidade inteira. Eu sei que todo dia sai um um um trouxa e um malandro.
Sim.
E aí esse cara do Pix encontrou vários vários trouxas.
Todo dia sai um trouxa e um dono de bet.
É isso.
Ele se encontra e dá negócio.
Vai Lagu. Vou voltar aqui, ó.
Pera aí. Vamos lá. Li o projeto. Pera aí.
Lá. Pera aí. Aqui, ó.
Esse foi o último comando. Analise recursivamente.
Tá. Análise do estado atual. Concluído a fase do planejador, tá vazio e tá pendente o nenhuma sprint foi criada ainda, né?
Ele tá falando, ele ele também disse que tem pendências e inconsistências detectadas antes de começar a codar. Por exemplo, ele diz que o layout details as imagens prévia foram explicitamente não geradas, que ele já tinha dito lá também na na época do planejador. Tem consistências nos gifts, ou seja, o 2.4 define a tabela de de gifts sem a origem deck ID e exige um campo de lógica que recusa. Precisa alinhar o esquema antes da sprint 4.8, a4 e a8.
Olha o Clou comendo cu do Gemini. Tem end point faltando, não há delite dos decks em lugar nenhum. Remover o Pokémon do deck fora do do fluxo de gift não foi especificado.
E revisão humana das specs, o projeto pmd exige uma revisão a cada spec antes de avançar. Você já revisou formalmente os quatro e as nove sprints?
Sim, a gente revisou uma passando.
Ele ele tá chegando agora no projeto.
Entendo assim, entendeu? Próximo passo recomendado, antes de iniciar Sprint 1, revisar comigo os três pontos acima e confirmar a aprovação geral do pacote.
Depois disso, a gente vai transicionar pro agente programador e executar Sprint 1, criando também o Sprint_9 logs. Quer que eu detalhe e resolva as três pendências primeiro, bateu no peito, hein? Ou prefere aprová-les como estão a partir da sprint um? Então, mas aí que tá. Por que que ele deixa você aprovar sabendo que tem erro?
Porque pode ser que não seja erro, pode ser que seja uma forma de interpretação dele.
Mas ele não é o bonzão que táando J.
Não, mas ele pode fazer isso, mas eu defini no Project MD que qualquer mudança, qualquer coisa, ele tem que perguntar, entendeu?
Sim.
Senão ele poderia é, eu acho que das das quatro que ele levantou ali, a problemática é só dois, né?
Vamos lá, ó. Layout. MD as imag. Tá, então vamos.
Como que a gente detalha isso para deixar o Ll bem alinhado? Ó, não tem as imagens. Um ponto um ponto. Ok.
Ok.
Imagens não são necessárias.
Para quem tá ouvindo e não está vendo, o colocou para cada um dos itens que ele disse que tem consistência, ele tá dizendo o que tem que fazer.
Isso. Agora, esse aqui me preocupa, ó.
consistência no gifts 2.4 define que a tabela gifts sem origin deck ID mais o sprint 8 exige esse campo na lógica de recusa.
Então o dois precisa ser revisto.
É. E foi a merda que a gente fez, que a gente disse que era transferível.
Sim.
E não cópia.
Exatamente.
Nós que cagamos. Então, então, mas o Geminai deveria ter considerado isso e ter revisto a modelagem e não revi.
Sim. não review e o cloud pegou o erro, tá vendo? E é por isso, gente, que é importante trabalhar com dois modelos.
Se você tiver trabalhando com especificação e código ou tiver com código e revisão, sempre trabalha com dois modelos, porque os modelos têm vieses.
Uhum.
Então, o modelo ele pode ir para uma linha e o outro vai pegar uma outra, pode pegar um erro que o outro modelo viu, entendeu?
Tá.
Dois, precisa ser revisto. Beleza. End point faltando. Não há delite pro Pokémon em lugar nenhum. Três também precisa ser revisto.
Não, Pokémon é seu, fica para sempre.
Não, mas se eu tiver Você já assistiu Pokémon? Você não pode devolver um Pokémon, meu irmão.
Ah, tá. Mas aqui é fora do modelo de Ah, tá. Se eu eu só perco um Pokémon se eu te der.
É.
Tá. Então, mas não pode mesmo se for pegar a regra do Pokémon mesmo. Ó, o Bolívia é mais novo que eu, até ele sabe disso.
O tinha problema, ele tinha que ficar andando com os Pokémon dele lá. Não é possível deletar Pokémon. Beleza.
Só se eu doar um para você.
Isso. Beleza.
Você é acumulador.
Quatro. Revisão humanas dos specs.
O sete exige revisão de cada speç. Já revisou formalmente? Já revisei, querido.
Já. Já.
Já revisei, querido.
Querido.
Revisei, né?
Querido Cláudio.
Querido Cláudio. Vamos lá. Que que o Cláudio diz agora?
Temos meia hora, hein?
Dá, a gente tem o tempo que a gente quiser, né?
Não, as pessoas precisam ir embora descansar, né?
Nada. O Bor está curtindo aqui, ó, com nós.
Não, mas tô aqui desde as da manhã.
Ah, cedo.
Você vai ver o Você vai ver o Pok Deck nascer lá.
[ __ ] Aqui eu vou falar para ele poder gerar os arquivos. Ó lá, ele refez a modelagem, tá vendo? Do Gemini.
Então, só que ele fez a remodelagem, mexeu no documento do planejador.
Sim. Então, porque eu permiti.
Ah, tá.
Ó lá, aqui, ó. Update no architecture details, tá vendo?
Uhum.
Vai, Lagu.
Esquema de gifts corrigido. Adicionados ou origem deck ID, que é uma foren né? O nossa cara, você sabe que é uma fariquinha ainda? Ah, a cria a cria create date, resolve date e o status agora tem check points de post gifts atualizados para receber a origem e o pet esclarece o fluxo de aceite. Recuse recusa. O business e há estava consistente, não precisou mexer. Pronto, querido.
Tendências resolvidas. Olha que [ __ ] porque eu eu mandei um querido na resposta, você viu?
Aham.
Aí ele mandou um querido de volta. Mais falsidade do [ __ ] hein, mano. Ó, pronto, querido. Pendências resolvidas, prévias dispensadas, origem deck ID adicionado, delete de Pokémon confirmado como não requisito e specs aprovadas. Próximo passo, transacionar pro programador iniciar sprint 1. Vai, senta o dedo, mano. Posso começar? Sim.
Bora, querido.
Aê.
Drills Ling. Que que é drilling?
Dzis, sei lá, velho. Dizling.
Agora aqui, pessoal, ele, olha que legal, o Cloud, ele pegou o resultado da Gemini, fez críticas e agora ele tá usando todo o material gerado pela Gemini e está gerando o código em cima das especificações. Aqui de fato, nós estamos gerando código, estamos gerando gerando software com base em tudo aquilo que a gente fez.
Pera aí.
Começando primeiro, eu vou checar o ambiente para criar o log da sprint. E aí, criar sprint, scaffle back end, sprint boot, sfle frontend, validação final da sprint. Que que aconteceu aí no?
Eu deveria fazer uma coisa, mas tá, eu não, mas explica pra galera o que aconteceu.
Bash command.
Aqui ele tá pedindo uma uma autorização para rodar um comando do Bash. E eu acho que eu vou iniciar de novo. Cloud.
com uma tag. Preciso ver qual que é o nome da tag exatamente para ele não pedir autorização para nada, pra gente poder andar mais rápido.
Skip danger rolls alguma coisa.
Clode, deixa eu ver aqui. Skip.
Ah, mas se você ficar for dando Sim, sim, sim, sim. Nós vamos dar uns 20 só.
Não vai para [ __ ] porque ele vai usar o git. O git precisa de muito. É dangero skip permissions. Eu vou fazer o seguinte, ó. Vou dar um cancel, vou dar um kit.
Aí eu posso vir aqui, ó. Tá vendo? Ele mantém o resume aqui, tá vendo?
Uhum.
Então eu pego esse ID, venho aqui, coloco menos resume. E aí eu vou colocar aqui essa tag. Deixa eu confirmar aqui como que é. É dangerly dan d Dobby dragons dang rose rosle dangero skip você fez datilografia ou não?
Não, não, não sou tão velho assim. Só, só tô rodando sem hora. Permissions.
Então agora, ó lá, bypass permissions.
Yes. Yes.
Yes. Acept. Só vai, querido. Bora.
E agora? Mas será que ele vai? Bora, querido. Começando. Primeiro, eu vou checar o ambiente para criar o log.
Beleza. Goodbye. Por que goodby? Porque pera aí que aí ele voltou a sessão e eu dei es, né? Então eu vou dar um continue, querido.
Continue querido. Isso.
Então lá ele vai criar o sprints log porque ele vai fazer o setup raiz.
Da hora ele usando o gifzinho dele lá do cloud.
Sou fã do Cloud.
Eu sou fã do Cloud.
Ó lá o bicho gerando os arquivos. Eu vou aqui no Ó, o Code base estava vazio, certo, gente?
Ó, já temos aqui um docker compose sendo gerado, um ponto ENV sendo gerado e o bicho tá trabalhando, ó.
Tá gerando o cloud build.
os agentes autônomos que os caras fazem que fica chamando WhatsApp, o [ __ ] é um bagulho desse aí.
Não, aqui a gente tá usando um LLM gerando código.
Não, mas tudo bem. Ele poderia estar entrando na PI do WhatsApp, pegando o número do cliente, fazendo, não, LLM, eu teria que fazer uma aplicação que usasse o LLM e fosse o agente autônomo, entendeu?
Tá? E na parte conversacional usasse a inteligência. Exato.
Aqui eu tô usando um um agente que eu tô direto com Cloud, então ele não tem uma interação com o mundo externo. Eu teria que criar uma aplicação que interaja com o Cloud, com o mundo externo, seja uma uma ponte.
Então vamos fazer um episódio, eu quero participar desse, que a gente vai usar aquela API do Git que a gente viu de graça do WhatsApp.
Nós vamos fazer um agente, era o Evolution, não lembol. E nós vamos usar ele para responder coisas para um programador júnior vi o número de WhatsApp.
Entendeu?
Que que você acha? Responde aí. Vale a pena?
Vale.
Coloca aí no comentário.
Aqui demora, hein, mano? Programador lerdo da [ __ ] 2 minutos já.
É, manda um programador de verdade fazer isso.
Primeiro que não entregar, né? É igual pedreiro, programador e pedreiro é a mesma coisa. Se pagar antes, some. Se não pagar não vem.
Não fala isso, velho. 90% dos ouvintes são programadores.
É, tô falando mentira. Paga antes um projeto para um programador para você ver se ele não sobe igual o pedreiro.
Programador, vem com o pai, cara. Mas isso é maravilhoso. Isso é, ó lá, já tá criando doer ignore, tá criando todas as partas. Isso, isso é muito [ __ ] E a gente começou isso com 200 linhas de texto.
A gente expandiu o contexto, definiu.
O o ideal, você que tá nos ouvindo, era você revisar aqueles documentos que ele gerou de especificação no detalhe, porque aí você saberia exatamente o que tá sendo desenvolvido. Aqui a gente foi mais eh permissivo, né? Não revisamos os documentos de sprints, etc.
Mas com base em que um outro agente definiu, ele tá simplesmente criando código.
Agora você tá tão seguro disso daí que vai rolar ou você testou isso antes?
Não, isso aqui é primeira execução.
É mesmo?
Eu só fiz os MD no quente.
No quente. Quem é desenvolvedor, quem é arquiteto, ele precisa saber usar a ferramenta a favor dele.
Entendeu?
É isso.
Então, mas eu tô entendendo que você acabou de mostrar para mim que dá para ter 10 eliton trabalhando em 10 projetos. que os caras tava trampando na pandemia em quatro, cinco lugar ao mesmo tempo. Agora você consegue.
Não, o Wellington foi o cara que escreveu os MDS iniciais. Então os eu tenho mais braços, mais trads para fazer o que eu defini, mas ninguém definiu o que o que eu pedi para ser definido. Se isso aqui vai ser note, se vai ser next, eu posso até ter uma sugestão, mas quanto mais amplo o escopo, maior a chance de erro. Qual que é o grande ponto do spec driven? É você afunilar o que você precisa da da IA. Então a IA está fazendo exatamente o que eu pedi para ela fazer.
Sim.
Se você deixa o escop falar: "Faz uma aplicação aí para mim". Ela vai fazer do jeito que é mais rápido para ela.
Tem uma coisa, uma comparação que é muito legal pra gente fazer, que é o seguinte: eh sempre que você coloca um, já vi um vazamento de água?
Uhum.
A água sempre vai pelo caminho mais fácil, pelo mais rápido, por gravidade, etc.
E o comportamento da rede neural é muito parecido com esse. Então, se você pede, faça uma aplicação para mim, ela vai pelo caminho mais rápido, vai pelo caminho mais fácil, porque é o mais eficiente, mas não necessariamente é o mais seguro, de mais qualidade, etc. O spec driven ele vai afunilando, tipo, ó, beleza, mas por aqui você não pode ir, por aqui você pode ir, por aqui você não pode ir. E aí você faz com que o comportamento da da rede neural siga os padrões que você precisa.
Quanto mais você expande, maior é o o risco de você não ter um problema. Sprint um montada, querido.
Resumo que ficou pronto a raiz, o back end, o front end, os logs, sua hora de validar. Ele tá dizendo aí que depois e confira o local host, né?
Aviso importante, o repositório ainda não tem git inicializado. Depois que você validar, eu preciso de autorização explícita para fazer isso. Certo?
Beleza, vamos testar então. Ele tá falando vai que eu tenho que copiar aqui o ponto env. Exemplo pro ponto ENV, certo? E aí eu vou abrir aqui no meu terminal e fazer isso. Copiei.
E aí eu vou subir o Docker Compose, que é exatamente o que ele pediu.
Ele vai gerar o build aqui da minha imagem.
Gustavo nunca viu tanta letrinha na vida dele.
Tô me sentindo em Matrix.
A Iara você fez assim ou não?
Não, fez de um jeito um pouco mais complexo.
Aqui é um exemplo mais mais simples, né, mano?
Então aqui ele tá baixando agora as nossas dependentes. Tá rodando o Maven.
Sabe o que é o Maven?
Não.
Maven é o gerenciador de pacotes do Java.
Então ele definiu exatamente quais são os pacotes do Java e agora ele tá gerando build para rodar o back ending boot.
Tá preparando todo o ambiente sem a gente escrever uma linha do Spring Boot. Eu vou voltar aqui, ó, no no VS Code e abrir o code base. E olha só, a gente já tem uma pasta back endasta front end.
No backend eu já tenho docker file. Eu tenho um ponto com todas as dependências que eu preciso de pacotes para rodar isso animal.
E eu tenho um source com todo o escopo para iniciar a aplicação, exatamente como eu pedi no começo pra sprint 1.
Uhum.
Eu preciso que isso rode só. Então eu tenho um quick start aqui da aplicação lá. Spring application. Só é uma aplicação básica gerada em Java, mas com todas as dependências e o Docker file. Pronto.
Se precisasse colocar um Hello Word, aí rolaria.
É um Hello World, na verdade que eu pedi, né? Então aqui rodou, ó lá, já tá rodando o Spring, ó.
Tá vendo? Se eu entrar aqui, ó, você já vai ver um spring rodando, ó. Temos um spring rodando.
Muito bem.
do absoluto nada. E aqui eu pedi para ele gerar como como regra, lembra?
Sim, sim.
Temos aqui uma PI. Pronto. Ué, vai te l pera aí. Não, mas esa aí. Por que que ele tá rodando no 30? Ah, tá. Porque ele tá rodando aqui no 30.
a interface completa, tá? Beleza. Ele tá rodando aqui na 8080, que é o back end, certo? Se eu rodar aqui um barra healf, será que vai?
Vixe, agora a merda agarrou, hein, filho?
Ei, [ __ ] pera aí, vamos lá.
Ixi, ó lá, o spring tá rodando.
Deixa ele terminar, mano. Você também não, mas terminou. Tá rodando. Tá rodando.
Ó lá.
Pode testar e me dizer o resultado. Fala para ele.
Ah, não é que aqui o URL tá certo. URL certo é só você acessar o RL certo que dá certo. Aqui, ó.
A P do Swegger tá aqui.
Então, PPTNC Pokedeck API tá aqui.
Não tem nada porque a gente não definiu ainda para esse sprint.
O front end tá rodando e o swager tá rodando.
Next.
Então aqui, ó, que que ele fala aqui, ó? Jon API. Eu já tenho aqui uma assinatura de API pronta.
Animal.
Então eu vou validar.
Pode testar aí me e e dizer o resultado.
Então bora. E de acordo com o dicionário manes é querido com i, assim, ó. Querido com K, né?
Não é com I, querido.
Vai, bora pra próxima.
Foi redundante.
Recap. Ó que da hora.
Terminei o scaffold e tal. Cara, isso daqui para quem tem controle do desenvolvimento é maravilhoso. Então, beleza. Eu tenho um contêiner rodando um um Spring Boot.
Ó, antes de começar Sprint 2, uma checagem rápida. O plano em MD exige commit, tag e puxa a cada sprint validada. O repositório ainda não tem git inicializado. Três opções. Você fez o git na sua máquina? Quer que eu faça agora ou pular o git nesse sprint e deixar pro final?
Por isso que foi importante a gente falar lá, ó. Qualquer dúvida, pergunte.
Então, eu vou criar. Pera aí, cara. Como a gente tá muito muito em cima da hora, eu vou falar para ele pular o git. Mas se você quer que a gente entre mais nessa parte de devops, de git, etc, junto com Iá, comenta aqui.
Parte, é que a gente faz um outro episódio sobre isso.
Boa.
Vamos pular. Não é só escrever dois, né?
Não, era só escrever três também.
Também, mas eu gosto de ser redundante, tá certo? Porque quando tiver revolução das máquinas, elas estão legais comigo.
Aí vai falar isso daqui não. Esse cara ele trocava ideia, entendeu?
É, ele falava obrigado.
Isso gastava mais copo d'água.
Isso é.
Então agora o que que a gente tá, que que tá acontecendo aqui? A gente tá trabalhando com o cloud, ele tá gerando código de acordo com a especificação do Spring. Agora ele tá criando os métodos que a gente tá tava vendo aqui, ó.
Cara, só que você falou dos tokens. Tá gastando token para caramba, mano.
Por quê?
Quantos tem no gratuito?
Não sei. Eu uso pago.
Ah, e que se [ __ ] quem tiver no grátis, cara. Mas o importante é o resultado, né? Ó, aqui a gente tá com o Swagger vazio, sem IPI design, mas a gente, cara, olha a a mágica, a mágica disso. Já tem um serviço Spring Boot rodando com Swagger, sem nada implementado. Agora a gente tem aqui, ele tá criando os DTOs. Você sabe que eu ganho DTO, Gustavo?
Não, eu fui transfer object.
Eu fui DTO, lembra? Digital Transformation Officer.
Meu Deus do céu, verdade. Ele resolveu a questão do do Corse e é o data transfer object. Então ele tá criando uma interface onde eu consigo transferir informação do banco de dados para dentro do sprint do rest. Estamos no sprint do mano. Falta sete sprint, velho.
Rapidão.
Tá feliz, né, filho? Tá feliz. Isso aqui é mágica, cara. Isso aqui é maravilhoso.
Você tem que montar uma empresa disso, cara.
Já caí nesse golpe uma vez que você tá.
Tanto é que você tá agora, né, com a empresa que a gente criou, você tá agora fazendo uma aula dentro podcast que você criou, fazendo o bagulho que você gosta.
Olha aí, que loucura, né?
Caramba.
E eu tô desde as 6 da manhã de pé, mano.
6 horas da manhã, cara.
Tem filho, né? Tem escola.
Verdade. Tem isso, né? Verdade.
Então aqui, ó, gente, ele tá criando, ó.
Criou os agora eu quero ver. Abre lá para ver se ele vai mocar agora os bagulhos no swag.
Agora ele tá fazendo os controllers. O ditto é a camada de acesso aos dados.
Agora ele tá criando a camada dos controllers.
E que hora que ele vai começar escrevendo o swager lá que ele fez o smoke?
Quando ele começar aqui criando depois o controller. O controller é o que define Então abre lá. Vai vai atualizar em tempo real a tela ou não?
Não, cara. Ele tá fazendo. Espera.
Ah, ó, sua hora de validar. Docker compend.
Beleza. Então, a gente vai cancelar esse aqui. A gente vai rodar o compa né cancelar. Então agora a gente vai rodar novamente o doctor compose.
Aí ele vai gerar o build novamente.
Agora era o build do MOC, né, pra gente saber os métodos que ia gerar.
E essa é a parte que eu acho mais [ __ ] porque ele olhou a documentação do do da PO KPI, olhou o objetivo de negócio e ele modelou quais seriam os métodos que a gente deveria ter nessa API. E agora nós como arquitetos, vamos validar se a IPI design dele está correta, tá?
Então, ó lá, já tem 2 horas meia de episódio.
2 horas meia.
Aham.
[ __ ] que pariu.
É, senão não não vamos ter retenção também, né?
Então, ó, aqui, ó, nós temos usuários da hora.
Então eu tenho aqui os usuários, tenho autenticação, tenho a PI de Pokémons presentes, que são a a transferência, os decks.
E os decks.
Então o meu web service ele está preto, ele tá tá tá programado, tá pronto, pronto. Muito bem.
Mcado, não é verdade, né? Então o que eu posso dizer aqui é que o os métodos parecem OK. Eu tenho aqui os Pokémons, tenho Pokémon com ID. que aí me diz exatamente quais são. Eu tenho aqui os presentes, né? E eu tenho aqui os decks.
O que eu vou fazer agora é a gente gerar o moque das telas, tá? que é o Sprint 4, que é o Sprint 4. Depois disso, a gente vai comentar e vamos ver o que a gente segue, porque o episódio já tá muito grande. O principal ponto aqui que eu quero chamar atenção, que é para você que é arquiteto desenvolvedor, é você tem que chegar aqui e validar se esse PI design ele faz sentido.
E ok, estamos aqui. Tem o Dex, é um caso de uso muito simples, tem os presentes, tem os Pokémon. Parece sim, parece OK, parece OK. Então vamos seguir.
E aí ele vai agora pro mock do front end. Show, que é o ótimo momento pra gente, boa. Pra gente materializar a coisa para parar no protótipo.
Metamorfosin.
O objetivo desse primeiro ponto é, eu acho que o primeiro, o o o grande o grande aprendizado desse episódio é a questão da expansão do contexto.
Sim. e da construção seguindo a asos guadelines, né?
Isso, exatamente. Eh, a IA ela não destrói o processo de desenvolvimento de software, ela não destrói a a engenharia de software, ela acelera a engenharia de software.
Então, tudo que a gente fez aqui foi engenharia de software.
Não, tudo bem. Mas se eu, Gustavão Malandrão, quisesse pular todas as etapas e construir do que você fez, eu também conseguiria vir uma I. Mas você não teria o produto da qualidade que a gente tá produzindo?
Não. Sim, sim, sim.
Assim como você podia ser o sobrinho de alguém da empresa e fazer o RP da empresa.
É, não, é isso que eu tô te falando.
Você vai tirar 10, mas eu eu consigo tirar oito, hein?
Com aá oito.
Ah, consegue, consegue, mano. Nós estamos num nível.
O problema, Gustavo, eu tô impressionado quanto você toma de brija no seu episódio, mano. Eu vou começar a produzir o PPT, mano. Do céu, [ __ ] Você não toma cerveja. É que você não toma.
Mas, mano, você tomou quatro ou cinco, velho. Galera, quem acha que ele tem que parar de beber quando grava? Comenta aí.
[ __ ] mas quatro latinha é nada, velho.
Calma, calma, fela.
Mas, ó, o que eu quero dizer é o seguinte.
Se você produz um um produto sem qualidade, eu vou eu vou tentar reformular para não parecer babaca, tá?
Não é questão do efeito final que você quer, mas quando você fala sobre manutenabilidade e qualidade de software, você tem que falar sobre como isso pode ser mantido na linha do tempo.
Você não pode simplesmente entregar um software. Eu eu posso fazer um poker um pokdeck, por exemplo, desse aqui com quatro, cinco prompts no chatt. Posso, mas eu vou ter documentação para poder fazer manutenção. Pois eu vou conseguir sim. É que a aqui a gente tá fazendo um nível profissional comidade.
Exalente. Exatamente.
Mas se fosse a minha empresa, não estivesse criando um negócio, minha empresa pequena, eu preciso resolver logo e vamos nessa, daria.
Você conseguiria fazer, mas seria, estaria numa selada do [ __ ] Não, mas aí depois eu teria que usar tudo que foi construído mal e porcamente para rodar depois com as melhores práticas.
Exatamente. E E isso pode sair mais caro depois.
Sim. Sim. Não é que você tá defendendo aí a galera. Eu acredito nisso também, [ __ ] Cheio do [ __ ] Mas nós estamos chegando num nível que as pessoas vão ficar preguiçosos, mano.
Mas mas vão fazer nojeira. Tá bom, já acredito.
Vamos fazer merda.
Vai fazer merda, tá bom?
Você consegue fazer o Ah, vai lá no chat PT, com um pronto, você fala: "Me faz um Pok deck".
O objetivo aqui é mostrar como você documenta, sim. como você dá escala e como você reproduz o processo de engenharia de software junto com o processo de ar.
Agora me diz o seguinte, a gente prometeu algumas coisas no começo do episódio. Você prometeu, né, que você ia deixar o GitHub pro cara poder acessar.
Nossa, que você ia deixar o git pro cara acessar, vai tá na descrição do episódio.
Vai tá na descrição do episódio, público, tá? Ele vai ter acesso todo esse essa estrutura do projeto que a gente fez.
Sim. menos as chaves que a gente tem lá que o Git não vai deixar, certo?
Sim, já está na na própria premissa do projeto, tá? E o cara vai conseguir acessar o MD inicial de tudo que depois a gente fez o conhecimento expansível?
Sim.
Sim.
Então tudo isso vai tá na descrição do episódio.
Isso. Exatamente. Lembrando novamente, pessoal, existem frameworks que fazem isso de forma mais automatizada.
Existem frameworks que eh simulam squads, etc., que dão muito mais agilidade para isso, especializam os conteúdos, o Bimédia um tem tem outros frameworks que fazem isso de uma forma muito eficiente, mas o que eu quero mostrar aqui para vocês é engenharia de contexto.
Sim, como eu consigo planejar um contexto, expandir esse contexto e desse contexto gera código. Então, é um episódio que foi eu aqueles MDS eu tirei da cabeça pra gente mostrar exatamente como que eu consigo de uma semente expandir e daquela e dali virar um produto.
Muito bem. E aí, então, a gente vai parar aqui nos protótipos.
Uhum.
E o que que o cara vai ver no próximo episódio? da sprint de código pra frente.
A gente vai passar no protótipo de tela que é o sprint quatro, três ou quatro, eu acho.
É, nós estamos agora no três.
Isso, no três, né? Isso. Do sprint 3 pra frente, aí a gente vai mostrar como que o cloud vai gerar o resto do código baseado nas regras de negócio. Então, a gente consegue ter todo um processo de engenharia de software e arquitetura.
baseado em a que não é suposição, entendeu? E o que eu quero deixar claro para quem ouve o PBT é que o conhecimento ele continua sendo essencial para dizer para Iá o que ela tem que fazer.
Ô cara, quanto tempo a Ia tá rodando aqui para fazer splint? Umas 5 6 minutos.
Tá seis ali, ó lá. 6 minutos codando que nem doido aqui.
É, tá fazendo a página de login, de dash de detayos e admin.
Então, e quando ele fizer o log, onde que a gente vai ver as imagens prototipadas dentro do projeto?
Ele vai dar o RL pra gente poder acessar e a gente vai mostrar aqui agora como resultado final.
Bem, perfeito.
Então, vou aproveitar, já que a gente tá chegando no final do episódio, e eu trouxe um presente para você.
Meu Deus do céu.
Camisetas da Minimal Club. Fio egípcio.
Fio egípcio.
Fio egípcio. Não, não amassa. Eh, não, não deixa cheiro e é maravilhosa essa camiseta. Você vai ver você pra academia.
Valeu.
Você que tá fora de forma, voltar agora a forma.
Voltar a ser maromba de novo.
Isso. Marombinha. Obrigado. Minimal Club. Se você quiser comprar camisetas da Minimal Club, pretas, brancas, sapatos e e calças no formato feito e construído, acessa lá e compra com o cupom da cash que tem desconto.
Vamos deixar o cupom aqui na descrição do episódio, beleza?
Tudo bom?
Ó, estamos aqui. Ele já tá gerando o log. Isso aqui é uma coisa que é legal mostrar, ó.
Eh, e que o Vibe Code normalmente você não passa.
Por exemplo, você que é admirador do lobo, você não sabe o que aconteceu antes.
Então, ó, vou pegar aqui o sprint 2, que foi o anterior.
Eu tenho aqui toda uma documentação do que foi feito. Então, se algum momento eu pedir paraa outra agente de A para poder fazer uma uma modificação, etc., eu tenho aqui toda uma documentação do que ela do que ela fez. E aqui no sprint 3 eu tenho, ó, aqui, ó, ela define as páginas, rotas, eu tenho tudo documentado.
E isso facilita a manutenabilidade do software.
Por quê?
Eh, independente se eu tô trabalhando com Clou, com Gemini, eu tenho um documento que me diz o que que foi feito, onde foi feito, por quem foi feito, que é uma coisa que a gente como desenvolvia manualmente, cagava para isso.
Cagava para isso, sim.
Era muito o que tava na cabeça do cara, etc. Mas o agente de a ele precisa ter isso para ele poder ser assertivo, né?
Sim. E e se você tiver trabalhando com SPEG Design, sempre defina que a IA ela precisa, o que ela faz, ela tem que documentar. Isso é importante.
Cadê? Gerou.
Gerou. Vamos lá. Abra o local host.
Bora lá. Não rodou.
Eu tenho que rodar isso manualmente.
Vamos lá. Eu tenho que ir na pasta do front end, mas aí provavelmente eu vou abrir outro porque o backend tem que tá rodando, né?
Então eu vou lá no code base front end.
Aí eu tenho que dar um npn install. É isso. NPN install e o Runf.
NPN Install.
Vai instalar a aplicação, as dependências, etc.
E você que é um grande fã do Lovabo, hum, tudo que a gente tá tá fazendo aqui, ele é independente de Gemini, de Clou, de lovable. Eu não tenho nenhuma dependência. É código puro, eu rodo em qualquer lugar. É código como se eu tivesse sentado na minha casa. Mas se eu extrair o código do lobo no em outro servidor?
Talvez, talvez, mas não sei. Tem um erro aqui.
Tem vulnerabilidade.
Ah, não rodou. Ele não instalou. Só tem uns, só tem uns erros de segurança aqui.
O pessoal de de si, eu vou ignorar.
Ai, caramba.
Mas beleza. Agora n penev. Certo, galera. Tá. É, isso é um dos pontos do da da Mas é muito bom te mostrar isso, né? Porque a gente tem seis vulnerabilidades aig aqui e uma crítica.
E uma crítica.
Então, será que isso aqui iria pra produção?
Eu acho que não. Certo. Agora, como que a gente consegue tratar isso do ponto de vista de si de qualidade? Existem meios.
Quer saber? Comenta aqui que a gente que a gente consegue fazer. Ó lá. Vamos abrir lá. Vai, hein? Chegou a hora.
Ei, você recebeu um Pokémon de presente.
Já deu logo de cara aqui, ó.
Olha que beleza, [ __ ] Que incrível, mano.
O Ash, Ash, o Ash me mandou um Pokémon.
É, né? Eu vou fechar aqui porque eu não sei, mas ó, eu tenho aqui, isso aqui são telas que são mocadas, mocadas. Então isso não tem regra de negócio. Então o que a gente viu lá antes era como se eu receberia um presente. Isso aqui vai ser como vai ser o meu deck. Olha que da hora.
Vai em ver detalhes do Bubassar.
Olha que legal.
Ele vai mostrar aqui as estatísticas, etc. Eu vou poder enviar para um amigo, vou poder ele é meio PMDB ali, você viu?
PMDB é centrão.
Centrão. Centrão.
É Pikachu.
É, ele tem tem que com ele nem é tão veloz.
Aí, ó.
Mas, cara, a gente só documentou aonde estava a PI.
E aí, o que que eu vou mostrar para vocês aqui, ó?
Muito legal, mano.
No Code Base, que é onde está de fato o meu código, eu tenho todo o meu código front end, como desenvolvedor precisa, deve revisar.
Hum.
Eu não vou fazer isso aqui porque a gente tá num num ponto didático, né? Mas olha isso daqui. E é um código muito próximo do que a gente criaria. Existem algumas, alguns atalhos que você não tomaria como desenvolvedor e como um cara mais snior, que você pode corrigir e isso já é um grande eh atalho para você fazer o seu trabalho, entendeu?
Muito bem. Então isso aqui, cara, é ouro. Se você souber fazer isso da forma adequada, com o Pikachu em tela, encerra pra galera e diz o que a gente vai ver no próximo episódio.
Então, no próximo episódio, a gente vai colocar a nossa regra de negócio aqui, ó. O Squirt também é famoso, né?
Não, ele colocou os quatro [ __ ] do bagulho.
É, né? Você viu? Pois é.
Então, a gente vai continuar isso daqui.
A gente vai falar sobre DevOps, a gente vai falar sobre eh questões de infraestrutura também utilizando a a II.
A gente vai fazer code review, que é extremamente importante, porque qual a qualidade do código foi gerado aqui? Eu não sei. Ou eu reviso passo a passo manualmente, ou eu coloco uma IA para me ajudar para para fazer isso e também posso fazer isso.
Muito bem, né? Então, eh, se você gostou do que a gente tá, dessa introdução que a gente fez aqui de quase 3 horas de podcast, eh, deixa comentário aqui. Muita gente pediu pra gente mostrar isso hand zone. E, como eu disse, não é nada escrito na pedra, é um um quick start para você começar a trabalhar com engenharia de contexto. E vamos continuar, vamos terminar fazer o nosso deckzinho aqui.
Talvez eu até suba.
Por que na faz um deck do PPT não compila com os nossos usuários?
E de repente o Pokémon Iara, né?
Pokémon e exatamente, é isso aí. Então, obrigado para você que acompanhou a gente até aqui. Se você curtiu o episódio, deixa o comentário.
Dá aqui minha camiseta, [ __ ] Minha camiseta.
Se você curtiu o episódio, se você eh acha que a gente contribui com a sua vida profissional, você pode ser membro do PPT no CPIL. Se você não quer dar dinheiro pro Google, você pode contribuir de forma imediata. Sabe onde, Google?
No Pix.
Vai lá, pix@pptnoa, fala: "Porra, curti o episódio já com Pix?" Ah, eu tenho, tenho tenho meus meus meus meus ouvintes, meus ouvintes que são maravilhosos aqui, que ajudam a manter o PPT no.
Então, quem fizer um Pix premiado, Pix premiado, um Pix premiado, a gente vai definir um valor que no próximo episódio a gente vai dizer: "Quem acertar esse Pix, hã, leva um kit de cerveja".
Certo? Então, esse Pix funciona da seguinte forma.
Hum. É um Pix eh solidário.
Pixário até R$ 1. Então você tem você tem de zero a 99 centavos. No próximo episódio nós vamos Não, cara, tem que ser de 0 a R$ 99, pelo amor de Deus.
Não, mas aí tem muitas condições para Não, era R$ 99, mano.
Não tem 90. Se a gente conseguir 99 pic, mano, [ __ ] Não, ó. Vamos, vamos.
Tá, não vale centavos.
Não paga nem o Tá bom.
Tem que ser de 1 a R$ 99.
De 1 a R99. Quem chegar mais perto, certo, vai ganhar um kit de cervejas para tomar com a gente aqui no próximo episódio.
Boa.
Muito bem.
E vai sentar aqui com a gente.
Pix@pptãocompila.com.br.com.br.
BR.
Valeu, Gu. Obrigado. Vamos continuar esse episódio porque é um prazer aqui contribuir com vocês.
Valeu,
Episódios Relacionados
1h 42minOnStar: Carros conectados e a Revolução de Dados na GM
Rômulo Barbosa, José Pinheiro
27 de fev. de 2026
1h 41minEP 164 PPT Full editado
9 de fev. de 2025
1h 42minEP 153 pptnc full editado
31 de out. de 2024
1h 28minPPT não Compila EP147 Full
21 de set. de 2024
