Como organizar times de engenharia em meio ao caos de uma startup em alto crescimento

minutos de leitura

21 de setembro de 2021

Escrito por
Robson Ventura

Você já teve aquele medo de que algo errado pode estar acontecendo e você pode nem estar sabendo?! Aquele medo de que a qualquer momento sua plataforma pode cair?!

De que seu time pode não estar andando na direção correta?! A sensação de que tudo está um caos, e você não tem controle de nada?!

Nesses cinco anos de Gupy, vivi esses e muitos outros cenários diferentes, e sei que ainda viverei vários outros. Mas acredito que posso ajudar muitos líderes de tecnologia compartilhando um pouco dessa minha experiência - e um pouco da solução para esse caos.

times-engenharia-alto-crescimento

Um pouco de contexto

Organizar times, processos e garantir entregas com qualidade é um desafio em qualquer cenário, mas em ambientes de alto crescimento, nos quais existe uma pressão por entregar cada vez mais, evoluir rápido e aprender mais rápido ainda, esse é cada vez mais gigantesco.

A Gupy se enquadra super bem nele: só para você ter uma ideia: Só entre metade do ano de 2020 até agora, Junho de 2021, duplicamos o time. Saímos de 35 pessoas engenheiras para mais de 70, o número de inscrições na plataforma subiu 3,2 vezes e só no time de Produto, Engenharia e Design já temos mais pessoas do que a Gupy inteira um ano e meio atrás.

Em meio a todo esse crescimento, surgem perguntas - e desafios - para a liderança:

  • Como escalar a cultura?
  • Como organizar processos?
  • Como entregar mais mantendo o time saudável e produtivo?

Outros questionamentos, mais focados no crescimento de times técnicos:

  • Como suportar um crescimento que chega a 10x no número de usuários em um espaço de 6 meses? Como já aconteceu em 2019.
  • Como duplicar o time de engenharia sem perder qualidade?
  • Mais gente nem sempre significa mais entrega, então como organizar os processos e arquitetura para garantir um crescimento da velocidade de entregas na mesma proporção, ou pelo menos uma proporção parecida, com a do time?

Para compartilhar a minha experiência como CTO nesse ambiente, resolvi dividir o texto em 3 tópicos base: Cultura, Recrutamento e Seleção e métricas que ajudam a guiar a evolução do time de engenharia. Continue lendo para entender um pouco mais dessa história caótica, cheia de erros e acertos.

Cultura

Acredito fortemente que o fator responsável pelo sucesso da Gupy, até o momento, foi a cultura. Temos um time incrível e muito engajado, e sem isso seria impossível para nós, founders — eu, Mari, Bruna e Gui, — resolvermos todos os problemas, pensar em todas as inovações e ter todas as ideias que levaram à evolução que tivemos até agora. Nosso papel principal dentro disso foi criar o ambiente propício para que o time encabeçasse esse crescimento, com um gigante senso de “donos do negócio”.

Em conversas com outros empreendedores de diferentes mercados, fica claro que as startups que conseguem passar dos estágios iniciais do negócio são justamente aquelas que possuem uma cultura muito forte e escalável, junto a um time engajado.

Modelo de negócio, escolha de tecnologia e produto você muda e encontra o melhor caminho, mas o que faz essas empresas se diferenciarem - e se destacaram - são times fora da curva, e só se atinge isso com foco total nas pessoas e na cultura.

Processo vs Cultura

Processos são importantes, mas eles não podem passar por cima da cultura. O primeiro item do manifesto ágil é: "Indivíduos e interações mais que processos e ferramentas", e isso tem que ser levado muito a sério, mas é sempre bom lembrar que ter foco nos indivíduos não significa deixar de lado processos e ferramentas.

No time de engenharia e produto da Gupy, desenhamos as restrições para os times e esses definem as regras do dia a dia, que, depois de cada ciclo de duas semanas, são discutidas, possibilitando uma reação rápida diante de cenários não previstos.

