Time e Indivíduos

O como fazer de um equilíbrio delicado no desenvolvimento de software

Esse post foi traduzido automaticamente do inglês. Se você encontrar algum erro, por favor entre em contato.

Esse post faz parte de uma série sobre Criando Times Eficazes.

Uma das discussões filosóficas atuais em engenharia de software é o desafio de equilibrar as necessidades individuais e do time. Empresas querem times altamente produtivos, mas entendem que software é um processo criativo que requer alguma inspiração pessoal. Por outro lado, engenheiros individuais querem liberdade para criar, mas geralmente falham ao entregar esforços solo em contextos altamente complexos, sejam técnicos ou burocráticos.

Essas são areias movediças na indústria. O que começou com abordagens pesadas de gestão e processos no passado recentemente migrou para abordagens focadas em talentos, com a crença em engenheiros 10 (ou 100!)x.

No entanto, como grandes times descobriram repetidamente, essa distinção é uma falsa dicotomia. Mas antes de entrarmos no modo solução, vamos olhar o problema mais de perto.

Vader instructs his new clean team Vader instructs his new clean team

Vader instructs his new clean team by stavos is licensed under CC BY 2.0

Software é um esporte coletivo

Começando pelo óbvio, o desenvolvimento de software é feito de forma muito mais eficaz como atividade de equipe. Existem considerações sobre o tamanho do time (4-6 pessoas tem funcionado bem para mim), mas se times não fossem a melhor opção, todas as organizações de tecnologia não estariam organizadas em grupos. A maioria dos sistemas úteis é grande e complexa o suficiente para que uma pessoa não consiga construí-los e mantê-los sozinha.

E o principal objetivo para a maioria dos times é se tornar altamente produtivo. Em outras palavras, entregar o máximo de ótimas soluções para problemas do mundo real no menor tempo possível. O objetivo não é total de linhas de código ou funcionalidades produzidas, nem aderir estritamente ao processo. O objetivo é resolver o problema de alguém, preferencialmente rápido, enquanto se constrói sistemas facilmente mantíveis.

Mas indivíduos precisam de espaço

Por outro lado, engenheiros precisam de espaço e liberdade para entregar soluções. Embora colaboração seja essencial (um voto a favor do pair programming!), espaço criativo é necessário para desenvolver soluções eficientes para problemas complexos. Como soluções eficientes são o que buscamos, devemos incentivar métodos que possam entregá-las.

Engenheiros também precisam de espaço prático para crescer em suas carreiras. A maioria das empresas tem algum nível de expectativa de entrega individual para permitir crescimento na carreira. Como decidir quem está performando bem se você não tem visibilidade nas contribuições individuais? Como melhorar como indivíduo se o trabalho do dia a dia é limitante?

O caminho para o equilíbrio

“A força do time é cada membro individual. A força de cada membro é o time.” — Phil Jackson

A verdade não está em nenhum dos extremos. E a boa notícia é que quando um time encontra um equilíbrio nesses temas, é bem recompensado.

Como gestor, uma das formas como faço o onboarding de novos engenheiros é dizendo que uma das minhas principais contribuições para a carreira deles será fazê-los trabalhar em um time produtivo. Um time de software que funciona muito bem criará mais oportunidades de crescimento, e engenheiros crescendo e motivados vão potencializar os resultados do time.

Para alcançar esses resultados, aqui está minha visão sobre passos práticos:

O sistema também é sua responsabilidade

Diferentes engineering managers trabalham de formas diferentes, e o trabalho também varia dependendo da composição e tamanho do time. Existe uma ampla lista de áreas onde podem se envolver, enquanto o tempo é limitado, desde recrutamento até decisões técnicas.

Embora todos devam jogar com seus pontos fortes, lembre-se que você é responsável por como o trabalho é definido para as pessoas que gerencia. Um anti-padrão típico que vi na indústria são engenheiros com dificuldades, às vezes a ponto de ter seu desempenho questionado, porque projetos não são bem gerenciados.

Como gestor, certifique-se de trabalhar com seus pares de produto e design para pensar no sistema completo de ponta a ponta, do problema à entrega de software.

Crie uma visão técnica de longo prazo para o seu time

A maioria das organizações que existem há mais de alguns anos está afogada em débito técnico. Dentro desse contexto e com pressão constante de produto, é fácil cair no hábito de remendar um sistema quebrado e focar em melhorias de curto prazo.

Quando isso acontece, fica mais difícil para os engenheiros encontrar formas de gerar contribuições técnicas significativas. Se tudo que você faz é entregar funcionalidades, o único caminho de crescimento na empresa é ser bom em desenvolvimento de funcionalidades. Infelizmente, esse trabalho às vezes não é empolgante nem gratificante.

Ter uma visão técnica de longo prazo para seu(s) time(s) ampliará os caminhos para crescer como engenheiro. Enquanto alguns podem ser ótimos em entregar funcionalidades de produto, outros podem ter sua força em evoluir o cenário tecnológico. E todos saem ganhando.

Torne sua liderança orientada a processos

Conseguir fazer as coisas em qualquer organização de tecnologia requer muito mais do que apenas habilidades técnicas. Quanto mais indefinido o sistema, mais talento político os engenheiros precisarão para encontrar um caminho para contribuição significativa e reconhecimento.

Muitos grupos terão dificuldade com isso. De introvertidos a minorias ou pessoas remotas, eles lutam para contribuir, ser reconhecidos e crescer quando o que é necessário é influenciar as pessoas certas.

Como gestor, você tem o poder de mudar esse desequilíbrio. Primeiro, crie métodos de comunicação diretos e inclusivos, de reuniões a opções escritas. Depois, desenvolva sistemas transparentes para propor ideias e receber feedback que não exijam aprovações.

Um sistema de contribuição técnica mais bem definido nivelará o campo de jogo, facilitando para todos encontrar seu caminho.

Equilibre a senioridade do seu time

Embora ter um time “altamente experiente” seja o paradigma que a maioria das empresas busca, ter times sem diversidade de senioridade tornará difícil encontrar caminhos de crescimento para todos. Se todos os engenheiros são especialistas, como alguém se torna melhor em ensinar?

Além das oportunidades de crescimento, a realidade das empresas é que nem todo trabalho é empolgante, novo e desafiador para alguém que está na indústria há muitos anos. Ter engenheiros com diferentes níveis de experiência significará que diferentes pessoas se interessarão por vários tipos de trabalho, melhorando a entrega como um todo.

Alinhe objetivos individuais aos objetivos do time

Por último, facilite seu trabalho. Alinhe objetivos individuais com o que o time precisa alcançar. Embora o manual padrão de gestão diga que engenheiros devem definir seus próprios objetivos, esforço leva à motivação. Sugerir metas de crescimento que se alinhem com desafios do time pode ser um empreendimento tão empolgante para um engenheiro quanto os que ele mesmo criou. Além disso, trabalhar em algo que ajuda o time significará mais apoio dos colegas e da empresa. E mais reconhecimento pelo sucesso!


Em resumo, lembre-se disso. Da próxima vez que pensar em como tornar seus engenheiros realizados, melhore seu time.

Gostou deste post? Escrevo sobre liderança em times de engenharia de software. Assine para ficar por dentro.