O Desenvolvimento do Desenvolvedor no Século 21

Olá, meu nome é Stefano e sou Líder em treinamento do time de SRE aqui na Convenia. Venho aqui hoje contar para vocês como está sendo o desafio de treinar novos Desenvolvedores nesse mundo cada vez mais complexo e avançado da programação e também sobre um case de sucesso de uma Desenvolvedora que se mostrou excepcional nesses seis meses que faz parte do meu time.

Antes de começar a falar sobre como está sendo hoje, convido vocês a uma viagem no tempo comigo, não muito longe, só três anos atrás quando entrei aqui na Convenia como um Desenvolvedor Backend Júnior, naquela época a Empresa estava terminando de passar por uma migração de tecnologia, indo de um modelo MVC usando Codeigniter e indo para um Monolito em Laravel. Ou seja, para conseguir desenvolver eu só precisava saber PHP e MYSQL, e no máximo, um pouco de HTML para ajustar alguma coisa no que se mostra ser sempre um pesadelo na vida de qualquer desenvolvedor novo em uma instituição, o famigerado “Sistema Legado”.

Nesses últimos anos, a Convenia passou por diversas mudanças e modernizações, agora, um Desenvolvedor Junior cai direto em um sistema distribuído com micro serviços, bancos não relacionais, SPA’s, BFF, Graphql e mensageria. Com tudo isso, fica fácil de ver como a curva de aprendizado de alguém novo vem se tornando cada vez mais íngreme ao longo do tempo.

Esse cenário atual nos leva à seguinte questão: o que podemos fazer para que essa curva de aprendizado seja suavizada o máximo possível para que todos consigam escalar até o topo? Para conseguir chegar a uma resposta para isso, trabalhei em uma metodologia de treinamento e acompanhamento junto a essa Desenvolvedora que iniciou no meu time, e para chegar nesse resultado, nada melhor do que trazer todos os exemplos que tive das minhas lideranças ao longo desses anos.

É um fato de que ao longo do seu desenvolvimento existem marcos e divisores de água que te mostram uma nova realidade na qual você se sente cada vez mais motivado a continuar evoluindo, comigo por exemplo, o primeiro contato que tive com esse sentimento foi quando eu já estava a quase três horas tentando corrigir um código de produção, mas ele estava complexo demais, foi quando meu primeiro líder aqui na Convenia chegou do meu lado e me perguntou: “Você sabe o que esse código deveria fazer?”, eu respondi: “Sim, deveria fazer isso, isso e isso”, o que fez ele simplesmente selecionar todo aquele código, apagar e dizer: “Então escreve o que ele deveria fazer ao invés de tentar entender o que ele fazia antes, já que estava errado”.
Esse pode até parecer um caso sem importância à primeira vista, mas isso para um cara inseguro como eu era, começando a programar e se imaginando incapaz de dar conta do que estava enfrentando, aquilo mudou meu mundo. Nos próximos 20 minutos aquele código já estava sendo usado pelo cliente impactado por aquele bug, foi quando percebi que “de repente” eu realmente comecei a entender o que estava fazendo.

O segundo ponto, e talvez o mais importante, anda muito próximo a esse: a confiança, essa palavra expande os horizontes de qualquer desenvolvedor júnior, então precisamos trabalhar tanto a confiança que ele deve ter no seu próprio código e no produto em que ele trabalha, bem como a confiança que passamos pra ele como líder. Se tem uma coisa que aprendi com isso, foi que codar é muito fácil, mas só se você sabe o que é esperado daquele código, uma vez que você entende a regra de negócio, coda-la é um mero detalhe, e esse ensinamento eu devo totalmente ao CTO da Convenia, o cara que discute e estressa a regra de negócio junto com você, sempre ouvindo seus pontos para trazer o máximo desse conforto tão importante na hora de desenvolver.

Foram essas lições que me ajudaram a pavimentar o caminho que essa Desenvolvedora iria trilhar ao meu lado, incluindo essa última que aprendi com meu líder atual, nenhum time deve seguir uma liderança, todos devem caminhar juntos para o objetivo em comum que pode ser uma entrega importante, a resolução de um problema grave ou até mesmo no aprendizado do dia a dia.

Agora sem mais delongas, vamos ao passo a passo que desenvolvi, começando pelo passo mais importante: ‘Acompanhamento diário do aprendizado’, que consiste em diariamente tirar entre cinco e dez minutos para ouvir tudo o que o desenvolvedor aprendeu nas últimas vinte e quatro horas, estendendo para até vinte minutos no fim da semana para repassarem um resumão de quais foram os maiores desafios, aprendizados e dúvidas que surgiram nesse período. Isso vai te ajudar a entender a melhor forma de se comunicar com essa pessoa, a quantidade de detalhes que você deverá dar na próxima vez que passar uma tarefa ou dar uma explicação, além de te aproximar muito do seu liderado e permitir que você meça diariamente seu nível. Mas o mais importante nesse passo é garantir a concretização do conhecimento, garantindo que nenhuma dúvida ficou em aberto e nenhuma lição passou em branco.