Essa flexibilidade para adaptação a situações, sem precisar lidar com burocracias de processos muito engessados, é fundamental para um time de engenharia em uma startup de alto crescimento. Nesse time temos pessoas com diferentes vivências, tocando partes diferentes do produto com diferentes níveis de complexidade, então não faz sentido, para realidades tão diferentes, um processo top down ser imposto por uma pessoa que nem sempre pode estar 100% presente no dia a dia dos times.

"Na Gupy, agilidade é uma forma de pensar, é o que realmente guia nossas ações - não somente processos formais."

Como reforçamos a nossa cultura

Falar sobre a cultura da Gupy poderia render, tranquilamente, um livro inteiro de conteúdo, mas vou tentar resumir de maneira prática como reforçamos isso no dia a dia.

Lembrando que a cultura não pode ser só uma lista de frases legais, ela tem que engajar e tem que estar muito presente no dia de cada um dos colaboradores da empresa.

Algumas formas simples e boas de reforçar a sua cultura:

  • Passar feedbacks, tanto os positivos quanto os construtivos, usando os valores da cultura
  • Sempre reforçar os valores em reuniões de times
  • Conectar ações da empresa ou dos times com os valores
  • Conectar tarefas do dia a dia com o propósito.

Na Gupy, usamos também um sistema de recompensa colaborativo, o Gupy Coins, com esse objetivo de reforçar nossos valores. Esse sistema nada mais é do que o Merit Money, ou seja, a ideia é você reconhecer uma outra pessoa sempre que achar justo. Pode ser reconhecendo uma ajuda, uma entrega legal, um conhecimento que foi compartilhado e tudo mais que você achar válido. E, claro, sempre que você reconhece uma pessoa, você deve indicar em qual valor da cultura essa pessoa brilhou ao executar aquela ação.

Mas, sem dúvidas, a maior oportunidade para reforçar ela - que é também o maior desafio - é garantir que os valores sejam reais, que as pessoas vejam no dia a dia como esses princípios são aplicados nas tomadas de decisão e na forma como a empresa é direcionada.

Aqui, temos algumas premissas para guiar essas mesmas tomadas de decisão: em primeiro lugar time, clientes e usuários satisfeitos. Depois, crescimento. Não ter clareza da ordem de prioridade entre os valores pode gerar confusão quando um valor entrar em conflito com outro.

Outro ponto importante é criar uma cultura de confiança, na qual pessoas não sejam punidas por experimentarem e errarem. É claro que erros que vão diretamente contra a cultura - como desvios de conduta e caráter - devem ser trabalhados com urgência, mas falhas ao tentar coisas novas não devem ser penalizadas assim.

Criar um ambiente onde as pessoas têm medo reduz a chance de experimentações, todos serão conservadores nas tomadas de decisão e nas estimativas. O ideal é você buscar um ambiente baseado na confiança e composto por pessoas que sejam obcecadas em aprender com os erros - em vez de terem medo de errar.

Recrutamento

A cultura evolui com o tempo, ela se adapta a realidade e às pessoas que vão entrando, por isso a construção e manutenção de uma cultura começa no recrutamento.

Tive experiências ruins com pessoas culturalmente desalinhadas, e o impacto negativo é terrível. Perdi pessoas que não gostaria de ter perdido, abaixou a produtividade do time e o clima que sempre foi incrível e um dos principais pontos fortes da Gupy, ficou ruim.

Reverter esse cenário levou meses e esse tempo pra uma startup em alto crescimento é valioso. Hoje sou muito exigente no check cultural e, em todas as 4 etapas do nosso processo seletivo, a cultura é checada. Já reprovei candidatos tecnicamente excepcionais por desconfiar de um ponto de nossa cultura. Hoje prefiro não arriscar, pois tecnicamente é fácil evoluir uma pessoa, mas mudar alguns valores é bem mais complexo.

Nosso processo seletivo

Como checamos o alinhamento com a cultura?

Aqui na Gupy, a cultura é checada em todas as etapas do processo seletivo. Nossos valores são muito claros e estão por toda a parte, inclusive estavam grafitados nas nossas paredes do nosso escritório antes da pandemia.

