Da Escrita de Código à Engenharia de Sistemas de IA
O papel do engenheiro de software mudou drasticamente. Passamos da era do desenvolvimento puramente manual para um cenário onde a Inteligência Artificial Generativa codifica em alta velocidade. No entanto, delegar autonomia a modelos probabilísticos exige novas disciplinas técnicas para garantir previsibilidade, governança e qualidade arquitetural.
Hoje, as duas disciplinas mais críticas para o desenvolvedor moderno são a Harness Engineering (Engenharia de Aparatos de Controle) e a Compound Engineering (Engenharia de Sistemas Compostos).
Abaixo, exploramos o que são esses conceitos e como eles redefinem a nossa profissão.
1. Harness Engineering: O Controle Populacional da IA
O conceito de Harness Engineering foi consolidado por Birgitta Böckeler no artigo "Harness Engineering for Coding Agent Users", publicado no portal de Martin Fowler. A premissa fundamental é traduzida na fórmula:
O harness (ou arreio/aparato de suporte) é a estrutura externa construída pelo desenvolvedor para mitigar a natureza não-determinística dos Large Language Models (LLMs). Em vez de microgerenciar o código gerado linha por linha, o engenheiro projeta o sistema que guia e valida o agente de IA.
O harness opera através de duas frentes e dois modos de execução principais:
Guias (Feedforward) vs. Sensores (Feedback)
Guias (Feedforward): Controles estáticos injetados antes da ação do agente. Incluem prompts de contexto estruturados, padrões de design do projeto e restrições arquiteturais. Eles aumentam a probabilidade de o código nascer correto.
Sensores (Feedback): Mecanismos que observam a saída do agente, capturam falhas e injetam mensagens de erro de volta no loop para que a IA se auto-corrija (ex: a saída de um linter ou erro de compilação formatado especificamente para consumo do modelo).
Execução Computacional vs. Inferencial
Computacional (Determinística): Executada via CPU. É rápida, barata e 100% confiável. Envolve checadores de tipo, testes unitários e testes de arquitetura (como ArchUnit). Deve rodar em cada iteração do agente.
Inferencial (Probabilística): Executada via GPU/NPU. Utiliza estratégias de "LLM como juiz" para avaliar semântica, legibilidade ou intenção de negócio. É mais cara e lenta, sendo empurrada para etapas posteriores (como a esteira de CI/CD).
A eficiência do harness depende da "harnessabilidade" da base de código: sistemas modulares e fortemente tipados possuem propriedades nativas que facilitam o controle (ambient affordances), enquanto sistemas legados com alta dívida técnica impõem forte resistência ao isolamento e validação automatizada de agentes.
2. Compound Engineering: A IA Nativa e o Efeito Composto do Conhecimento
Enquanto o harness foca no controle estrutural e na validação em tempo de execução, a Compound Engineering (Engenharia de Sistemas Compostos) redefine a forma como a base de código e a IA evoluem juntas. Na engenharia de software tradicional, o acúmulo de novas funcionalidades gera inevitavelmente dívida técnica, tornando o sistema progressivamente mais complexo e difícil de manter.
A Compound Engineering inverte esse paradigma. Trata-se de uma abordagem de desenvolvimento AI-native onde cada unidade de trabalho entregue (seja a correção de um bug ou a implementação de uma feature) serve como insumo para tornar o desenvolvimento futuro mais rápido, limpo e previsível. Em vez de uma IA que gera linhas de código isoladas e esquece o contexto no prompt seguinte, o sistema opera sob um modelo de memória persistente, que aprende ativamente com o histórico do repositório.
O Ciclo de Trabalho Fundamental (The Core Workflow Loop)
Esse processo de capitalização do conhecimento não acontece por acaso; ele é sustentado por um ciclo contínuo e iterativo dividido em cinco etapas claras:
Brainstorm: O engenheiro humano e o agente de IA definem colaborativamente os requisitos, o escopo e os critérios de aceitação para a tarefa atual.
Plan (Planejamento): A IA separa a fase de pesquisa da fase de implementação. Ela analisa o histórico do repositório, identifica dependências e restrições existentes e gera um plano técnico detalhado passo a passo antes de escrever a primeira linha de código.
Work (Execução): O agente executa o plano técnico. Ele interage com os sistemas necessários, escreve o código, roda os testes iniciais e ajusta a implementação de forma autônoma.
Review (Revisão): O código resultante é confrontado e analisado contra as melhores práticas do próprio repositório para garantir legibilidade, segurança e coesão arquitetural.
Compound (Capitalização): Esta é a etapa que dá nome à disciplina. Após a conclusão da tarefa, a IA destila e sintetiza os aprendizados gerados (padrões de design bem-sucedidos que foram criados, regras de negócio descobertas, restrições arquiteturais mapeadas ou a causa raiz de um bug corrigido) e injeta esse conhecimento estruturado de volta em uma base de conhecimento ou wiki persistente do sistema.
Nas próximas sessões de desenvolvimento, as ferramentas de IA não começarão do zero: elas lerão essa memória atualizada para guiar suas próximas decisões.
Por que a Memória do Sistema Muda o Jogo?
O grande gargalo no uso de ferramentas de IA generativa hoje é a necessidade de contextualização constante; engenheiros perdem tempo precioso explicando repetidamente as regras de arquitetura ou as nuances da base de código para seus copilotos de IA. Ao introduzir uma memória persistente, a Compound Engineering ataca diretamente essa fricção:
Eliminação permanente de bugs: Quando um bug complexo é corrigido, a regra de prevenção daquela falha específica é absorvida pela memória do sistema. Na próxima tarefa, o agente consulta essa restrição e bloqueia proativamente o reaparecimento do mesmo erro.
Hiper-personalização de padrões técnicos: O sistema aprende e codifica as preferências exatas da sua equipe — sejam as convenções do seu framework (como peculiaridades de Rails ou ecossistemas frontend), regras específicas de estilo ou os padrões customizados de testes unitários. O código gerado passa a parecer escrito por um membro sênior do próprio time.
Ganhos de produtividade em escala (300% a 700%): Times que implementam o ciclo de engenharia composta observam saltos massivos de eficiência. A IA deixa de ser um assistente tático de digitação e passa a atuar como um engenheiro de contexto sênior, eliminando a perda contínua de contexto técnico que assombra os projetos tradicionais de software.
Conclusão: O Novo Perfil Técnico
O desenvolvimento de software moderno não se resume mais a digitar sintaxe; resume-se a projetar sistemas de controle e gerenciar fluxos de conhecimento orquestrados.
Dominar Harness Engineering garante que o código produzido por ferramentas generativas mantenha a integridade, a segurança e a conformidade arquitetural por meio de guias e sensores rigorosos. Dominar Compound Engineering transforma a inteligência em um ativo cumulativo, onde o próprio sistema se torna mais inteligente a cada linha de código modificada.
Ao unir as duas disciplinas, o engenheiro de software humano deixa de ser um mero revisor de código para se tornar o arquiteto de uma fábrica de software viva, autônoma e em constante evolução.
Fontes Oficiais e Leituras Recomendadas
BÖCKELER, Birgitta. Harness Engineering for Coding Agent Users. Disponível em:
.MartinFowler.com ZAHARIA, Matei et al. The Shift from Models to Compound AI Systems. Berkeley Artificial Intelligence Research (BAIR). Disponível em:
.The BAIR Blog