O segundo passo: ‘Uma hora de estudos por dia’, foi algo que roubei de um ex-funcionário e líder do time considerado de maior desempenho, o BPO, que nem é de desenvolvimento, mas acredito que bons exemplos podem muito bem ser buscados de fora de nossas bolhas também. Nessa uma hora, o ideal é que os estudos sejam focados nas tecnologias da empresa, aqui no nosso caso, disponibilizamos uma lista de cursos sobre protocolo AMQP, MongoDB, PHP e Laravel para que na hora de desenvolver, eles tenham um estranhamento menor ao trabalhar nessas tecnologias.

Como aqui estamos falando do exemplo de um time que também faz a sustentação do produto, o terceiro passo: ‘Integrar às resoluções de bugs’, e o quarto passo: ‘Tratativa de bugs já resolvidos em ambiente local desatualizado’, se fizeram bem necessários, e em suma, se resumem a trazer essa nova pessoa junto à tratativa de um problema, mostrando sua forma de pensar, explicando o background que você tem sobre essa parte do sistema antes de começar a investigar e explicar por onde você começa e porque. Já o quarto passo existe por que com a correria do dia a dia, as vezes você acaba resolvendo um problema em produção durante uma outra reunião ou durante o tempo de estudo do seu liderado, e esses são os casos perfeitos para você deixar ele explorar o problema dentro do seu ambiente local, sem se preocupar com a pressão envolvida em querer resolver um problema o mais rápido possível, já que sempre existe um ou mais clientes impactados em um problema, e nesse setor, trabalhar o psicológico é tão importante quanto trabalhar a confiança.

O que nos leva diretamente ao passo cinco: ‘Entrega de pequenas features’, muitas vezes vocês verão desenvolvedores com medo de começar a codar, aquele receio de querer sempre fazer tudo da melhor forma desde o começo, mesmo a gente sabendo que é impossível. Dar entregas pequenas para um junior ajuda a melhorar a sua confiança, além de ajudá-lo a organizar melhor suas ideias, entender seu próprio processo criativo, limitações e medos.

O sexto e último passo: ‘Passar a autoria de um serviço’ - trata do sentimento de dono que todo desenvolvedor tem pelo seu código - nesse caso, como a Convenia trabalha nesse modelo distribuído, eu ajudei minha Desenvolvedora desde o começo na criação de um serviço que viria a ser mantido, melhorado e cuidado por ela. Esse sentimento é transformador, durante o desenvolvimento desse serviço ela veio mostrando sinais claros de amadurecimento, evolução e senioridade que não é comum em um profissional no começo da sua carreira.

Agora, uma constante entre esses passos é o passo oculto: ‘Introduzir o máximo de regras de negócio possível’. Como falei anteriormente, às vezes ensinar a regra de negócio é mais importante do que ensinar a forma de se fazer uma tarefa, então sempre que possível aproveite para ensinar, ensine durante uma call com um cliente, ensine durante a reunião diária com o time, ensine durante o code review, ensine durante um deploy, ensine durante a explicação da tarefa, ensine durante a resolução de um problema e quando você perceber, será você que estará aprendendo com seus liderados.

Não existem fórmulas mágicas quando falamos de pessoas, cada um terá seu próprio tempo de desenvolvimento, sua própria maneira de absorver as coisas, uma hora no dia que consegue aprender melhor e aquela que já não consegue tanto, vai de cada líder saber enxergar isso em cada liderado e ter tato para tratar cada um de acordo com suas peculiaridades. Essa foi a fórmula que encontrei para ajudar essa Desenvolvedora em particular, mas é com muito orgulho que digo que os resultados foram incríveis, em apenas seis meses, uma desenvolvedora júnior que chegou com três meses de experiência já é considerada de nível pleno por profissionais com mais tempo de carreira no PHP do que ela tem de vida.

Vou concluir esse artigo deixando a seguinte lição: trabalhe a confiança de seus liderados, dê a eles um motivo para melhorar todos os dias, os desafie e mostre como eles são capazes de evoluir, ensine, nunca perca essa oportunidade e sempre mostre para eles como essas lições fizeram diferença ao longo de um code review ou de um feedback. E nunca se esqueça do mais importante: eles são pessoas como você, irão cometer erros, mas esses erros jamais deverão ser passivos de punição ou vergonha e sim ser a melhor oportunidade de evoluir, aprender e repetir tudo de novo, afinal, esse é o ciclo de desenvolvimento de um desenvolvedor.

20