Nem Microsoft, Facebook, Apple e cia.

Frequentemente você e eu somos bombardeados por evangelistas e entusiastas de grandes empresas alardeando como eles aplicaram um novo método maravilhoso para… preencha o espaço aqui.

Diga a verdade: quantas vezes você se sentiu pressionado a fazer algo só porque alguém “grande” o faz?

Provavelmente você já ouviu como as equipes dessas empresas ficaram 10 vezes mais produtivas usando a mais nova metodologia ágil tabajara, como a inovadora tecnologia xinforínfola tornou seus sistemas capazes de teletransportar automaticamente código do desenvolvimento para servidores espalhados por todo o mundo ou ainda como a técnica de avaliação 1070p permitiu uma visão full HD do real desempenho da equipe.

Às vezes ficamos tão encantados com essas ideias oriundas de quem está no “topo da cadeia” que esquecemos de nos perguntar o básico:

  • Preciso mesmo disso?
  • Posso realmente me dar ao luxo de gastar tempo com isso?

Tendo migrado primeiramente de uma empresa local (com pouco mais de uma centena de pessoas) para uma multinacional em grande crescimento, depois para uma empresa extremamente técnica como a Atlassian, pude sentir gradualmente como a tecnologia e técnicas de gerenciamento associadas podem ser bem ou mal empregadas em diferentes níveis e escalas.

Neste artigo, quero chamar a sua atenção para o fato de que nem tudo o que é divulgado por aí, geralmente por empresas cujo público-alvo são desenvolvedores e que produzem software para milhões de usuários espalhados pelo mundo, agrega muito valor para a grande maioria das equipes e dos projetos de software.

Metodologias e práticas “legais”

Frequentemente palestrantes falam sobre novas metodologias, técnicas e práticas que vão garantir o sucesso do seu projeto ou empresa.

Embora seja verdade que algumas mudanças podem elevar o moral da equipe e produzir algum efeito, frequentemente o mérito não está no método em si, mas naquelas pessoas que conseguem evolver e motivar os colegas.

Algumas coisas que você percebe com o tempo, se observar bem, é que ganhar momento e manter a velocidade e a produtividade em um projeto requer esforço constante. Independente do método ou prática, a tendência é sempre para a apatia e o caos, nunca se desviando da segunda lei da termodinâmica.

Algumas metodologias e técnicas incluem princípios interessantes que podem efetivamente ter resultados positivos, tal como melhorar o entrosamento entre os membros da equipe e resolver conflitos. Porém, se usados repetidamente, o efeito simplesmente vai passar. As bacterias do conformismo criarão resistência ao antibiótico do método.

Em geral você vai ver muito barulho, muita gente falando sobre os benefícios de implantar tal e tal método e, em poucas semanas ou meses, tudo o que mudou foi o formato da burocracia.

Infelizmente, manter pessoas motivadas é difícil. Por outro lado, pessoas motivadas não precisam – e nem querem – nada muito elaborado. Basta alguns princípios ágeis e elas mesmo irão evoluir o processo conforme as necessidades delas e do projeto.

Ferramentas e linguagens da “moda”

Outra doença que, assim como a gripe, afeta os programadores a certos intervalos de tempo é o anseio por usar todas aquelas ferramentas legais da moda. E eles ficam doentes e desmotivados se não conseguem.

Aí temos aquele projeto pequeno, de duas semanas, das quais uma e meia foram gastas configurando as ferramentas, que tem mil linhas de código real e duzentos megabytes de bibliotecas, consumindo 4 Gigabytes de memória RAM, um servidor próprio com configuração tão específica que ninguém mais consegue dar manutenção.

Claro, o cenário acima é um tanto exagerado, embora não tão longe assim da realidade. Mas o ponto é que muitas ferramentas não fazem sentido a não ser que você tenha um projeto com escala suficiente para justificar o custo de configurar, manter e executar toda a infraestrutura extra necessária para fazer toda a mágica acontecer.

Outro exemplo interessante nessa linha são testes automatizados e integração contínua. É afirmado, quase como um mantra, que você precisa ter tudo isso ou está fazendo algo errado.

