Guia da nossa engenharia de software

Leonardo Gregianin
4 min readDec 22, 2021

--

Este é um documento vivo que se encontra no nosso repositório público no Github e tem como base orientar nossas decisões durante o desenvolvimento da plataforma Lucro Rural.

Esse guia é a espinha dorsal de nossa cultura de engenharia. Eles não são nada sofisticados, apenas um conjunto de expectativas básicas que tentamos seguir.

Esta lista ajuda a equipe a construir soluções melhores e com mais rapidez, não importa a idade ou o nível de senioridade.

0. Datilografia != Engenharia de software

Ir diretamente para a escrita de código, na maioria das vezes, leva a um código ruim e a uma engenharia ruim. A maioria das batalhas é vencida na mente e na caneta e no papel antes mesmo de começar.

As pessoas “datilógrafas” se concentram apenas em escrever código para fazer algo funcionar. As pessoas engenheiras de software têm uma visão muito mais ampla, concentrando-se no problema e em todos os aspectos da solução. Dividir a solução em componentes menores, tendo um panorama geral em mente e descobrir como tudo se encaixa no final.

As pessoas com a mente na engenharia do software constroem para escala e sustentabilidade, em vez de apenas criar uma solução de curto prazo.

1. “import lib”

A vida é curta demais para reinventar a roda.

Não perca tempo construindo suas próprias ferramentas ou bibliotecas se já houver algo que faça o mesmo trabalho. Sempre que possível, amplie as bibliotecas existentes e contribua de volta. Isso ajuda a obter uma imagem clara do que o trabalho de outras pessoas faz e como se encaixa no que estamos construindo. Também permite que outras pessoas se beneficiem de seu trabalho, assim como nós nos beneficiamos dos outros trabalhos.

2. Com grandes poderes vêm grandes responsabilidades

Não somente nossos clientes diretos são impactados pelo que geramos no Lucro Rural, o que fazemos trazem mudanças reais para milhões de pessoas.

Cada escolha que fazemos em nossa plataforma e cada recurso que criamos deve ser pensada com muita responsabilidade.

É importante questionar cada escolha, uma vez que afetará milhões de pessoas. Certifique-se de saber o que usar, quando usar e até mesmo por que está usando em primeiro lugar. Às vezes, os problemas mais difíceis têm as soluções mais simples.

3. Fracasse rápido e continue aprendendo

Temos problemas grandes para resolver e muitas maneiras possíveis de resolver cada um deles. A melhor maneira de descobrir qual solução é a melhor é agir rapidamente e testar várias soluções possíveis.

Fracassar rápido significa fazer várias iterações rápidas e aprender com cada uma, em vez de ficar preso/emperrado a uma solução ou decisão. (No entanto, não se trata de construir coisas sem conhecer suas limitações ou problemas!) Sempre que estiver preso/emperrado, converse com outras pessoas — elas podem ter uma solução alternativa mais rápida ou melhor.

4. Conheça a sua casa

“Conhecer sua casa” significa conheçer o problema que está resolvendo, conhecer a plataforma e conhecer os problemas reais dos produtores rurais, isto é uma parte crucial da engenharia.

Não é suficiente saber o que funcionará e quando funcionará. É tão importante saber o que não funciona e quando não funciona.

5. “No meu computador funciona”

Se algo está quebrando, há um problema no código. Nunca é um problema mágico ou uma ocorrência aleatória, porque não é assim que o código funciona. É uma ciência exata, lembra?

Esperamos que nossas pessoas da engenharia descubram o que causou a quebra, não limpem as mãos e passe o problema para outra pessoa. Pense no que está acontecendo por debaixo dos panos.

Essa ideia também é importante para a escolha de tecnologias ou ferramentas. Pense por que algo é melhor e o que o torna melhor. A ferramenta A pode ser boa para resolver o problema B, mas isso não significa que a transição para a ferramenta A resolverá magicamente todos os seus problemas. Geralmente há uma compensação envolvida.

6. Meça o que for mensurável

Medir o que construiu pode não parecer um bom uso do seu tempo, visto que poderia ser gasto na construção do próximo recurso/novidade para a plataforma. No entanto, configurar sistemas para medir um produto fornece dados reais com os quais trabalhar.

As medições também são cruciais quando se começa a construir em escala. Se não medirmos como o produto está respondendo a mais usuários ou solicitações, é fácil ocorrer problemas ocultos que o farão quebrar no futuro.

Depois de ter os dados, podemos usá-los para qualquer coisa — talvez isso nos ajude a decidir sobre o próximo recurso para seu produto ou mostre como otimizar uma determinada seção do produto. Não importa o que nós façamos com os dados, tê-los nos coloca um passo mais perto de tomar melhores decisões baseadas em dados.

7. Automatize tudo o que for repetitivo

Nossa tendência básica deve ser automatizar sempre que possível, em vez de fazer as tarefas manualmente.

A automação nos dá mais tempo para trabalhar na construção do produto real. Queremos que os sistemas façam nossas tarefas repetitivas e tediosas, em vez de ter humanos passando suas noites fazendo essas tarefas. No entanto, tome cuidado para não perder muito tempo com otimização!

8. A otimização prematura é a raiz de todos os males

A otimização é importante, mas não deve ser feita muito cedo. Escolha as batalhas certas para lutar na hora certa.

Se otimizarmos muito cedo, gastará e gastará novamente muito tempo e ainda assim não obterá a solução mais otimizada. Espere até que seu produto esteja totalmente “cozido” e “azeitado” (expressão nossa) e otimize o que precisa ser otimizado.

9. Em caso de dúvida, pergunte!

Emperrado ou confuso? Pergunte! Alguém terá uma solução, ou pelo menos uma ideia para você começar no caminho certo.

Apenas lembre-se, certifique-se de fazer sua pesquisa com antecedência e escolher os próximos passos cuidadosamente. Nunca opte por uma abordagem que você ou outra pessoa certamente pensa que funcionará sem saber por que funcionará ou sem quaisquer dados ou fatos objetivos para apoiá-la.

--

--