De antemão, já informo que esse é um artigo original do Gergely Orozz, e foi traduzido por mim. Como o conteúdo é muito completo, não vi necessidade de fazer adaptação ou alterar qualquer coisa nele, se estiver interessado, é só ler o artigo original em inglês
--
Recentemente, tenho conversado com pequenas e médias empresas, compartilhando as melhores práticas de engenharia que vejo usarmos na Uber, que eu recomendaria que qualquer empresa de tecnologia adotasse à medida que cresce. O único tópico que mais levanta as sobrancelhas e também solta uns momentos "aha!" é sobre como funciona o processo de planejamento da engenharia desde os primeiros anos do Uber.
Ao trabalhar em grandes empresas como a Microsoft ou em empresas menores como o Skyscanner, houve duas coisas relacionadas ao planejamento que sempre me incomodaram. Primeiro, a falta de visibilidade de outros que estão construindo ou tendo construído a mesma coisa que minha equipe. Em segundo lugar, a dívida tecnológica e arquitetónica acumulada devido a diferentes equipas construírem coisas de forma muito diferente, tanto em termos de abordagem como de qualidade.
E se eu dissesse que existe uma maneira de resolver esses dois problemas muito bem, usando algumas etapas simples? Um aviso: uma das etapas parecerá um pouco maluca. Aqui estão eles:
- Faça um planejamento antes de construir algo novo. Isso pode ser feito pessoalmente ou apenas conversando com os membros da equipe, desde que você tenha certeza de como fará as coisas.
- Registre esse plano em um documento curto e escrito. Assim que estiver claro para a equipe como e o que você faz, será relativamente rápido escrever o "como" . Não exagere.
- Faça com que algumas pessoas selecionadas aprovem este plano antes de começar a trabalhar. Semelhante a como é uma porta de boa qualidade mesclar uma pull request somente depois que alguém fizer uma revisão, faz uma grande diferença se, antes de iniciar o trabalho em um projeto, algumas pessoas relevantes validarem o trabalho planejado. Podem ser engenheiros seniores, pessoas de uma equipe que usarão o recurso e assim por diante.
- Envie este documento de planejamento para todos engenheiros da empresa e deixe que todos comentem sobre isto. Sim, esta é a etapa que provavelmente parece loucura.
- Faça com que todos sigam as etapas acima para cada projeto que esteja além de alguma complexidade super trivial e itere em um processo leve, tipo RFC< /span> para que funcione bem para sua organização ou empresa.
Por mais improvável que possa parecer, o processo acima funciona e é muito bem dimensionado, desde um punhado de engenheiros até equipes de milhares. Ele aborda não apenas questões de visibilidade ou redução do débito de tecnologia/arquitetura, mas também de difusão de conhecimento e de maior engajamento dos engenheiros no dia a dia. Este é o processo simples que recomendo a qualquer equipe de tecnologia de pequeno ou médio porte, especialmente se estiver em fase de crescimento. É também o processo que usamos e repetimos com sucesso na Uber, passando de dezenas de engenheiros para alguns milhares.
O poder de escrever coisas
Escrever e compartilhar essa escrita com outras pessoas cria responsabilidade. Também quase sempre leva a decisões mais completas. Uma maneira simples de aumentar a qualidade do código? Faça a revisão do código por escrito, antes de mesclar. Uma maneira simples de fazer com que uma reunião seja menos perda de tempo? Tenha uma agenda escrita antes da reunião e, em seguida, escreva e envie as decisões e ações posteriormente. Uma maneira simples de executar projetos com menos surpresas? Peça à equipe que escreva o que está planejando fazer e compartilhe com outras pessoas.
Nós, engenheiros, odiamos desperdiçadores de tempo. A documentação é frequentemente vista como uma dessas perdas de tempo, principalmente porque é chata de fazer. O planejamento é frequentemente visto como uma espécie de documentação, portanto há uma tendência natural de simplesmente pular esta etapa para obter eficiência. Eu gosto de inverter esse argumento sobre como economizar tempo.
Se todos concordarem como o projeto deve ser feito, escrever a abordagem será muito fácil. Basta capturar o entendimento compartilhado sobre o que é a abordagem, o que mudanças na arquitetura serão feitas, quais são as partes complicadas. Alguém da equipe deve ser capaz de fazer isso em algumas horas, e os outros membros da equipe concordam depois de ler. Normalmente, vejo isso sendo menos direto. "Não foi isso que eu quis dizer quando conversamos." ou "E esse importante caso extremo esquecemos?" e "Se mudarmos isso aqui, isso poderá quebrar essa outra parte do sistema" são coisas que muitas vezes surgem ao escrever o plano. É ótimo ter essas discussões antes de ter as mesmas realizações quando o projeto estiver na metade.
E quando as pessoas não concordam com a forma como o projeto deve ser feito ou quando há muitas mudanças? Isso já parece um projeto que levará muito mais tempo do que as pessoas pensam - pelo menos anotar as coisas deve dar uma imagem mais clara.