Alguns anos atrás encontrei esse texto no blog do Chris Aitchison e acho que ele conseguiu, de forma genial definir o que é a construção de um software com a analogia do jardineiro. E mais, conseguiu demonstrar porque a analogia do engenheiro de software não serve e muitas vezes contribui para o fracasso de um projeto.
Eu já havia pensado em traduzir esse texto a muito tempo, mas nunca tinha parado para fazer isso, enfim está aqui(com alguns anos de atraso hehe). Eu quero deixar esse texto no meu blog mais como um repositório de ideias, eu tenho muitas sobre o assunto e provavelmente eu irei adicionando updates com as minhas opiniões no futuro sempre que me pegar pensando sobre.
Acredito que todos deveriam ler e tentar no mínimo analisar o que ele quer dizer com tudo isso com a total liberade para discordar, concordar, opinar etc.
Segue o texto:
Você não é um engenheiro de software. Você não constrói arranha-céus. Você não constrói pontes.
Você cultiva jardins.
Você é um jardineiro de software.
Você tenta planejar seus jardins com tantos detalhes que sabe onde cada folha será posicionada antes de plantar uma única semente? As pessoas esperam estimativas (ou elas são promessas em sua organização?) sobre quantas flores exatamente terão florescido no período de um ano? Você tem um bônus ligado ao resultado dessas estimativas? Algumas coisas que seriam perfeitamente razoáveis ao planejar um prédio parecem um pouco ridículas quando você está falando sobre um jardim.
Você provavelmente tem uma boa ideia de como seu jardim será daqui uma semana. Pode até ter uma ideia de como espera que ele seja daqui a um ano. Mas não tem ideia de onde cada ramo, folha, caule e flor estará daqui a um ano, e se você diz que tem está realmente adivinhando.
Se você estivesse construindo uma ponte ou um prédio e me dissesse antes mesmo de começar a construção como ele ficaria terminado, eu acreditaria. Se você me dissesse que sabia com um altíssimo nível de precisão quando ele estaria pronto, eu acreditaria novamente em você. Porque é assim que engenheiros fazem. Diga-me a mesma coisa sobre o seu jardim e direi que é conversa fiada. Diga-me que você vai fazê-lo crescer mais rápido com a contratação de mais jardineiros e eu vou rir de você.
Então por que tantos jardins falham, e tantos prédios tem sucesso? Com poucas exceções, a técnica utilizada para a construção de um prédio é a mesma se você está na Europa ou está em Singapura. Jardins não funcionam assim. Cada jardim é diferente porque o ambiente em que ele está sendo construído é diferente. Mesmo jardins que estão bem próximos uns dos outros podem ter o solo totalmente diferente. É por isso que um concorrente menor provavelmente pode construir a mesma ponte que um concorrente de maior porte, mas a sua empresa provavelmente não poderá cultivar jardins do tamanho dos jardins que o Google pode cultivar.
Você se lembra de algum momento em sua empresa que alguém tentou utilizar, sem sucesso, uma metodologia ágil no seu jardim e depois voltou atrás dizendo que aquilo era uma merda e não funcionava? Bem, merda faz jardins crescerem, ela apenas não foi suficiente para salvar seu jardim. Seu jardim foi, provavelmente morto antes mesmo de começar - uma vítima do clima da empresa. Estavam tentando cultivar uma floresta tropical no deserto? Você não pode plantar as mesmas plantas que o Facebook, Flickr ou Twitter e esperar que elas simplesmente cresçam e criem raízes independentemente da qualidade do jardineiro ou do clima da sua organização.
Ao contrário de um prédio em seu jardim vão crescer ervas daninhas. Ele nunca estará terminado. Só porque você parou de gastar dinheiro nele isso não significa que ele está pronto. Se você parar de remover as ervas daninhas, eventualmente elas abafarão as plantas e logo logo plantar tudo de novo será mais fácil que uma poda. O ambiente em torno do seu jardim também, vai mudar sempre e um jardim negligenciado ficará cada vez mais e mais difícil de manter vivo.
Na maioria dos países engenheiros precisam de uma licença para construir uma ponte. Jardineiros já não têm esse nível de controle para que possam construir jardins. Infelizmente, a qualidade do jardineiro terá uma influência maior sobre o sucesso do seu jardim do que qualquer outra coisa - por isso é melhor que você seja bom em separar o trigo do joio. Apenas um bom jardineiro reconhece outro bom jardineiro quando o vê. Alguém que tenha apenas gerenciado projetos de jardinagem não tem a mínima ideia do que deveria esperar de um bom jardineiro (embora não saiba disso). Então se você não é um jardineiro mas precisa encontrar bons jardineiros, chame um bom jardineiro em quem você confia e deixe que ele selecione os candidatos.
Você não pode aprender jardinagem em uma sala de aula, então concentre-se nos jardins que seus colegas de profissão cultivaram antes, ao invés da teoria da jardinagem que viu na escola (que quase sempre não será aplicável ao clima que você estará cultivando).
A metáfora da engenharia de software já teve seu espaço ao sol, e talvez um dia tenha sido útil, mas agora só serve para ajudar pessoas não técnicas a ter expectativas irreais sobre como o software é construído.
Eu sou um jardineiro de software.
E você também.