valores-gupy-1-1

Montamos roteiros de entrevista focando em checar os nossos valores, mas claro que não perguntamos diretamente se o candidato tem senso de urgência por exemplo, apresentamos cenários, perguntamos como essa pessoa se comportaria e pedimos exemplos de situações que o candidato já viveu e que reforce esse valor. Além de que, todos os candidatos de engenharia são entrevistados por mim ou pelos Heads de engenharia da Gupy.

Como avaliamos uma pessoa tecnicamente?

Testamos diversas formas nesses 5 anos de Gupy. Por muito tempo, nós enviávamos um desafio técnico e pedíamos um prazo pra entrega, mas tínhamos uma baixa conversão já que muitos não entregavam, desistiam do processo ou pior - já pegamos casos onde ficou claro que não foi a própria pessoa que fez o desafio e muitas vezes era difícil saber exatamente o que olhar para avaliar no desafio.

Tentamos usar plataforma de teste online, o que era legal, mas também tinha baixo engajamento e não conseguíamos medir tudo o que queríamos. O modelo que melhor se enquadrou para a nossa realidade e para o que queremos avaliar no candidato foi o desafio técnico em pareamento com alguma pessoa desenvolvedora da Gupy.

Aplicamos um desafio que provoque o candidato tecnicamente: a pessoa que pareia faz perguntas, analisa e pede refactorings. Com isso, conseguimos ter uma sensibilidade mais próxima da realidade de como a pessoa trabalha, seu nível técnico, como se comunica, seu racional para resolver problemas, sua preocupação com qualidade, se testar o código é algo natural ou não para a pessoa e sua fluência na linguagem.

Hoje, se ela gabarita nosso teste, realiza os refactorings que provocamos a fazer e vemos uma boa desenvoltura na escrita dos testes, conseguimos ter segurança de que essa pessoa vai se sair bem no nosso dia a dia.

Além disso tudo, eu também faço uma entrevista direta, para validação de cultura de engenharia, e tento extrair do candidato o que ele pensa sobre tecnologia, como aborda determinados problemas e verifico se o foco vai estar na solução de problemas, e não usar tecnologias do hype só por usar.

E depois que a pessoa entra?

O processo de checagem e aprendizado não termina quando o candidato começa na Gupy.

Temos um processo de onboarding que tem como objetivo expor o candidato às nossas tecnologias, através de um projeto que não seja crítico, mas que gere bastante valor ao nosso negócio, foque a pessoa a conhecer nossa tecnologia e arquitetura, reforce a nossa cultura e avalie se essa pessoa atende as nossas expectativas.

Quando o onboarding da pessoa termina, temos uma cerimônia muito legal de "formatura", na qual o novo ou a nova Gupier apresenta seu projeto, quais foram os desafios, mostra quais são os próximos passos e faz os agradecimentos desse processo.

Métricas do time de engenharia

Mais importante do que falar de stack, linguagens e infra, acho que o que faz diferença é a cultura de engenharia e os indicadores de sucesso que guiam o dia a dia.

Aqui na Gupy, nós trabalhamos muito para evoluir a cada dia nossa cultura de engenharia, aplicando as práticas de cultura de DevOps e perseguindo indicadores que realmente façam sentido e guiem o time para uma evolução técnica que não seja baseada em modismo e preciosismo técnico, mas em melhorias que gerem valor ao negócio.

Hoje acompanhamos e trabalhamos para melhorar 7 indicadores principais em engenharia, onde enxergamos que para conseguirmos melhorá-los, muitas reestruturações precisam ser feitas tanto tecnológicas, quanto em processos. Os indicadores são:

  • Uptime
  • Cycle time
  • Latência dos serviços
  • P99
  • Frequência de deploys
  • Bugs escapados
  • Métricas de negócio

Uptime

