Qual o nível certo de detalhe em uma spec (e quando especificar demais atrapalha)?

nível de detalhe da spec: o que vai na especificação e o que fica pra implementação
Resposta rápida

O nível de detalhe da spec certo é aquele que descreve o que o software precisa fazer e por quê, e para antes de dizer como fazer. Decisão de produto (objetivo, cenários, regras de negócio, critérios de aceite) mora na spec; linguagem, biblioteca, nome de função e estrutura de pastas ficam com quem implementa. O próprio Spec Kit, da GitHub, separa isso em comandos diferentes: o /speckit.specify cuida do o quê e do por quê, e o /speckit.plan é onde o detalhe de implementação pertence. Especificar além disso engessa a implementação e vira documento que ninguém consegue revisar

Já apareceu por aí uma spec de cerca de 1.300 linhas de Markdown pra uma mudança de uma linha de código, e isso não é piada de internet: é caso documentado 😅

O Spec-Driven Development nasceu pra resolver um problema real, aquele em que a IA chuta o stack, chuta as features, chuta o design e te entrega um projeto que não tem nada a ver com o que você pediu

Só que tem um extremo oposto pouco discutido: a spec detalhada DEMAIS

Ela engessa a implementação, dobra o trabalho de revisão e custa mais tempo do que economiza

Bora ver onde cortar?

O que vai na spec e o que fica com quem codifica

A régua mais simples que existe pro nível de detalhe da spec é essa aqui: separar decisão de produto de decisão de implementação

Decisão de produto (vai na spec) Decisão de implementação (fica com quem codifica)
Objetivo do usuário e por que a feature existe Linguagem, framework e biblioteca
Cenários de uso e fluxo esperado Nome de função, classe e variável
Regras de negócio Estrutura de pastas e arquivos
Critérios de aceite verificáveis Algoritmo interno e estrutura de dados
Casos de borda reais (que acontecem mesmo) Padrão de projeto adotado
Formação Claude Code
Formação Recomendada

Formação Claude Code

Domine Claude Code do absoluto zero até o avançado

  • 120 aulas
  • 4 projetos
  • 9h 45min

Essa divisão não é invenção minha, ela está no desenho da ferramenta mais conhecida do método

O Spec Kit é um toolkit mantido pela própria GitHub, descrito como "Toolkit to help you get started with Spec-Driven Development"

O fluxo central dele é Spec → Plan → Tasks → Implement, e cada fase cospe um artefato Markdown que alimenta a próxima

E aqui vem a parte que interessa: o comando de especificação diz, com todas as letras, pra focar no "what and why, the user-facing behavior and goals, not the tech stack, which belongs in /speckit.plan"

Já o comando de plano é descrito como "this is where implementation detail belongs"

Ou seja, o detalhe técnico não é proibido, ele só tem endereço

O prompt padrão de especificação é ainda mais direto: "Focus on user goals, scenarios, and acceptance criteria. No implementation details."

E se eu já misturei tudo em um documento só?

Quebra em dois

O blog de engenharia da Allegro recomenda exatamente isso: um documento com os requisitos de produto e funcionais (o quê, sem dependência técnica nem detalhe de implementação) e outro com os requisitos técnicos e não funcionais (o como)

É a mesma ideia da separação specify e plan, só que sem ferramenta nenhuma no meio

Se você conhece a diferença entre um documento de requisitos e um documento de arquitetura, é isso, com outro nome e com a IA lendo os dois

Sinais de que a sua spec passou do ponto

O sintoma número um é constrangedor de tão óbvio: a spec ficou maior que a mudança

François Zaninotto, da Marmelab, documentou um caso em que uma feature de exibir a data atual gerou cerca de 1.300 linhas de especificação em Markdown usando Spec Kit

A descrição dele foi certeira: "a one-line fix wrapped in a six-phase ceremony and 1,300 lines of Markdown"

O artigo saiu com o título "Spec-Driven Development: The Waterfall Strikes Back" e o argumento é esse mesmo, o método ressuscita a documentação pesada antes do código, num eco da era Waterfall

Os outros sintomas listados por ele são fáceis de reconhecer no seu próprio arquivo:

  • repetição: a mesma regra reescrita em três seções diferentes
  • casos de borda imaginários, que ninguém nunca viu acontecer
  • refinamento excessivo, aquele parágrafo que só existe porque o modelo tinha espaço pra escrever
  • revisão que dobra de trabalho: agora tu revisa a spec E o código

Por que isso acontece?

Porque quando a spec desce ao nível de código, ela deixa de ser spec

O blog da Allegro coloca assim: ao especificar demais, o agente até implementa com muita precisão, mas em algum ponto "the line between specification and code starts to blur and the specification loses its value"

Sacou o problema? Se o documento descreve o como com a mesma precisão do código, ele virou uma segunda cópia do código, escrita em português e sem compilador pra dizer que ela está errada

Como consertar e como prevenir:

O conserto é bruto e funciona: passa o olho linha a linha e corta tudo que responde "como"

