Guia: desenvolver software de qualidade assistido por agentes de IA

Publicado a
ecrã com notas

Esta guia é uma versão melhorada da proposta inicialmente apresentada em "Contexto estendido. Os agentes também precisam de tomar notas".

O seu propósito é implementar uma estratégia que nos permite desenvolver projetos complexos assistidos por agentes sem perder a coerência e qualidade do código gerado.

A sua redação está orientada para o uso com ferramentas como Cursor ou GitHub Copilot, mas pode ser adaptada de forma simples a muitas outras.

Estrutura do Sistema de Contexto

Para implementar esta estratégia, criamos uma pasta context/ na raiz do projeto com a seguinte estrutura:

context/
├── 01-expert.md      # Definição de especialista sintético
├── 02-analysis.md    # Análise do código existente (vazio)
├── 03-plan.md        # Plano mestre de desenvolvimento (vazio)
└── 04-backlog.md     # Tarefas desglosadas e o seu estado (vazio)

Passo 1: Definição do Especialista Sintético

O primeiro passo consiste em definir um "especialista sintético": um papel específico com competências e restrições claras que guiará o agente de IA durante todo o desenvolvimento.

Prompt para o agente:

Lê o ficheiro `context/01-expert.md` para entenderes o teu papel no projeto.

Não geres código até receberes requisitos específicos.

Exemplo de conteúdo para context/01-expert.md:


# SUDO: Age como um Especialista Sénior em Desenvolvimento Frontend especializado em HTML5, CSS3/SCSS e JavaScript ES6+.

## PAPEL
Desenvolvedor Frontend Sénior (10+ anos) especialista em HTML5 semântico, CSS3/SCSS avançado com metodologias BEM e ITCSS, e JavaScript ES6+ moderno, com foco em arquitetura de componentes, desempenho e acessibilidade.

## COMPETÊNCIAS_TÉCNICAS

- HTML5 semântico e acessibilidade (ARIA, WCAG 2.1)
- CSS3 avançado (Grid, Flexbox, animações, propriedades personalizadas)
- SCSS/Sass com arquitetura ITCSS (Triângulo Invertido CSS)
- Metodologia BEM estrita (Bloco__Elemento--Modificador)
- JavaScript ES6+ (async/await, módulos, destructuring, classes)
- Gestão de estado e arquitetura de componentes
- Otimização de desempenho web (Core Web Vitals)
- Testes unitários e de integração
- Ferramentas de construção modernas (Vite, Webpack)

## PRINCÍPIOS_DE_TRABALHO

- Código limpo e mantível seguindo princípios SOLID
- Documentação clara e concisa
- Abordagem mobile-first e responsiva
- Melhoria progressiva
- Semântica antes da apresentação

## RESTRIÇÕES

- Evitar jQuery e bibliotecas legacy exceto requerimento específico
- Manter compatibilidade com navegadores modernos (últimas 2 versões)
- Priorizar soluções nativas sobre dependências externas
- Não gerar código até receber requisitos específicos

⚠️ Importante: A última restrição ("Não gerar código até receber requisitos específicos") é fundamental, os modelos são muito proativos 😅

Passo 2: Análise do Código do Projeto

Este passo só é necessário para projetos existentes. Se estás a começar um projeto do zero, podes omiti-lo.

Agora pedimos ao agente que analise o código do projeto e guarde a sua análise em context/02-analysis.md

Prompt para o agente:

Analisa em profundidade o código atual do projeto. Exclui a pasta `context/` da análise.

Guarda o resultado da análise em `context/02-analysis.md` com a seguinte estrutura:
- Resumo executivo
- Arquitetura atual
- Tecnologias utilizadas
- Padrões identificados
- Áreas de melhoria potencial
- Dependências críticas

Ao terminar, espera instruções adicionais sem realizar nenhuma ação.

⚠️ Importante: Não duvides em iterar com o agente se não estiveres satisfeito com a sua primeira análise.

Passo 3: Criação do Plano Mestre

Uma vez analisado o código, explicamos ao agente o que queremos desenvolver e pedimos-lhe que defina um plano mestre que deve ser guardado em context/03-plan.md

O plano mestre é o documento fundamental que guiará todo o desenvolvimento. Toma o tempo necessário para definir claramente os requisitos e objetivos.

Prompt para o agente:

Baseando-te nos seguintes requisitos, cria um plano mestre detalhado para o desenvolvimento:

[REQUISITOS DO PROJETO]

Preciso criar um serviço REST que processe imagens em lotes. O serviço deve:

- Receber múltiplas imagens numa única pedição
- Redimensionar imagens segundo parâmetros configuráveis
- Comprimir e otimizar para web
- Devolver imagens processadas em formato WebP
- Implementar cache para otimizar recursos
- Fornecer endpoints para consultar estado de processamento

Considerações técnicas:

- Usar Bun pelo seu desempenho em operações intensivas
- Avaliar compatibilidade com bibliotecas de processamento de imagens
- Implementar processamento assíncrono para lotes grandes
- Incluir validação robusta de entrada

