Como fui contratado

Texto publicado pela primeira vez em 03/12/2020 e atualizado em 02/02/2022

Trabalho aqui na Passei Direto há três anos e realmente me surpreende como evoluí desde os meus dias de estágio até o presente como DevOps Engineer. Aqui vou contar como desenvolvi um projeto bem relevante ainda como estagiário, como foi minha transição para DevOps e como tirei nosso site do ar no processo, bem… vou contar partes principais do meu progresso até hoje.

Iniciando

Comecei como estagiário de Back Office. Na época, tínhamos algumas rotinas que exigiam muito trabalho manual. Uma delas, e provavelmente a mais extensa e delicada, era a entrada de novos colaboradores. Era uma rotina estressante, com várias etapas como:

  • Obter dados de um formulário Google (preenchido por nossos colegas da equipe de People ou pelo futuro gerente do novo colaborador) contendo todas as informações de que precisaríamos para este processo;
  • Criar a conta de e-mail corporativo do colaborador;
  • Criar uma conta / enviar convite para cada serviço que o colaborador iria precisar, isso seria variável dependendo do seu perfil de trabalho (por exemplo, um desenvolvedor teria um perfil de acesso diferente de um gerente de produto e assim por diante);
  • Editar e enviar um e-mail de onboarding para o colaborador, colocando seu futuro gerente e monitor de onboarding em cópia (o conteúdo deste e-mail também era variável de acordo com o perfil do colaborador);
  • Por fim, configurar o computador do novo colaborador, também com base no seu perfil de trabalho (neste caso, os programas instalados seriam variáveis).

Acho que ficou bem claro o porquê de essa rotina ser tão delicada. Não era apenas extensa, mas também pouco confiável por causa de todo o trabalho manual necessário. Estávamos contratando muito naquela época, então imagine passar por todo esse processo três ou quatro vezes no mesmo dia. Éramos apenas eu e mais um colega de trabalho, o Jonata, nesta missão, então era cada vez mais difícil lidar com tudo isso.

Um passo de cada vez

Tínhamos esse objetivo em nosso roadmap de automatizar muitas de nossas rotinas, incluindo a que descrevi acima. Com todo esse trabalho manual quase não tínhamos tempo para começar a implementar a automação. Então começamos a dar um passo de cada vez.

O colega que mencionei, Jonata, implantou um servidor de imagem na nossa rede interna para que pudéssemos criar instalações do Windows pré-configuradas e assim automatizar a configuração dos computadores.

Ele também implantou um sistema de inventário (Snipe-IT) para nos ajudar a controlar ativos e ficar de olho na necessidade de comprar mais recursos.

Tudo bem, algumas coisas já estavam no caminho do sucesso, mas ainda tínhamos aquela dor que descrevi no início.

Aqui na Passei Direto , temos um evento anual chamado Hackathon , onde fazemos um brainstorming de algumas ideias, nos dividimos em pequenas equipes e depois passamos dois dias — incluindo a madrugada — tentando desenvolver essas ideias. No final, todos apresentamos os resultados e o vencedor ganha um prêmio. Além disso, a ideia do vencedor tem uma grande chance de subir em produção!

Nesse evento do ano de 2019, Jonata e eu decidimos aproveitar o período para começar a desenvolver uma solução para automatizar o processo de entrada de novos colaboradores. Com a ajuda de outro colega, Leon (da equipe de DevOps), começamos a escrever scripts Python para interagir com a API do Google.

Dividimos o trabalho de três maneiras:

  • Leon estava escrevendo o script para criar contas em nossa organização do GSuite;
  • Jonata estava encarregado do oposto… deletar contas;
  • E eu estava encarregado do script de atualização.

Escrever esses três módulos nos deu uma idéia do que isso poderia se tornar e como otimizaria nosso trabalho.

Não pudemos testar tudo juntos porque Jonata e Leon tiveram que ir embora e eu fiquei só pelo resto da noite.

Essa foi a primeira vez que conheci Python e foi amor à primeira vista. Eu estava tão animado com aquele projeto que fiquei acordado até de manhã (com a ajuda de alguns Redbulls) ajustando os módulos que escrevemos.

De madrugada, eu já tinha um protótipo totalmente funcional rodando em uma tela de terminal, recebendo entradas e tratando elas.

