Há alguns anos eu estava pensando sobre o que realmente é desenvolvimento de software. Existem dezenas de metáforas clássicas na computação tentando definir nossa profissão. David Gries dizia que escrever software é uma ciência; Donald Knuth defendia que é uma arte; Watts Humphrey tratava como processo; Alistair Cockburn comparava a um jogo; Eric Raymond a um grande bazar; e Fred Brooks dizia que é como agricultura, caçar lobisomens ou afundar em um poço de piche. Até P. J. Plauger e Kent Beck compararam a dirigir um carro, ainda que tenham chegado a conclusões opostas.

Mas quais dessas metáforas melhor descreve o nosso trabalho no dia a dia?

Na minha visão, a melhor de todas é a ideia de que programar é como cuidar de um jardim, como bem defenderam Andy Hunt e Dave Thomas 1. Este texto vem resgatar e aprofundar justamente essa reflexão 2 3.

Você não é um Engenheiro de Software

Você não constrói arranha-céus. Você não constrói pontes.

Você planta jardins.

Você é um Jardineiro de Software.

Você tenta planejar seus jardins com um nível de detalhe a ponto de saber exatamente onde cada folha estará posicionada antes de plantar uma simples semente? As pessoas na sua organização cobram estimativas milimétricas de quantas flores terão desabrochado no prazo de um ano? Existem bônus atrelados a isso? Coisas que seriam perfeitamente sensatas para o planejamento de uma ponte ou edifício parecem completamente sem sentido quando aplicadas a jardins.

Você provavelmente tem uma boa ideia de como o seu jardim deve estar daqui a uma semana. Pode até ter uma expectativa razoável de como ele estará daqui a um ano. Mas você não tem a menor ideia de onde cada ramo, folha, caule e flor estará nesse horizonte, e se disser que sabe com precisão, estará apenas chutando um palpite.

Se você estivesse construindo uma ponte ou um arranha-céu e me dissesse que, antes de começar, sabia exatamente como ele ficaria depois de pronto, eu acreditaria. Se você me dissesse que sabia, com precisão matemática, quanto tempo levaria para chegar ao estado acabado, acreditaria de novo. É assim que engenheiros trabalham. Mas diga-me a mesma coisa sobre seu jardim e vou responder: “Aham Cláudia, senta lá!” Diga-me que vai fazer o jardim crescer o dobro de rápido apenas contratando mais jardineiros, e eu vou rir junto com você.

Por que tantos jardins enfrentam dificuldades enquanto grandes obras de engenharia são entregues com regularidade? Salvo raras exceções, a técnica para erguer um edifício segue padrões estruturais semelhantes, seja na Europa ou em Singapura. Jardins não funcionam assim. Cada jardim é único porque o ecossistema em si é único. Jardins lado a lado podem ter solos, incidência solar e microclimas totalmente diferentes. É por isso que uma construtora média consegue erguer a mesma ponte que uma gigante da engenharia, mas uma empresa qualquer não consegue fazer seus sistemas crescerem no mesmo calibre do Google apenas copiando seus processos.

Lembra daquela vez em que alguém na empresa tentou aplicar uma metodologia ágil qualquer na base da receita pronta e depois saiu dizendo que o adubo não funcionava? O adubo funciona, mas talvez o seu jardim já estivesse sufocado pelo clima organizacional antes mesmo de começar. Você estava tentando plantar uma floresta tropical no deserto? Não adianta simplesmente tentar cultivar as mesmas espécies do Facebook, do Twitter ou do Netflix e esperar que elas criem raízes profundas sem considerar a terra que você tem em mãos.

Ao contrário de um prédio, em um jardim sempre nascerão ervas daninhas. Ele nunca estará ‘terminado’. Só porque o orçamento do projeto acabou não significa que o software está concluído. Se você parar de cuidar do jardim e não retirar as pragas, elas irão sufocar o que foi plantado e, em pouco tempo, recomeçar do zero parecerá mais tentador do que fazer a poda necessária. O ambiente em torno do código está sempre em movimento: bibliotecas atualizam, requisitos mudam, servidores evoluem.

Na maioria dos países, engenheiros precisam de licença formal para assinar projetos de pontes. Jardineiros não possuem conselho de classe. Na prática, a sensibilidade e a experiência dos seus jardineiros terão muito mais impacto no sucesso do cultivo do que qualquer metodologia engessada. E apenas um jardineiro experiente reconhece outro jardineiro de verdade. Quem apenas gerencia planilhas raramente sabe o que procurar em um candidato. Se você precisa montar um time, busque a ajuda de quem coloca a mão na terra e foca nos jardins que os desenvolvedores realmente cultivaram anteriormente, não apenas na teoria que decoraram.

A metáfora da engenharia teve seu papel no início da computação para tentar trazer rigor aos projetos, mas hoje serve mais para alimentar expectativas irreais em quem não programa sobre como software realmente evolui.

Eu sou um Jardineiro de Software. E você também é.

Referências

  1. Programming is Gardening {Andy Hunt & Dave Thomas, Artima} (Link

  2. You are NOT a Software Engineer! {Chris Aitchison} (Link

  3. Tending Your Software Garden {Jeff Atwood, Coding Horror} (Link