Embora um desenvolvedor experiente consiga configurar algum nível de automação padrão rapidamente, se existirem quaisquer particularidades o custo de manter tal estrutura pode ser muito alto e inviabilizar o produto. Qualidade tem um preço, é o que vivo repetindo por aqui.

Talvez você não saiba, mas empresas como a Atlassian e Google mantém equipes dedicadas para cuidar das ferramentas utilizadas internamente. Há pessoas alocadas em tempo integral para monitorar, manter e melhorar os builds e testes automatizados, outras pessoas para controlar o deploy, outras para colher estatísticas de uso dos produtos, outras para cuidar do desempenho e assim por diante.

Falando em especialização, tome como mais um exemplo interessante o Monorepo do Google. Ao invés de manter um repositório distinto para cada módulo, projeto ou mesmo para cada produto, eles decidiram colocar tudo junto num lugar só. São 2 bilhões de linhas de código, 40 vezes o tamanho do Windows segundo a matéria do link acima. As vantagens são muitas, como ter todos os produtos consistentes e velocidade de desenvolvimento ao permitir refatoração instantânea em vários produtos ao mesmo tempo. Mas note algo importante: eles tiveram que criar as próprias ferramentas, a própria infraestrutura e o próprio sistema de controle de versão para poder fazer isso, fora a manutenção agregada. Quantas empresas poderiam arcar com isso?

Outro ponto que assombra os desenvolvedores em geral é a pressão por usar a linguagem mais fresca – no bom sentido – do pedaço. Hoje, tendo por volta de 512 linguagens que executam na Máquina Virtual do Java, é fácil você se sentir um programador analfabeto porque você sabe Java.

Eu acho bom sempre dar uma olhadinha em alguma nova linguagem e ver o que ela oferece, mas, cá entre nós, todos sabem que é impossível aprender todas elas – embora tenha gente que finge que consegue. Além disso, lembre-se de que muitas delas nunca vão ser largamente utilizadas e, em sua maioria, são promovidas por empresas que podem se dar ao luxo de manter equipes inteiras para dar conta do recado.

No geral, você está bem se souber uma linguagem bem (note a ênfase no bem) e alguma noção de outras. Programar é muito mais que decorar sintaxe,é saber resolver problemas e dificilmente a linguagem é um obstáculo se você tem as habilidades analíticas de um bom desenvolvedor.

Considerações

Como você vê, o custo da qualidade e do luxo pode ser muito alto. A decisão dos desenvolvedores de continuar a usar as tecnologias que eles já usam e conhecem bem é, talvez, 90% das vezes correta.

Claro que é sempre bom estar aprendendo, pesquisando e testando novas tecnologias, desde que isso não afete sua produtividade.

Além disso, não nos devemos sentir pressionados a usar os métodos e as tecnologias mais recentes a todo momento, caso contrário cada projeto teria um conjunto completamente diferente de tecnologias e práticas e incluiria uma nova curva de aprendizado.

Por outro lado, tudo o que falei não desculpa você por não estudar coisas novas e não se aperfeiçoar naquilo com que já trabalha.

Meus objetivos aqui são dois:

  1. Tirar um pouco do fardo extremamente pesado que veladamente se coloca sobre os desenvolvedores, aquele sensação de que todo mundo sabe tudo e você ficou para trás.
  2. Ajudar a que você tome decisões mais criteriosas sobre adotar novas práticas e tecnologias, lembrando que não existe solução mágica nem para a produtividade no sentido motivacional e também no técnico.

Finalmente, cuidado quando tentam lhe vender um peixe que é bom demais para ser verdade. Aquelas notícias super legais de grandes empresas são praticamente todas parte de alguma estratégia de marketing. E, infelizmente, há muitos profissionais um tanto hipócritas, que fingem resultados maravilhosos e conhecimento muito elevado, apenas para se exibir ou tentar ganhar alguma coisa. No fundo todos sabemos dessas coisas, mas assim como aqueles perfis do Facebook onde as pessoas parecem viver num mundo maravilhoso enquanto você está na miséria, muita gente acaba acaba iludida e até deprimida. Sempre desconfie. 😉