O que fica de pé é o critério de aceite verificável, aquela frase que outra pessoa consegue ler e dizer se o resultado está certo ou errado

Pra prevenir, o caminho não é escrever menos prosa vaga, é escrever menos prosa e mais estrutura

Times que estão experimentando SDD relatam justamente que os formatos tradicionais de requisito são vagos demais, e por isso adotam formatos estruturados como EARS (Easy Approach to Requirements Syntax), máquinas de estado e tabelas de decisão

Uma tabela de decisão de dez linhas mata três parágrafos de "o sistema deverá considerar os casos em que"

E vale reconhecer que acertar esse ponto é difícil pra todo mundo: o Technology Radar da Thoughtworks lista spec-driven development como técnica e registra que desenvolvedores e líderes de engenharia lutam pra achar o equilíbrio entre planejar demais e planejar de menos, a ponto de algo ir pra produção sem ninguém entender como funciona ou sem testes

Quando vale detalhar e quando a spec é overhead

A pergunta não é "quanto detalhe", é "detalhe pra qual tipo de trabalho"

Tarefa leve: SDD é exagero

A Allegro é explícita nisso: pra tarefas leves e de baixa complexidade, o SDD é overhead desnecessário

O exemplo citado é adicionar um campo novo em uma API

Nesse caso o método provavelmente é exagero e só complica uma tarefa simples

Se tu já sabe o arquivo, a linha e o efeito, escrever seis artefatos antes é cerimônia

Mudança pequena com alguma incerteza: plan mode resolve

Tem um meio termo bem mais barato que um fluxo completo de spec

No Claude Code existe o plan mode, em que o Claude pesquisa e propõe as mudanças sem editar o código-fonte

Tu chega nele ciclando os modos de permissão com Shift+Tab, ou prefixando um prompt único com /plan

Dentro do modo, o Claude lê arquivos e roda comandos de exploração, escreve um plano, e não edita o código

Seguindo com o Shift+Tab tu sai do modo sem aprovar o plano

Detalhe importante pra não se perder: o Shift+Tab cicla entre os modos de permissão durante a sessão, na ordem default → acceptEdits → plan (isso no CLI; nas versões VS Code, Desktop e claude.ai existe um seletor de modo)

Quer dizer: saindo do default, o plan mode não está no primeiro toque, tu passa pelo acceptEdits antes

Isso conversa direto com a documentação oficial de boas práticas do Claude Code, que recomenda um fluxo de explorar, planejar, implementar e commitar

Quer dizer: planejar antes de codar continua valendo, mas planejar não é sinônimo de gerar oito arquivos de Markdown

Se tu ainda está decidindo em qual dos dois mundos o seu projeto cai, escrevi um comparativo direto sobre quando usar spec ou vibe coding

Sistema de produção com vida longa: escolhe o nível de rigor

Aqui a spec deixa de ser opcional, e a discussão vira o quanto ela manda no código

Um artigo acadêmico no arXiv, "Spec-Driven Development: From Code to Contract in the Age of AI Coding Assistants" (arXiv 2602.00180), formaliza três níveis de rigor:

  1. spec-first: a spec semeia a geração inicial e o código pode divergir depois
  2. spec-anchored: a spec é mantida junto do código durante a vida do sistema, com testes garantindo o alinhamento
  3. spec-as-source: humanos editam só a spec e a máquina gera todo o código

O spec-anchored é apontado como o ponto de equilíbrio pra maioria dos sistemas em produção

Faz sentido, né? É o único dos três em que existe um mecanismo automático (os testes) dizendo se a spec e o código ainda combinam

No spec-first a spec vira folclore conforme o código anda sozinho, e o spec-as-source cobra um nível de detalhe altíssimo justamente porque nada mais além dela é editável

O que eu vi na prática usando SDD

No vídeo do canal eu montei um gerador de QR code seguindo o método, executando por etapas: setup, autenticação e a funcionalidade principal, cada uma pedida separadamente

A parte que mais me impressionou foi a autenticação: com a tarefa já escrita na spec, a IA implementou em cerca de 2 minutos

E os prompts ficaram ridículos de curtos, do tipo "lê esses arquivos e executa a tarefa X"

Esse é o ganho real do detalhe bem colocado: o esforço todo fica no início, e as etapas seguintes viram algo previsível e sequencial

Uma coisa que eu recomendo mesmo assim é ser explícito no prompt em vez de implícito, mesmo quando o modelo provavelmente entenderia sozinho, só pra garantir que ele PARE na tarefa que você pediu

Onde eu vi o custo aparecer:

Especificar não é de graça

A etapa de planejamento consome tokens a mais, porque o modelo raciocina mais pra produzir algo cuidadoso

Por causa disso, o arquivo de contexto do projeto eu gerei de forma sucinta, só com o conhecimento condensado e referências aos outros documentos, pro modelo gastar menos token toda vez que lê aquilo

Repare que isso é o oposto de inchar a spec: quanto mais o documento se repete, mais caro fica CADA execução seguinte