No dia seguinte, mostrei os resultados aos meus colegas e eles gostaram muito. Mesmo sendo realmente simples, pela primeira vez programando em Python, foi um resultado muito bom. Na verdade, posso dizer que foi a primeira vez que tentei resolver problemas reais de programação, o tipo de coisa que você não vê na faculdade.

Então, basicamente, depois do Hackathon, comecei a me dedicar mais a este projeto. Jonata e eu costumávamos pensar muito em como as coisas poderiam evoluir. Ele era como o gerente do projeto e eu o desenvolvedor.

Para tornar o sistema mais usável, tivemos a ideia de criar uma interface web onde tudo pudesse ser feito em poucos cliques. Então, Leon me falou sobre o Django (ferramenta de desenvolvimento web para Python), e como seria mais fácil reaproveitar o código existente.

Tá tudo dando errado

Eu não tinha ideia de por onde começar, além de mergulhar na documentação do Django e aprender a usá-lo. Depois de me familiarizar com o básico, fui capaz de criar uma página de formulário onde preencheríamos todas as informações do novo colaborador e, em seguida, executaríamos alguma coisa quando esse formulário fosse submetido.

É aqui que as coisas começaram a piorar. Passei literalmente semanas lutando para fazer a postagem do formulário funcionar. Eu estava obcecado, até trabalhando nos fins de semana. Vou deixar claro que não estava sendo pressionado de forma alguma pela minha equipe, era uma pressão que eu estava colocando em mim mesmo pra ter pelo menos algum progresso.

Depois de muita insistência, num domingo à noite (por volta das 23h), finalmente consegui fazer funcionar. A postagem do formulário chamou uma função que escrevi para enviar uma solicitação à API do Google e criei com sucesso uma conta em nossa organização do GSuite. Cada vez que uma conta é criada, toda a nossa equipe recebe um alerta por e-mail… então você já sabe o que aconteceu. No dia seguinte, meus colegas me deram aquele olhar de “Eu sei o que você fez ontem à noite”, haha.

Ok, funcionou! Mas preencher aquele formulário todas as vezes ainda era um problema. Não deveríamos nos preocupar em preenchê-lo, nossa preocupação era de utilizar as informações já fornecidas. Essas informações deveriam ser estáticas e o sistema lidaria com isso automaticamente para nós.

Ok, funciona … mas é feio

Pensando assim, tive uma ideia: vamos aposentar aquele formulário do Google, e agora todas as informações passarão pelo nosso aplicativo. Bingo!

Essa parte do app estava totalmente funcional, pronta pra rodar, mas a interface… Não sou designer, sabe, então você pode imaginar como era feia.

Não poderia lançar um projeto tão feio para toda a empresa usar, certo? Eu estava tão animado para lançar isso e precisaria gastar mais tempo (e quero dizer muito tempo) criando o HTML e CSS (como eu disse, não sou um designer, então levaria muito tempo). Mas Leon (sim aquele cara de antes, você o conhece) me falou sobre o AdminLTE . Leon, se você está lendo isso, você salvou minha vida naquele dia ❤️

O AdminLTE é uma biblioteca de templates HTML, principalmente para aplicativos do tipo admin. Você pode personalizá-lo como quiser (cores, ícones, barra de navegação, etc). É muito fácil de usar, então passei apenas um dia refatorando o design do site. E lá estava ele, lindo como nunca!

Lançando o projeto

Chegou o dia mais desejado: o dia em que mostraríamos o projeto aos nossos colegas da equipe de People.

Lembro de mostrar informalmente para Lian e Jessica nas mesas delas. Eu disse a elas para abrir uma guia no navegador e digitar o endereço do aplicativo. A reação delas foi muito engraçada: “Você fez isso ??!”. E eu, com todo o prazer, comecei a explicá-las como funcionava o site e como ajudaria a todos.

Logo decidimos aposentar aquele formulário do Google pra sempre e começar a usar definitivamente o PDU (como chamamos nosso aplicativo), abreviação de PD UserManager (e PD é a abreviação de Passei Direto).

Isso não é tudo pessoal

Ao longo do caminho, vimos a oportunidade de automatizar mais coisas usando o PDU .

Tínhamos outra rotina estressante: criar certificados VPN.

