|
Neste artigo veremos algumas dicas de como escrever especificações para a IA. |


CLAUDE.md
ou
Agents.md — detalhando
seus padrões arquiteturais, comandos de build e regras de estilo. O agente lê
isso antes de começar e já joga dentro do seu padrão.A Mesma Função, Duas Especificações
Vamos pegar uma tarefa real do dia a dia: Criar um endpoint em ASP.NET Core Minimal APIs para exportar dados.
Veja a versão "preguiçosa" que a gente mais encontra por aí:
"Cria um endpoint aí no ASP.NET Core para exportar a tabela de logs em CSV.
Faz funcionar bem e rápido."
Se você ler isso com os olhos de uma IA
(que não vai te fazer perguntas para tirar dúvidas), o cenário é um
desastre:
Qual o delimitador e o encoding do CSV? Não especificado.
Quais colunas mapear do banco via Entity Framework Core? Desconhecido.
O que
acontece se não houver logs no período? Indefinido.
Como fica a segurança e a
autorização (Identity/JWT)? Não resolvida.
E se a tabela tiver 500 mil
registros? Vai dar um ToListAsync() e estourar a memória do servidor com
um OutofMemoryException? Palpite de qualquer um.
A IA vai fechar cada uma
dessas lacunas adivinhando. E, estatisticamente, ela vai errar o que você
queria.
Agora, veja a mesma tarefa, escrita fechando as lacunas com precisão cirúrgica:
Resultado: O endpoint GET /api/logs/export expõe o download de
um arquivo CSV com logs de erro do sistema.
Escopo: Apenas logs com
LogLevel = "Error". Colunas: Id, Timestamp, Message, Exception.
Não-objetivos: Não exportar logs de Information ou Warning. Não alterar o
esquema do banco de dados.
Restrições e Contexto: .NET 8/9; uso de
StreamWriter com IAsyncEnumerable (rendimento via EF Core com AsNoTracking())
para evitar carregar tudo na memória; delimitador de ponto e vírgula (;);
encoding UTF-8 com BOM; acesso restrito via Policy [Authorize(Roles = "Admin")].
Critérios de Aceitação:
Para 5 logs de erro encontrados, retorna o
arquivo com cabeçalho + 5 linhas de dados (Status 200).
Se não houver
logs de erro, retorna um arquivo CSV vazio contendo apenas o cabeçalho (Status
200).
Requisição sem token JWT válido ou sem a role "Admin" retorna
Status 403 (Forbidden) sem processar os dados.
O consumo de memória do
servidor deve ser constante (via streaming), sem dar spike mesmo ao exportar
100.000 registros.
Exemplo de saída:
| Id;Timestamp;Message;Exception 1024;2026-06-30T17:00:00Z;Failed to process payment;System.TimeoutException... |
Repare que a segunda versão não é absurdamente mais longa — ela só é precisa
onde a primeira foi omissa.
O foco foi no resultado e na arquitetura
correta (streaming via IAsyncEnumerable), sem tentar microgerenciar o loop
dentro do código.
Os não-objetivos cortaram o risco de
vir logs indesejados.
O "funciona bem" virou quatro
critérios testáveis e preto no branco.
Forçamos os caminhos de erro (sem
permissão) e o caso de lista vazia.
Definimos as restrições
da stack (.NET, EF Core com As No Tracking, delimitador).
Isso prova a
nossa tese: não é o tamanho do prompt que muda o jogo — é a quantidade de
lacunas que você fecha antes da IA começar a digitar.
Claro que, mesmo
uma especificação bem amarrada assim, raramente nasce 100% perfeita na primeira
tentativa. O próximo passo fundamental é saber como iterar e refinar o código
junto com o agente.
Como Iterar na Especificação (O Loop de
Refinamento)
Uma boa especificação não nasce pronta; ela
evolui em um ciclo vivo. Você escreve, a IA gera o código, os testes rodam e, se
algo quebrar, você ajusta a especificação, não apenas o código.
O
poder do fluxo em etapas: O estudo AlphaCodium provou que parar de usar
um prompt único e passar a usar um fluxo de trabalho em várias etapas (gerar,
testar, corrigir, refinar) fez a taxa de sucesso do GPT-4 saltar de 19% para 44%
em testes complexos.
Para não se perder nesse processo, guarde estas três
regras práticas:
1- A Especificação é Soberana
Se o
código gerado e a especificação divergirem, a especificação manda. Um teste
falhando geralmente não é um bug no código, mas sim um aviso de que sua
especificação esqueceu de prever alguma regra ou cenário real.
2-
Saiba quando NÃO escrever uma Spec
Não mate uma mosca com um canhão.
Correções simples de bugs, protótipos rápidos ou tarefas direto ao ponto não
precisam de uma documentação gigante. Use especificações completas para o que
realmente importa: fluxos complexos, segurança (autorização), pagamentos e
integridade de dados.
3- A palavra final é sempre Humana
Cuidado com a armadilha do "tá tudo verde". A IA pode dar a tarefa como
concluída e fingir que os testes passaram, mesmo deixando o código incompleto. A
verificação final e o carimbo de "pronto para produção" são sempre do
desenvolvedor.
O resumo: Antes de jogar o projeto no
colo da IA, use um checklist mental para fechar as lacunas da especificação. De
resto, use o loop de testes para lapidar o resultado!
Checklist de Especificação: A Linha de Defesa Antes do Código
Passar sua especificação por um checklist rápido antes de entregar para a IA
não é burocracia; é economia de tempo. Se o seu briefing não passar nesses
pontos, nem mande para o agente, pois o código vai voltar errado.
Aqui
está o checklist prático para você copiar, colar e usar no dia a dia:
[ ]
Cada critério de aceitação assume a forma (Dado/Quando/Então — contexto ->
evento -> resultado esperado) ou um equivalente.
[ ] Pelo menos um
critério cobre um caminho de erro.
[ ] Pelo menos um critério cobre um
caso vazio, de permissão ou de borda.
[ ] Um não-objetivo (non-goal) está
explicitamente declarado — o que esta mudança NÃO faz.
[ ] Para cada
critério, uma prova é definida (teste, log, captura de tela) — ANTES da
implementação.
[ ] Nenhum caminho para prova significa que o critério
está muito vago — volte e refine-o.
Trate Prompts e Specs como se fossem Código!
O segredo
para elevar o nível da equipe é tratar a especificação com o mesmo respeito que
você trata o código-fonte:
Coloque no Git: Versione suas
especificações e prompts.
Faça Spec Review: Revisar o
briefing antes de rodar a IA deve ser tão normal quanto fazer um Code Review.
Compartilhe Exemplos: Deixe specs boas e ruins circulando
no time para servirem de norte.
A barreira é psicológica, não
técnica: Um estudo da AWS mostrou que engenheiros aprenderam
especificação formal em poucas semanas e começaram a caçar bugs críticos assim
que o "formalismo assustador" foi traduzido para uma disciplina prática
do dia a dia.
O veredito final: Escrever uma
especificação animal exige exatamente a mesma precisão de pensamento que
escrever um código limpo e bem arquitetado. A especificação dá trabalho pelo
exato mesmo motivo que a torna tão valiosa: ela te obriga a pensar antes de
digitar.
E estamos conversados
..
"De sorte que somos embaixadores da parte de Cristo, como se Deus por nós
rogasse. Rogamo-vos, pois, da parte de Cristo, que vos reconcilieis com Deus."
2 Coríntios 5:20
Referências: