en
· 3 min de leitura

A IA escreve o código. O sistema continua sendo seu.

O modelo digita mais rápido que você. Mas não responde pelo que acontece às 3 da manhã. Essa parte ainda é sua.

aiengineering

Hoje um modelo escreve a maior parte do código que eu escrevia à mão. Uso todos os dias e não pretendo voltar atrás. Mas tem algo no jeito como as pessoas falam disso que me incomoda: elas tratam o código como se fosse o produto. Nunca foi. O produto é o sistema, e o sistema é um conjunto de decisões sobre fronteiras, falha, dados, custo e responsabilidade. O modelo não é dono de nenhuma delas. Você é.

O código nunca foi a parte difícil

Nos projetos que auditei, as falhas que doeram raramente estavam numa função mal escrita. Estavam numa função escrita corretamente para a premissa errada. Um retry que era seguro numa leitura e catastrófico num pagamento. Um cache que funcionava bem até dois tenants compartilharem uma chave. Um consumer de fila que assumia uma ordenação que ninguém garantia. Nenhum desses é problema de digitação. Um modelo que escreve TypeScript impecável vai reproduzir cada um deles com prazer, porque a premissa mora fora do código, na cabeça de quem especificou a tarefa.

O que significa ser dono

Ser dono de um sistema é conseguir responder quatro perguntas sem abrir o editor. O que acontece quando essa dependência fica lenta? O que acontece quando isso roda duas vezes? Quem pode ver esse dado, e onde isso é garantido? Quanto custa cada unidade de trabalho com dez vezes a carga? Se você responde isso, o modelo escreve o código e você revisa contra as respostas. Se não responde, o modelo decide por você, em silêncio, e a decisão vai ser a média do que ele viu no treinamento, não a certa para o seu produto.

Onde o modelo ajuda e onde não ajuda

O modelo é excelente nas partes que já foram decididas. Dado um schema, ele escreve o repositório. Dado um contrato, escreve o client. Dada uma máquina de estados, escreve as transições e os testes. Ele é fraco, de um jeito perigoso porque parece confiante, nas partes que ainda não foram decididas: qual máquina de estados, qual contrato, quais invariantes importam, como a falha deve aparecer para o usuário. Essas partes eu ainda coloco no quadro branco antes de abrir um prompt.

Minhas regras de trabalho

  • Escrevo os invariantes antes de pedir código. Se não consigo dizer o que nunca pode acontecer, não estou pronto para gerar nada.
  • Todo módulo gerado passa pela revisão que o código de um júnior passaria, com atenção extra em tratamento de erro e fronteiras, porque é ali que o modelo chuta.
  • Teste gerado não conta como cobertura até eu ler e tentar quebrar.
  • O modelo nunca escolhe o modelo de dados, o modelo de consistência ou o modelo de auth. Ele implementa.
  • Se eu não conseguiria escrever aquilo sozinho, mais devagar, não coloco em produção. Posso usar para aprender, mas não para entregar.

O teste da auditoria

Este é o teste que aplico em qualquer time que me diz que a IA escreve a maior parte do código. Escolho um módulo e peço para o engenheiro que fez o merge explicar o que ele faz sob falha parcial. Não o que o código diz, o que o sistema faz. Quando ele consegue, a IA é um multiplicador e a base de código costuma estar saudável. Quando não consegue, encontrei a falha que ninguém tinha encontrado, e ela nunca está no código. Está na posse. O modelo deu velocidade e o time gastou essa velocidade em não entender. Essa troca está disponível para todo mundo agora, e é a pior do cardápio.

Use o modelo. Use muito. Depois fique na frente do quadro branco e seja capaz de desenhar o que ele construiu, porque quando quebrar às 3 da manhã, o modelo não está de plantão. Você está.