A VPN é uma ferramenta essencial pra que os desenvolvedores consigam acessar nossos servidores de qualquer lugar. E alguns desenvolvedores dependiam totalmente de uma conexão VPN para continuar trabalhando. Nossos certificados estão configurados pra expirar com uma certa frequência e só sabíamos que um havia expirado quando alguém nos pedia ajuda.

Tínhamos que acessar a interface web de administração da VPN, criar um certificado com todas as suas configurações, depois criar um cliente também com todas as suas configurações, exportar o arquivo compactado e enviá-lo ao colaborador.

Era um processo muito longo para realizar uma coisa simples. Então a ideia era automatizar essa rotina com apenas alguns cliques usando a interface do PDU. Além de agilizar todo o processo, alertar quando certificados estivessem perto de expirar (o limite escolhido foi de dois dias antes do vencimento), para que pudéssemos atuar com antecedência.

Não foi nada fácil de implementar, tentei várias abordagens diferentes como enviar requisições diretamente para a interface web da VPN, também tentei usar o Selenium para navegar na interface web e passar por toda a rotina, mas nenhuma delas foi muito eficaz.

Então decidi usar o Paramiko. É um pacote que nos permite fazer conexões remotas usando código Python. Literalmente salvou minha vida ❤️!

Para resumir, o que eu fiz foi:

  • Fiz um formulário com duas entradas, a primeira era um campo de seleção para escolher a região da VPN. A segunda era uma entrada de texto onde digitaríamos o nome de usuário do colaborador.
  • E havia três botões: Criar, Verificar e Revogar . O botão “Criar” criaria, obviamente, um certificado usando o nome de usuário fornecido e o enviaria automaticamente ao colaborador. O botão “Verificar” iria checar se o certificado para o nome de usuário fornecido está ativo ou expirado. E o botão “Revogar” desativaria o certificado para o nome de usuário fornecido.

Nos bastidores, o PDU está se conectando diretamente à máquina do servidor VPN e executando comandos Linux para passar por toda a rotina, dependendo de qual botão clicamos no formulário. Também implementei uma tarefa agendada (que é executada todos os dias às 10h) para verificar se há certificados que estão prestes a expirar e nos alertar por e-mail.

Bruxaria?

Após automatizar a rotina da VPN, outras ferramentas foram implementadas, mas acho que uma delas merece mais atenção. Lembra daquele sistema de controle de ativos que eu citei no começo? Sim, aquele que Jonata implementou — o SnipeIt. Estávamos usando não apenas para gerenciar nossos recursos físicos, mas também pra ter controle de qual pessoa estava usando qual ativo (computador, acessório, etc.).

Quando estava pra chegar um novo colaborador, tínhamos que escolher manualmente o computador mais adequado ao seu perfil. E também associar manualmente todos os ativos a ele no sistema de estoque. Mais um trabalho manual.

Então decidimos fazer uma integração entre o PDU e o SnipeIt. Esse processo passaria a fazer parte da rotina de entrada do colaborador.

Na época tínhamos uma nova companheira de equipe, Maria Izabel havia se juntado recentemente ao time como Jovem Aprendiz — hoje já contratada! Então, ela e eu começamos a implementar a automação para isso.

O resultado foi tão satisfatório que parecia bruxaria ou o PDU estava criando consciência!

Agora, com apenas um clique, o PDU procura no sistema de estoque por qualquer ativo disponível que corresponda ao perfil do colaborador e os associa automaticamente a ele.

O momento

O PDU se tornou um aplicativo sólido, nos dando muito mais do que esperávamos! Isso nos economizou muito tempo para fazer outras coisas e iniciar outros projetos.

Todo esse esforço chamou a atenção do meu líder na época (Fabiano). Ele era nosso líder e também fazia parte da equipe DevOps. No final do ano, nossa empresa estava entrando em uma nova era, estávamos nos dividindo em squads (equipes multifuncionais) e o Fabiano me chamou pra entrar em um squad junto com a galera de DevOps pra aprender e começar neste novo mundo.

Esse foi o momento! Tive a oportunidade de fazer coisas novas e iniciar uma nova jornada! Então, claro, aceitei o convite e em janeiro de 2020, me tornei o primeiro Estagiário DevOps na Passei Direto!

Reiniciando

Trabalhei junto com o Leon, absorvendo tudo que pude. Aprendi muito sobre CI/CD, Docker, CloudFormation, CDK, em tão pouco tempo. Não porque eu era super inteligente, mas por toda a ajuda que recebi dos meus colegas. Senti que estava começando tudo de novo (no bom sentido).