E tem caso em que simplesmente não compensa: projeto pessoal que ninguém vai usar é queima de token

A régua que eu uso pra decidir é grosseira e resolve: se o projeto passa de três prompts, ou se envolve autenticação, pagamento, usuário admin e comum e dashboard, provavelmente precisa de spec

E o outro lado, sem spec nenhuma?

O oposto é o projeto sem base: sem planejamento, a IA escolhe stack, features e design por conta própria, e o resultado destoa do que você queria

O problema disso não aparece no dia um, aparece na escala

O consumo de tokens sobe feio quando uma funcionalidade nova obriga a regra de negócio inteira a mudar

E decisão ruim tomada no começo faz o projeto travar depois em coisa simples, mesmo tendo avançado rápido nos primeiros dias

Aplicação simples e projeto pessoal funcionam sem spec numa boa, o gargalo aparece quando a intenção é comercializar e crescer

Quem não é técnico sai em desvantagem nas decisões de arquitetura, isso é fato, e dá pra apoiar essas escolhas na IA, com a ressalva honesta de que o resultado não equivale ao de um arquiteto experiente

No vídeo acima eu mostro o fluxo completo do método na prática, do documento até a implementação

Conclusão

O nível de detalhe da spec tem um ponto de parada bem definido: escreva até o ponto em que outra pessoa (ou a IA) conseguiria verificar se o resultado está certo, e pare ali

Tudo que vem depois disso é decisão de implementação disfarçada de requisito, e é ela que engessa quem codifica, borra a linha entre spec e código e faz a revisão dobrar

O próximo passo é bem prático: pega a última spec que você escreveu, marca cada linha como produto ou implementação, e move a segunda metade pro plano

Aposto que o arquivo encolhe pela metade e não perde nada de valor 😀

até o próximo post!

Perguntas frequentes

Qual é o nível de detalhe da spec ideal antes de partir pra implementação?

Não existe número mágico de linhas, o critério é funcional: a spec descreve objetivo, cenários e critérios de aceite verificáveis, e para por aí. No caso documentado por François Zaninotto, uma feature de exibir a data atual gerou cerca de 1.300 linhas de Markdown pra uma mudança de uma linha, sinal claro de que passou do ponto.

Qual a diferença entre a spec e o plano técnico no Spec-Driven Development?

No Spec Kit, a especificação foca no ‘o quê’ e no ‘por quê’ (comportamento visível pro usuário e objetivo), enquanto o stack técnico e o detalhe de implementação pertencem ao plano. O próprio prompt padrão do comando de especificação instrui: ‘Focus on user goals, scenarios, and acceptance criteria. No implementation details.’

O que é o nível spec-anchored e por que ele é considerado o equilíbrio ideal?

É um dos três níveis de rigor descritos no artigo acadêmico ‘Spec-Driven Development: From Code to Contract in the Age of AI Coding Assistants’ (arXiv 2602.00180). No spec-anchored, a especificação é mantida junto do código durante a vida do sistema, com testes garantindo o alinhamento, e o artigo aponta esse nível como o ponto de equilíbrio pra maioria dos sistemas em produção.

O que é o formato EARS e quando ele ajuda na spec?

EARS (Easy Approach to Requirements Syntax) é um formato estruturado de requisito, citado ao lado de máquinas de estado e tabelas de decisão por times que acham os formatos tradicionais vagos demais. Ele ajuda justamente quando a spec estaria virando prosa solta e repetitiva: uma tabela de decisão substitui parágrafos inteiros de ‘o sistema deverá considerar os casos em que’.

Vale a pena rodar o Spec Kit pra uma tarefa pequena, tipo adicionar um campo numa API?

Pela avaliação do blog de engenharia da Allegro, não. Pra tarefas leves e de baixa complexidade, o SDD é overhead desnecessário e o exemplo citado por eles é exatamente esse: adicionar um campo novo em uma API, caso em que o método é considerado exagero.

Existe uma alternativa mais leve que uma spec completa pra mudanças pequenas com alguma incerteza?

Sim, o plan mode do Claude Code. Nele o Claude pesquisa o código e propõe as mudanças sem editar nada, e dá pra chegar nele ciclando os modos de permissão com Shift+Tab (a ordem no CLI é default → acceptEdits → plan) ou prefixando um prompt único com /plan, sem passar pelos seis artefatos de um fluxo completo de Spec Kit.




Escrito por | Matheus Battisti

Matheus Battisti
Fundador da Hora de Codar

Programador apaixonado pelo mundo das tecnologias, sempre buscando em aprender e se aprofundar em linguagens, frameworks e o que mais for necessário para executar um bom trabalho. Agora tem uma nova missão que é de passar seu conhecimento adiante para formar novos programadores e especializar mais os que já são.

Subscribe
Notify of
guest

0 Comentários
Oldest
Newest Most Voted

Formações

Formação Vibe Coding

Formação Vibe Coding

Do Prompt ao Produto: Crie Software Real com IA

  • 474 aulas
  • 20 projetos
  • 39h 27min

Blog | Mais populares