O Lado Humano da Engenharia de Software: Reflexões sobre Crescimento e Impacto
Acredito que não seja tão difícil entender o que nos torna bem-sucedidos em nossas carreiras, mas às vezes precisamos de um guia para seguir em frente. Então, dediquei um tempo para ler "The Software Engineer's Guidebook" e compartilharei algumas das minhas reflexões sobre o livro, com base na minha perspectiva e experiência como Engenheiro de Software e Líder de Equipe.
Sobre o Livro
O livro, “The Software Engineer’s Guidebook - Navigating Senior, Tech Lead, and Staff Engineer Positions at Tech Companies and Startups”, foi escrito por Gergely Orosz, autor da The Pragmatic Engineer Newsletter.
Neste livro, Gergely compartilha muitas percepções e dicas com base em sua experiência. Do meu ponto de vista, este conteúdo é uma ótima oportunidade para entender os pontos-chave para ser bem-sucedido em sua carreira.
Terei cuidado para não revelar muitos spoilers, mas alguns podem ser inevitáveis. Farei o meu melhor.
Minhas Reflexões
Durante a leitura, pensei em muitas situações que aconteceram na minha carreira e compartilharei abaixo os insights mais importantes.
Bons Conselhos para Crescimento
Não senti que este livro revelou grandes surpresas. A maior parte do que li, entendo como comportamento básico que um Engenheiro de Software deveria ter.
Acredito que os últimos cinco anos atuando como Líder de Equipe mudaram minha perspectiva, permitindo-me entender este livro muito bem. Liderar uma equipe me ajudou a ter uma visão geral e entender como proceder em muitas situações. Além disso, essa experiência me permitiu entender como uma empresa aborda a progressão de carreira de um engenheiro.
Algumas coisas que lemos não fazem sentido até que tenhamos experiência. Acredito que alguns exemplos podem ser difíceis de entender se você estiver em uma posição inicial.
Não se preocupe, porque você pode e chegará lá! Mas aqui está minha primeira reflexão:
Este livro explicou muitas coisas que eu sei hoje, mas gostaria que alguém tivesse me contado quando comecei como desenvolvedor.
Este é um bom livro para quem está começando como Desenvolvedor de Software e precisa entender como funciona o crescimento profissional em uma empresa. Também é um bom livro para desenvolvedores experientes que desejam garantir que continuem crescendo e permaneçam no caminho certo.
Assuma o Controle de Sua Carreira
Simplesmente querer crescer não é suficiente. Você precisa estar no comando de sua carreira. Esta não é responsabilidade do seu líder; é sua. Aqui está minha segunda reflexão:
Pense no seu crescimento profissional e tente responder onde você quer estar nos próximos anos. Não deixe essa decisão para o seu líder.
Quando você sabe para onde quer ir, é mais fácil escolher o caminho correto. Eu sei que este pode ser um exercício desafiador e estressante, mas somente você pode fazê-lo. Não seus colegas, nem seu líder, nem sua empresa. Você precisa estar no comando de sua carreira.
Claro, você pode pedir ajuda de uma pessoa experiente para esclarecer caminhos, entender desafios ou discutir experiências, mas somente você pode decidir para onde ir e como investir seu tempo.
Entregue Valor
Às vezes, trabalhamos duro e não nos sentimos reconhecidos. Isso causa um sentimento ruim e desmotivação. A melhor maneira de evitar isso é estar alinhado com seu líder para entender o que é mais importante para entregar valor. Portanto:
Converse com seu líder para entender como você pode entregar valor para a equipe, projeto, outros engenheiros ou a empresa.
Não desista. Querer crescer não garante o sucesso. Você precisa garantir que está se movendo na direção certa e ter oportunidades onde está.
Pedir feedback também é importante para entender se você está no caminho certo, precisa melhorar em algumas áreas ou fazer ajustes. Faça isso periodicamente, não apenas antes das avaliações de desempenho. Lembre-se: sua carreira é sua responsabilidade, então permaneça no controle.
Entenda o Porquê
É prejudicial começar a desenvolver um novo recurso ou correção de bug sem entendê-lo completamente. Podemos pensar que estamos sendo produtivos ao fazer as coisas mais rápido, mas muitas vezes não é o caso. Às vezes, falhamos. Para evitar isso, tenha em mente o seguinte:
Certifique-se de saber por que você precisa atingir um objetivo. Dessa forma, você entenderá por que, como e quando precisa fazer algo, porque verá o cenário geral.
Certifique-se de que tudo esteja claro fazendo perguntas, discutindo casos extremos e efeitos colaterais. Não se esqueça de que, quando se trata de código, você é a pessoa especialista. Somente você pode revelar certos detalhes que as pessoas de Produto, Designers ou Stakeholders podem não ver.
Antes do desenvolvimento, é importante enxergar o “todo”. Isso torna mais provável que você atinja o objetivo esperado, permitindo que você o divida em partes menores, entenda as principais dificuldades ou desafios e os estime com precisão.
Esclareça para Desempacar
Já vi muitos desenvolvedores excelentes ficarem presos em problemas, lutando para entender o que fazer. Tente evitar isso entendendo e planejando seu trabalho e não tenha medo de pedir ajuda.
Mesmo que um problema seja grande, divida-o para entender os desafios e onde você está focando seus esforços. Se você não sabe como fazer isso, peça ajuda.
Quando você divide uma tarefa grande em partes menores, você tende a isolar os problemas quando eles ocorrem. Como você não está focado em resolver toda a tarefa de uma vez, mas em uma parte específica, é mais fácil entender o problema real. Isso evita que você se sinta desesperado em reuniões diárias (ou em qualquer outra reunião) porque você está progredindo em uma parte específica do quebra-cabeça maior.
Lembre-se: você não precisa ter todas as respostas, nem mesmo como um desenvolvedor experiente. Mas você precisa ser capaz de dividir os problemas em partes menores para criar um plano conciso.
Esteja Ciente do Seu Nível
O nível de senioridade é outro tópico importante. Quais são as principais diferenças entre um Desenvolvedor de Software e um Engenheiro de Software? Você já considerou isso? Muitas pessoas pensam que não há diferença, mas compartilharei minha perspectiva. Mas primeiro, pense sobre isto:
Entenda, por meio de conversas com seu líder e colegas de equipe, como você está desempenhando seu trabalho.
Um Desenvolvedor de Software pode escrever código, depurar e entregar tarefas, mas um Engenheiro de Software vai mais fundo. Ele pode planejar um recurso, descobrir e discutir requisitos, estimar esforço, construir uma solução, publicá-la e mantê-la. Essa pessoa pode lidar com todo o processo.
Um Engenheiro de Software entrega valor para a equipe, não apenas para si mesmo. Eles fornecem orientação, tomam iniciativa, ajudam a equipe a entender os desafios de software, colaboram efetivamente, orientam outros e aprendem continuamente. Eles também entendem os desafios da equipe e da empresa, os objetivos trimestrais e podem dividir grandes tarefas em tarefas menores.
Acredito que isso seja um tanto controverso e, às vezes, subjetivo. Pode afetar nossos egos, mas acredite em mim, há uma grande diferença entre alguém que sabe escrever código e alguém que entende por que escrever código e como ele atinge um objetivo.
Pergunte ao seu líder e colegas de equipe sobre suas entregas. Busque feedback sobre seu trabalho e desempenho. Pergunte aos seus colegas sobre a percepção que eles têm sobre seu trabalho. Só assim você entenderá realmente onde está e qual é a melhor forma de continuar evoluindo. Pense nisso!
Não é Tudo Sobre Código
Muitas vezes pensamos que a maneira mais rápida de crescer é aprendendo novas tecnologias, frameworks ou padrões de projeto. Mas esquecemos que trabalhamos com pessoas em uma equipe, então também precisamos aprimorar nossas habilidades pessoais, como comunicação (assíncrona e síncrona), gerenciamento de tempo e colaboração. Tenha isso em mente:
Mesmo que você esteja trabalhando como desenvolvedor, você lidará com pessoas e as habilidades humanas são cruciais para o crescimento e para se fazer entender.
Não é apenas você e a máquina. Há uma equipe com você. Não se esqueça disso. Sempre se comunique bem, fornecendo atualizações sobre as tarefas que você trabalha, reuniões e documentando decisões.
Entenda Quando uma Tarefa Está Concluída
É incrível concluir uma tarefa e encerrá-la, mas é esse o fim? O que vem a seguir? Você deve acompanhar para garantir que sua tarefa ou correção de bug foi aplicada corretamente ou resolveu o problema principal? A resposta é sim. Então, mais uma coisa para se manter em mente:
Sua tarefa está concluída quando o objetivo for concluído, ou seja, quando seu cliente confirmar que tudo está bem por meio de feedback.
Sempre desenvolvemos um produto para um cliente, portanto, precisamos desenvolver o que ele precisa. É simples assim.
Habilidades Pessoais São Cruciais (Às Vezes Mais do que Habilidades Técnicas)
Outro tópico controverso. Conforme você cresce em sua carreira como Engenheiro de Software, seu impacto aumenta. Você provavelmente fará mais contribuições que afetarão toda a equipe, departamento ou até mesmo a empresa, impactando mais pessoas com seu trabalho. É comum usar essa experiência para trabalhar mais próximo das pessoas de Produto, Designers, Stakeholders e outros Gerentes para entender o que é realmente necessário para causar um impacto real na empresa.
Por causa disso, as habilidades básicas são cruciais para progredir além de uma carreira de Engenheiro de Software Sênior, como para um cargo de Engenheiro de Equipe. Eu acho a tradução um pouco estranha, então, em inglês é comum ver o termo Staff Engineer. Poderíamos chamar também de Engenheiro Sênior de alto impacto, mas vou continuar usando o nome Staff Engineer para simplificar.
Não negligencie as habilidades humanas. Inclua o desenvolvimento de áreas como comunicação, gerenciamento de tempo, gerenciamento de reuniões, gerenciamento de estresse, colaboração, inteligência emocional, escuta ativa, empatia e resolução de conflitos em seu roteiro. Aqui está a dica:
Por mais que você goste apenas de desenvolver, construir relacionamentos com outras pessoas é inevitável para o crescimento e para criar um impacto maior.
Isso geralmente leva ao desenvolvimento de habilidades de liderança e, às vezes, você pode se deparar com decisões sobre qual direção tomar - assim como aconteceu comigo. Mas não tenha medo. Isso o tornará mais forte e mais capaz de enfrentar desafios.
Conclusão
Este livro tem dezenas de ótimas dicas e conselhos, e compartilhei algumas das minhas reflexões sobre eles. Embora engenheiros experientes possam achar alguns conselhos familiares, “The Software Engineer’s Guidebook” fornece dicas e insights valiosos para a progressão na carreira e é uma leitura obrigatória para aqueles que procuram avançar para uma posição sênior ou além.
Cada empresa é diferente e você precisa entender as regras e expectativas para seu cargo atual ou aspirações futuras. Mas estes são os fundamentos e eles tendem a funcionar bem.
Como mencionei, não encontrei nenhuma revelação inovadora neste livro, mas gostaria que alguém tivesse me contado essas coisas quando comecei na área de TI.
Portanto, se você é novo nesta carreira, recomendo fortemente este livro. Se você já é um Engenheiro Sênior ou Staff, este é um excelente material para se lembrar de como você alcançou seu cargo atual e como continuar crescendo.
Espero que você tenha gostado deste post e considere ler o livro. Lembre-se de que compartilhei meus pensamentos com base em minha experiência como Engenheiro de Software e Líder de Equipe. Se você tiver um ponto de vista diferente, por favor, compartilhe nos comentários. Será legal discutir sobre isso.
Até o próximo post!