Naquela época eu não fazia parte de nenhum squad específico, eu pegava tarefas mais isoladas. Tive bastante espaço pra errar e aprender trabalhando de forma neutra entre os squads. Mas depois de alguns meses, fui convidado a entrar em um squad, que é meu time ainda hoje — o PD Produtores (ou PDP como chamamos aqui, ou Melhor Time da PD também serve). Fui extremamente bem recebido, todos foram bem solícitos e me ajudaram muito no meu desenvolvimento.

Eu era o DevOps do squad e, embora meus colegas entendessem que eu era apenas um estagiário, eu sabia que era muito mais responsabilidade do que antes.

O dia em que tirei nosso site do ar

Para quem não conhece nosso produto, somos uma rede de estudos onde você pode produzir e consumir materiais de diferentes níveis de ensino. Então, quando digo “site” aqui, é o site Passei Direto.

Minha equipe é responsável por algumas aplicações que envolvem a parte de conteúdo e o upload é uma delas, que é crucial no nosso produto. Então minha tarefa era migrar nossa aplicação de upload pra rodar em um ambiente dedicado, separada das demais em produção. Não vou mentir, estava muito nervoso, foi uma das primeiras tarefas que fiz no novo squad e foi uma grande responsabilidade. Hoje vejo que era uma tarefa até simples, mas na época eu não tinha muita experiência e estava com muito medo de dar errado.

Depois de estudar a melhor maneira de fazer isso, comecei a desenvolver uma nova infraestrutura pra aplicação em paralelo com a atual da época, as coisas estavam indo muito bem. Até o dia em que implantei a nova estrutura…

Bem, eu baguncei as configurações e isso impactou todas as outras aplicações em produção. Nada mais estava respondendo, e milhares de alertas começaram a aparecer no Slack. Não achei que fosse por causa de algo que fiz, mas sim, foi minha culpa.

Com muita vergonha, enviei uma mensagem de desculpas a todos e, a forma como eles reagiram foi um choque… (“Continua no próximo episódio… só que não”).

O pessoal foi muito empático dizendo que estava tudo bem, “acontece” eles disseram. Foi engraçado porque as pessoas começaram a contar erros terríveis que também cometeram. Isso me fez sentir mais aliviado e foi um momento que nunca vou esquecer!

Desafios e mais desafios

Desde então os desafios vêm crescendo e venho desenvolvendo cada vez mais!

Aqui estão alguns projetos que surgiram nesse período:

  • Implementação de uma biblioteca de migração de banco de dados. É uma inovação do nosso time, que já tem facilitado nossa rotina e vai facilitar também a de outros aqui na PD.
  • Migração das nossas bibliotecas pro CodeArtifact da AWS. Uma sugestão minha para utilizarmos o CodeArtifact pra publicar e instalar nossas bibliotecas internas. É um projeto em andamento, mas que já tem bastante potencial de nos ajudar a economizar alguns (muitos) dólares na nossa cloud.
  • Projeto de análise de eficiência dos times. Também é um projeto em andamento que montei com meu Tech Manager na época, onde coletamos dados de diversas fontes e, com base nas Four Key Metrics, tentamos analisar nossa eficiência de entrega de software.
  • Dockerização dos nossos projetos. Iniciativa minha para criar setups Docker pro desenvolvimento local e pipelines dos nossos projetos, com o objetivo de trazer mais integridade entre ambientes diferentes.

E aqui na Passei Direto é assim! Todo dia surgem novos desafios que alavancam o aprendizado de uma forma surreal!

É sobre as pessoas ao seu redor

Embora eu tenha tirado nosso site do ar por um tempo naquele dia, fui contratado como DevOps Engineer depois de alguns meses. A jornada até aqui começa bem no início deste post. Cada erro, cada lição aprendida, cada conselho, tudo me levou a isso.

E se há uma lição que posso tirar de tudo isso é que: não é sobre o quão inteligente você é, é sobre as pessoas ao seu redor.

Eu nunca teria sido contratado se não estivesse cercado de ótimas pessoas me ajudando, em um ambiente confortável e confiável!

Vou dedicar esse artigo ao Jonata, Robson, Leon, Fabiano, Larissa Paz e a todo o meu squad!

Obrigado galera vocês são os melhores!

--

--