Marcio Cunha

O trabalho do engenheiro de software moderno é desenvolver o harness

A chegada das inteligências artificiais mudou o papel de quem programa, tirando o foco apenas de escrever linhas de código. O segredo agora é construir um sistema de regras e testes que guia o trabalho da máquina com segurança e precisão.

Marcio Cunha7 min
Também disponível em:EnglishEspañol
Resumo
  • O trabalho de engenharia de software mudou para a criação de restrições e feedbacks que tornam o uso de inteligência artificial confiável.
  • Modelos de linguagem aceleram a produção de código, mas precisam de limites claros para evitar quebras de regras de negócio ou falhas de segurança.
  • Um bom ambiente de trabalho controlado reduz a incerteza e gera evidências concretas antes de qualquer código chegar à produção.
  • Especificações versionadas, ambientes reproduzíveis e portas de qualidade automáticas são componentes essenciais para guiar a atuação dos agentes.
  • As ferramentas de inteligência artificial servem apenas como interfaces de execução, enquanto a responsabilidade e os critérios de qualidade continuam sendo humanos.

Escrever código continua sendo parte importante do trabalho, mas deixou de ser o único gargalo. Assistentes e agentes de inteligência artificial, que são programas capazes de executar tarefas de forma autônoma, já conseguem propor implementações, refatorar arquivos e executar tarefas repetitivas com muita velocidade. Isso não elimina a engenharia: desloca o foco para definir o problema, estabelecer limites e verificar se a solução realmente merece chegar à produção.

É aí que entra o harness, que na prática funciona como um sistema de suporte e controle composto por contexto, regras, ambientes e ciclos de feedback que orientam o trabalho humano ou assistido por inteligência artificial. Ele transforma um pedido amplo em uma mudança que pode ser executada, observada e revisada.

Do teste ao sistema de trabalho

No jargão de testes, um test harness, conhecido como a estrutura de suporte a testes que prepara o ambiente para rodar verificações, é a estrutura que permite executar um sistema em condições controladas: prepara dependências, injeta dados, aciona o código e observa o resultado. Em uma equipe que usa agentes, a ideia se amplia. O harness passa a incluir a descrição do que é aceitável, as restrições de segurança, os comandos confiáveis e as verificações que sustentam uma entrega.

A IA acelera; o harness dá direção

Modelos de linguagem, que são os cérebros matemáticos por trás dos chats de inteligência artificial, são excelentes em explorar alternativas, mas não possuem entendimento garantido do negócio, das consequências operacionais ou das particularidades de um repositório. Um resultado que compila, ou seja, que o computador consegue traduzir em um programa executável, pode ainda violar uma regra de produto, expor um dado sensível ou quebrar uma integração pouco exercitada. Por isso, o objetivo não é pedir que a inteligência artificial faça tudo, mas oferecer um caminho seguro para que ela produza mudanças pequenas, verificáveis e fáceis de contestar.

Um bom harness não substitui revisão técnica nem decisão de produto. Ele reduz a incerteza e gera evidências. Quando os testes falham, o agente recebe um sinal específico para corrigir; quando passam, a equipe ainda avalia se a solução atende à intenção, à segurança e à manutenção futura.

O que compõe um bom harness

A implementação varia conforme o projeto, mas estes componentes costumam fazer diferença:

  • Especificação e contexto versionados: requisitos de negócio, convenções do repositório, critérios de aceite e exemplos reais próximos do código. Instruções curtas e específicas são mais úteis do que um pedido genérico de implemente isso.
  • Ambiente reproduzível: dependências, variáveis de exemplo e comandos claros para executar o projeto. Containers, que funcionam como caixas isoladas que rodam aplicativos com tudo o que eles precisam, e scripts de inicialização ajudam a aproximar o ambiente local, o ambiente de integração contínua e a produção.
  • Portas de qualidade automáticas: formatação, tipos, verificação de estilo de código conhecida como lint, testes unitários para pequenas partes do sistema, integração, interface e compilação do programa. Cada verificação deve ser rápida o bastante para o ciclo de desenvolvimento e confiável o bastante para não virar ruído.
  • Limites de acesso: permissões mínimas, segredos como senhas e chaves de API mantidos fora do contexto do agente e atenção a instruções presentes em conteúdo não confiável. Quanto maior a autonomia, mais explícitos devem ser os limites para arquivos, rede e comandos.
  • Observabilidade da mudança: histórico de alterações visuais chamado diff, logs úteis de funcionamento, resultado dos comandos e uma explicação objetiva do que foi alterado. Isso torna a revisão humana mais rápida e o retorno ao estado anterior, conhecido como rollback, menos arriscado.

Ferramentas são interfaces, não o processo

Claude Code, agentes do Visual Studio Code e plataformas como o Google Antigravity podem ler o projeto, alterar arquivos, executar comandos e iterar a partir de feedback. Essas capacidades só são confiáveis quando encontram um projeto bem preparado. O mesmo harness deve servir a qualquer ferramenta: a escolha do modelo ou do ambiente de desenvolvimento pode mudar; os critérios de qualidade não deveriam.

Sem um harness claroCom um harness bem projetado
Pedido amplo e contexto espalhado em conversasCritérios de aceite e convenções próximos do código
Alteração grande, difícil de revisar e reproduzirAlterações enxutas, comandos determinísticos e feedback rápido
Confiança baseada em parece funcionarEvidências: tipos, testes, build, revisão e monitoramento

A habilidade que ganha importância não é apenas escrever o próximo trecho de código. É desenhar um sistema de trabalho no qual boas soluções se tornam o caminho mais fácil e falhas aparecem cedo. A inteligência artificial pode acelerar a execução; responsabilidade, julgamento e contexto continuam sendo humanos.