Novo livroLeading Effective Software Teams — um guia de pensamento sistêmico para gerentes de engenharia.Conheça o livro →

Engenharia ainda importa

Engenheiros de software não são operadores de prompt

Esse post foi traduzido automaticamente do inglês. Se você encontrar algum erro, por favor entre em contato.

O que se ouve por aí é que a engenharia virou uma ocupação sem graça, quase mecânica. Você pede ao agente de IA o que fazer, espera, dá algum feedback, espera, faz o commit, abre o PR. Depois vai ler os PRs criados por IA que seus colegas abriram, a maioria grande e complexa o suficiente para ser difícil de entender. Abre o laptop, lê texto e aperta enter em loop, fecha o laptop. Nada empolgante.

Escrevi um post sobre essa situação, e um dos meus argumentos era que engenheiros de software não podem reduzir o próprio trabalho a entregar código. Ser um engenheiro eficaz significa entregar valor por meio de software, usando ferramentas de IA ou não. O post gerou uma ótima discussão, mas não agradou um amigo meu, que disse, em outras palavras: isso é papo de gestor e não ajuda um engenheiro a saber o que fazer. O público não está fácil.

Mas meu amigo tinha razão. Dizer que nada mudou e que tudo se resume a valor pode ser verdade e, ao mesmo tempo, não ser útil. O trabalho claramente está mudando de várias formas, e engenheiros precisam entender como tirar o máximo proveito dessa mudança. No contexto de um engenheiro de software, o que significa entregar valor?

Um diagrama com “necessidades do cliente” à esquerda e “valor para o cliente” à direita, ligados por uma seta tracejada que passa pelo meme do gato tocando teclado no meio. Como um engenheiro de software entrega valor?

Quando converso sobre esse assunto com os engenheiros com quem trabalho, costumo contar a história de um projeto do qual participei como consultor, muitos anos atrás. Nesse projeto, eu trabalhava com um colega bem mais sênior, o tech lead, planejando um sistema financeiro para um banco.

Passamos pelo processo de planejamento e apresentamos nossa solução ao cliente. O plano incluía cuidados com performance, escalabilidade e recuperação de falhas, entre outros aspectos técnicos que consideramos necessários por se tratar de um sistema financeiro crítico. Enquanto apresentávamos, o cliente perguntou “por que precisamos de tudo isso?”, e meu colega respondeu na hora: “porque eu não vou construir um sistema que me acorde todas as noites”. E a discussão acabou ali.

Aquele momento ficou marcado na minha memória. Era nosso trabalho, como engenheiros, definir onde ficava a barra de qualidade daquele sistema. Isso era verdade para aquele sistema, e é verdade para qualquer sistema.

Manter a barra não significa apenas concluir a próxima tarefa ou fazer as coisas como sempre foram feitas. Significa tanto entregar software o mais rápido possível agora quanto garantir que o custo de manter e evoluir esse software seja o menor possível. Como disse Alistair Cockburn, o objetivo principal do jogo é entregar software útil e funcionando, e o objetivo secundário é se preparar para o próximo jogo. Construir sistemas que sejam eficientes agora e no futuro.

“Todo projeto de software deixa um legado para o próximo projeto, e por isso as estratégias usadas no desenvolvimento de software devem levar em conta tanto este jogo quanto o próximo” - Alistair Cockburn

No mundo atual da IA, jogar o jogo do momento ficou mais fácil. O trabalho do engenheiro realmente mudou de forma significativa agora que construir algo leva alguns prompts. Já se preparar para o próximo jogo, não.

Estamos em um momento em que a indústria inteira está aprendendo. Na prática, isso significa empresas e times jogando agentes em todos os problemas, na esperança de redefinir a velocidade com que um time de software consegue se mover. Para o engenheiro, isso muitas vezes aparece como pressão. “A IA não consegue fazer isso?” é a versão atual da pergunta que fizeram ao meu colega muitos anos atrás. E, embora possa ser difícil resistir à pressão de simplesmente empurrar código o mais rápido possível neste momento, está claro que vamos ver as consequências disso em breve.

Software vai exigir tokens para ser projetado, construído, executado e mantido. Uma base de código mal projetada vai exigir mais raciocínio dos agentes para entregar código de alta qualidade, como Giles Edwards-Alexander mostrou em um experimento recente publicado no site de Martin Fowler. Entregar software de forma eficaz vai significar construir sistemas baratos de construir, baratos de rodar e baratos de evoluir, já que isso pode ser o que faz um produto dar certo ou não.

Um gráfico de linhas ao longo de 15 etapas de refatoração. Conforme o maior arquivo encolhe de cerca de 17.000 para menos de 4.000 linhas de código, os tokens de entrada necessários para fazer uma mudança caem de cerca de 160.000 para menos de 30.000, enquanto a camada de acesso a dados mantém o mesmo tamanho e os tokens de saída ficam estáveis. Nesse experimento, o número de tokens necessários para fazer uma mudança diminui conforme o sistema é refatorado (Gráfico: Giles Edwards-Alexander, The Economic Benefit of Refactoring)

Para os engenheiros, essa crise também é uma oportunidade, já que a qualidade técnica vai continuar fazendo parte da equação do software. Não é uma questão de quanto artesanato existe na engenharia, é uma questão de tempo e dinheiro. Sabemos que um agente consegue construir uma PoC muito rapidamente. Engenharia de alta qualidade significa garantir que o agente consiga construir a milésima feature em uma base de código grande com a mesma eficiência.

“Você é o guardião da barra de qualidade. Ninguém vai chegar aqui e dizer que o seu código não está bom o suficiente.” Esse é o conselho que costumo dar aos engenheiros e tech leads com quem trabalho. Na maioria das empresas de tecnologia (razoáveis), sua perspectiva técnica vai ser respeitada. Mas você precisa levantá-la, porque ninguém tem mais contexto do que você sobre o projeto que está liderando e o código que está entregando.

Esse conselho é mais importante do que nunca agora, com a pressão por velocidade crescendo e as proteções usuais de qualidade, como o code review, deixando de funcionar. Os engenheiros na linha de frente são, hoje, quem está definindo como o software será construído, tanto criando as novas proteções quanto projetando arquiteturas eficientes. As verificações que o código precisa passar antes de um PR existir, as regras de arquitetura escritas para humanos e agentes seguirem, as métricas que garantem que os agentes continuem eficientes conforme a base de código cresce. Ninguém mais vai fazer isso. Esse é o seu trabalho.

Comentários

  1. Carregando comentários…

Deixe um comentário