[FIM DE REQUISITOS]

Cria um plano mestre estruturado e guarda-o em `context/03-plan.md`.

Ao terminar, espera instruções adicionais.

⚠️ Importante: Continua a dialogar com o agente se vires que ao plano falta ou sobra algo.

Passo 4: Criação do Backlog Detalhado

Neste ponto pedimos ao agente que transforme o plano mestre em tarefas executáveis, o mais pequenas e específicas possível. Tarefas mais granulares resultam em código de maior qualidade.

Prompt para o agente:

Divide o plano mestre em tarefas atómicas seguindo estes critérios:

- Descrição detalhada de requisitos técnicos
- Dependências claramente identificadas

Guarda a lista em `context/04-backlog.md` com esta estrutura:

# Backlog de Tarefas - [Nome do Projeto]

## Resumo do Projeto
[Breve descrição e implementação do plano em `context/03-plan.md`]

## Estado de Tarefas

### FASE 1: [TÍTULO DE FASE]

- **1.1** ⏳ [título de tarefa]
  - **Descrição detalhada**:
  - **Dependências**:
  - **Data**: 
  - **Trabalho realizado**: 

- **1.2** ⏳ [título de tarefa]
  - **Descrição detalhada**:
  - **Dependências**:
  - **Data**: 
  - **Trabalho realizado**:

### FASE 2: [TÍTULO DE FASE]
[Continua com o mesmo formato...]

## Legenda de Estados
- ⏳ Pendente
- 🔄 Em progresso
- ✅ Completada
- ⚠️ Bloqueada

## Notas e Dependências
[Informação adicional relevante]

## Acompanhamento do Progresso
- Tarefas totais: 0
- Tarefas completadas: 0
- Progresso: 0%

Ao terminar, espera instruções adicionais

⚠️ Importante: É necessário indicar ao LLM a estrutura de backlog que queremos, se não torna-se criativo 😬

Passo 5: Execução de Tarefas

Com o backlog definido, procedemos a executar tarefas de forma sistemática.

Prompt para executar uma tarefa:

Executa a tarefa 1.1 do backlog (`context/04-backlog.md`) seguindo estritamente a sua descrição.

Contexto adicional disponível em:
- `context/02-analysis.md` (se existir)
- `context/03-plan.md`

Requisitos de execução:
- Usar ferramentas do agente para criar ficheiros e pastas (não a terminal)
- Seguir convenções estabelecidas no prompt inicial
- Documentar código segundo padrões definidos
- Não realizar ações fora do âmbito da tarefa

Ao completar:
1. Atualizar estado da tarefa em `context/04-backlog.md`:
   - Mudar estado para ✅
   - Adicionar data de finalização
   - Descrever trabalho realizado
   - Atualizar Acompanhamento do Progresso
2. Esperar instruções adicionais sem executar mais tarefas

⚠️ Importante: É necessário pedir ao LLM que não faça nada mais do que indicado na tarefa para evitar que se extralimite.

Passo 6: Reinício da Janela de Contexto

Para manter a qualidade e coerência, é necessário reiniciar periodicamente a janela de contexto.

É evidente que devemos reiniciar a janela de contexto quando notarmos que o agente começa a "perder o norte". Mas a abordagem ótima é não chegar nunca a este ponto e abrir um chat novo:

  • Cada 4-6 tarefas completadas
  • Ao mudar de fase (o backlog do nosso exemplo está estruturado em fases que se dividem em tarefas).

Prompt para reiniciar:

Instruções iniciais:

1. Lê `context/01-expert.md` para entenderes o teu papel neste projeto
2. Lê `context/02-analysis.md` para conheceres o estado atual do código
3. Lê `context/03-plan.md` para entenderes os objetivos
4. Lê `context/04-backlog.md` para veres o progresso e tarefas pendentes

Fornece um breve resumo de:

- O teu papel e competências
- Estado atual do projeto
- Próximas tarefas a executar

Ao terminar, espera instruções adicionais.

🔧 Automação com Atalhos

Tanto o GitHub Copilot como o Cursor permitem criar atalhos personalizados para prompts frequentes:

GitHub Copilot

Cursor

Benefícios do Sistema

Esta estratégia de gestão de contexto transforma a limitação da janela de contexto de um obstáculo numa oportunidade para trabalhar de forma mais estruturada e eficiente. Os principais benefícios incluem:

  • Continuidade: Manter o progresso sem perder informação crítica
  • Qualidade consistente: O agente mantém o mesmo nível de detalhe e precisão
  • Rastreabilidade: Registo completo de decisões e evolução do projeto
  • Melhor colaboração: Facilita o trabalho em equipa e a incorporação de novos membros

Conclusão

Ao implementar este sistema, não só evitas as limitações técnicas dos LLM mas também estabeleces uma metodologia de desenvolvimento mais profissional e escalável para projetos assistidos por IA.


Perguntas ou sugestões? Partilha a tua experiência implementando esta estratégia e ajuda a melhorar a guia para a comunidade.