É o tempo que a plataforma fica disponível para os usuários. Nesse ano, estamos com 99,99% e conseguir isso não foi fácil, dado que temos um grande crescimento e mudanças rápidas de realidade semanalmente. Medindo o Uptime e trabalhando para melhorá-lo, consequentemente melhoramos nosso tempo de resposta a incidentes. Para conseguir otimizar esse indicador, precisamos aprimorar muitas outra coisas como infraestrutura, automação, deploy, testes e monitoramento. Perseguir esse indicador te obriga a arrumar a casa.

Lead time

Lead time para nós é o tempo decorrido entre o momento em que uma pessoa inicia a realização de uma tarefa e o momento em que essa tarefa vai para produção com sucesso. Para otimizar o Lead time, você precisa granularizar bem as tarefas padronizando o tamanho e deixar redondo o processo de code review, testes de aceitação e os testes automatizados. Assim, começa a ficar mais fácil você entender a capacidade de vazão do seu time. Para isso, o processo de deploy precisa estar bem definido e o próprio deploy, ser confiável também.

Latência dos serviços

Tempo médio que os nossos serviços respondem. Esse é outro indicador que nos obriga a ter uma boa qualidade no desenvolvimento, otimização de queries, infra em dia etc. Fora que o monitoramento desse indicador nos ajuda a prever determinados tipos de problema. Geralmente é o primeiro indicador a se alterar quando temos algum problema.

P99

Esse indicador é basicamente o tempo máximo de 99% das requests mais rápidas nos nossos serviços. Usamos ele para não deixar que a média nos engane, de modo que o número de requisições rápidas, com menos de 15ms nos nossos serviços, são muito maiores e levam sempre nossa latência média para baixo. Temos o P99 para garantir que nossos usuários tenham uma experiência boa e que endpoints lentos, mesmo que chamados com menor frequência, vão impactar algum indicador.

Frequência de deploys

Começamos a acompanhar esse indicador mais recentemente e hoje, fazemos uma média de 20 deploys por dia. Mas deploy já foi um grande problema, principalmente na época em que eu batia o escanteio e corria na área para cabecear rsrs. Um ano atrás nós fazíamos 2 ou 3 deploys por semana e hoje, realizamos 20 por dia.

Tivemos que melhorar muita coisa pra conseguir isso e sabemos que dá para melhorar ainda mais. Tivemos que investir em automação, deploys com 0 downtime (Blue-Green), criar a capacidade de habilitar e desabilitar funcionalidade de forma fácil, Staged rollout (Features habilitadas para apenas alguns clientes) entre muitas alterações de processo e mentalidade do time.

Bugs escapados

São os bugs que nossos usuários pegam e abrem um ticket. Bugs que são pegos nos processos internos de qualidade atrapalham o indicador Lead time e se ele piora, a gente sempre estuda a causa. É muito importante monitorar e agir em cima de bugs escapados: evitá-los te força a refletir muito sobre seus processos, sua arquitetura, sobre os gaps de seu time entre outras coisas.

Métrica de negócio

Além dos indicadores de engenharia, os times técnicos precisam acompanhar os indicadores de negócio de seus times também. Além de ajudar o time de produto a pensar em soluções e evolução do produto, é importante o time saber o impacto do que estão desenvolvendo e se sentirem parte.

Espero que compartilhar um pouco do que aprendi possa ajudar líderes que estão vivendo ou viverão situações parecidas. É sempre preciso refletir muito, analisar o cenário e o contexto para conseguir tomar as melhores decisões.

A minha experiência nesse cenário é bem específica e certamente o que eu fiz pode não funcionar em determinados ambientes, mas também me baseei em alguns autores que estudaram profundamente empresas de diferentes tamanhos e realidade.

Certamente um repertório vasto de conhecimento sobre engenharia de software, DevOps, Agile, Lean, entre outras, vão te ajudar a superar os desafios específicos de seu contexto.

Para fechar o texto, deixo como sugestão a leitura do livro Accelerate, da Nicole Forsgren, Jez Humble e Gene Kim, que basicamente mostra uma análise sobre o que os times de engenharia fizeram para garantir o sucesso de empresas de várias realidades diferentes.

Quer fazer parte do nosso time sempre em crescimento? Dê uma olhada nas vagas abertas na nossa página de carreiras tech!