O código foi a parte fácil


Nos últimos meses construí um projeto pessoal usando Claude como principal ferramenta de desenvolvimento.

A ideia parecia simples:

Criar um bolão da Copa do Mundo onde os participantes fazem todos os palpites antes do torneio começar, como fazíamos em excel até pouco tempo atrás.

O software ficou pronto muito mais rápido do que eu imaginava.

Mas o mais interessante foram os aprendizados ao longo do caminho.

Alguns deles:

Testes são obrigatórios.

Em um momento eu decidi que iria ler todos os testes unitários gerados pelo Claude.

Foi quando descobri que ele estava colocando parte importante da lógica dentro do banco de dados.

Quando questionei, a resposta foi basicamente:

“Ah, vou mover para o código então. Fica mais fácil de testar.”

Touché.

Outro aprendizado: os testes encontraram muito mais problemas do que eu esperava.

Peguei:

  • casos que eu não tinha previsto
  • interpretações erradas das minhas instruções
  • regras que eu não tinha definido e o Claude simplesmente inventou
  • um bug que arredondava números decimais para inteiros sem nenhuma razão aparente

Outra coisa que aprendi foi o conceito de testes de mutação.

Não basta ter testes.

A pergunta é: os testes são bons?

Ferramentas de mutation testing alteram automaticamente o código para verificar se os testes detectam o problema.

Se os testes continuam passando, eles provavelmente não estão cobrindo o comportamento que deveriam.

Existem testes que parecem simples e são absurdamente difíceis.

Um exemplo foi validar a classificação dos grupos da Copa.

Empate em pontos. Saldo de gols. Gols marcados. Confronto direto.

Testar todas as combinações possíveis de quatro seleções foi muito mais complicado do que implementar a funcionalidade.

Usuários enxergam coisas que você não enxerga.

Mostrei a home para um amigo publicitário.

Ele bateu o olho e falou:

“A fonte está velha.”

Achei que fosse opinião.

Era um bug.

O CSS estava carregando errado.

Dar nome para as coisas continua sendo difícil.

Até hoje não sei qual é a melhor forma de explicar o produto.

É um bolão?

Um bolão raiz?

Um bolão até a final?

E encontrar um bom domínio então...

Achei que o problema seria desenvolver.

Acabei gastando muito mais tempo tentando explicar o que eu tinha desenvolvido.

Traduzir é fácil. Entender o mercado é difícil.

Como a barreira de implementação ficou muito menor com IA, uma das primeiras ideias que tive foi lançar o produto em vários idiomas.

Traduzir a interface seria trivial.

O problema apareceu antes.

Se eu já estava tendo dificuldade para explicar o produto no Brasil, como eu descobriria qual é o equivalente desse tipo de bolão em outros países? Como ele é conhecido? As pessoas jogam desse jeito? Existe demanda?

Perguntei para uma amiga argentina se esse tipo de bolão era comum por lá.

A resposta foi negativa. Meu research internacional terminou ali mesmo.

Foi uma boa lembrança de que IA reduziu drasticamente o custo de construir software.

Mas não reduziu na mesma proporção o custo de entender clientes e mercados.

Nem toda automação vale a pena.

Optei por validar os pagamentos via Pix manualmente.

Poderia automatizar?

Claro.

Mas para o volume esperado, a complexidade não compensava.

Foi uma boa lembrança de que a melhor solução nem sempre é a mais tecnológica.

IA gera landing pages muito rápido.

Usei IA para criar praticamente todas as páginas de SEO.

Li cada uma delas com atenção?

Não.

Poderiam ser melhores?

Provavelmente.

Mas também aprendi que SEO é um jogo de longo prazo.

As páginas foram publicadas quase dois meses antes da Copa para dar tempo de indexar.

E por último: os problemas mais perigosos são os de especificação.

Quatro dias antes do início da Copa um usuário me avisou que os cruzamentos dos 16-avos de final estavam errados.

O código estava funcionando exatamente como especificado.

O problema era a especificação.

Eu tinha interpretado errado uma parte do regulamento da FIFA.

O Claude não questionou.

Eu não reli o Anexo C.

E o erro passou.

Resultado:

Tive que reimplementar toda a lógica dos cruzamentos e avisar cerca de 30 pessoas que já tinham preenchido os palpites do mata-mata para revisarem tudo novamente.

Não foi uma experiência agradável.

Talvez essa tenha sido a principal lição do projeto.

IA reduz muito o custo da implementação.

Mas continua não substituindo entendimento do problema.

E, quando você entende o problema errado, ela implementa o erro com uma velocidade impressionante.

PS: Se você quiser testar o produto, ele está no ar em www.obolaodacopa.com.br

Leo Andreucci - CTO Mentor

Ex-VP Engineering @ Creditas ($4.8B). 20+ years building and scaling tech teams. Today, I help CTOs make better decisions.

Read more from Leo Andreucci - CTO Mentor

Durante los últimos meses construí un proyecto personal usando Claude como mi principal herramienta de desarrollo. La idea parecía simple: Crear una quiniela del Mundial donde los participantes hacen todos sus pronósticos antes de que empiece el torneo, como hacíamos en Excel hasta hace poco. El software estuvo listo mucho más rápido de lo que imaginaba. Pero lo más interesante fueron los aprendizajes a lo largo del camino. Algunos de ellos: Los tests son obligatorios. En un momento decidí...

Uma ideia muito forte do Uncle Bob sobre IA: “Sem restrições, os agentes fazem qualquer coisa.” Por isso ele insiste muito na criação de “physical barriers”. Ou seja: mecanismos concretos que limitam o que a IA pode fazer dentro do sistema. O checklist que ele sugere é interessante: unit tests com cobertura extremamente alta (os agentes usam os testes para entender o comportamento esperado do sistema) acceptance tests escritos em Gherkin/BDD (testes legíveis por humanos funcionando como...

Una idea muy fuerte de Uncle Bob sobre IA: “Sin restricciones, los agentes hacen cualquier cosa.” Por eso insiste mucho en la creación de “physical barriers”. Es decir: mecanismos concretos que limitan lo que la IA puede hacer dentro del sistema. El checklist que él sugiere es interesante: unit tests con cobertura extremadamente alta (los agentes usan los tests para entender el comportamiento esperado del sistema) acceptance tests escritos en Gherkin/BDD (tests legibles para humanos...