Mantendo a vanguarda tecnológica
O que coloca uma empresa na vanguarda? Como as novas tecnologias são implementadas? Como você sabe quais, quando e como a equipe lida com isso? Ainda mais importante: Por que é necessário? Além do desafio que o exposto acima representa, deve ser equilibrado com a pontualidade na entrega dos requisitos.
Ao longo da minha carreira como engenheiro de software vivi diferentes fases em várias empresas, desde aquelas com um stack muito estável mas pouco inovador, outras onde podiam ser feitas alterações mas sem correr muitos riscos, até ao meu trabalho atual, onde tive a sorte de fazer parte de uma grande transformação e com a liberdade de promovê-la diretamente.
O caminho
Para ir direto ao ponto, conto um pouco sobre o meu início. Anos atrás, ainda sem muita experiência —apenas com alguns projetos universitários com PHP e Jquery—, certamente não tinha visibilidade de temas muito empresariais. Se me pedissem para fazer um site para um restaurante, eu o faria com o que me permitisse em menos tempo e, possivelmente, não o moveria novamente por meses, exceto por mudanças típicas de textos ou imagens. Usamos templates ou com base em projetos anteriores. Não que isso esteja errado, só que, pelo menos para mim, eu não estava me perguntando como esse código poderia ajudar em alguma coisa se eu fizesse diferente. Tornou-se mecânico.
Lembro-me de quando um novo colega chegou com um pouco mais de experiência e propôs um framework (cakePHP). Eu estava interessado em ver por que ele escolheu isso, se ele levaria mais tempo para concluir o trabalho, já que ele estava apenas aprendendo. Falando, ele me fez ver tudo o que poderia ser feito com isso: poderia representar uma curva de aprendizado no início, mas depois aceleraria o desenvolvimento.
Essa primeira abordagem abriu minha visão para depois conhecer outros frameworks, como o Laravel, que me ajudou muito em projetos futuros. Mas estou falando de coisas de programador; nenhum cliente nunca me pediu um específico, exceto wordpress. Isso estava na vanguarda? Nesse ponto, o critério era mais pela minha agilidade como desenvolvedor.
Falo de um momento em termos de desenvolvimento web. Você poderia fazer tudo com Jquery; ninguém questionaria. Depois conheci Angular, React, Ember e Vue, que me abriram ainda mais portas. Quem está no frontend, principalmente, conhece a vantagem tanto na velocidade de desenvolvimento quanto na qualidade por ter uma estrutura melhor, funcionalidades predispostas a serem implementadas e também uma comunidade de desenvolvedores crescente que forneceu novos módulos para reutilização.
Naquela época, percebi que usar novas ferramentas para desenvolvimento rápido e operação eficiente era um ponto de venda, enquanto ter seu novo sistema rápido era uma vantagem competitiva para o cliente.
Chegando ao meu trabalho atual, tive que começar com React e também vi o uso de novos paradigmas, como o uso mais generalizado de ferramentas AWS especialmente para implantação de projetos, servidores, armazenamento, etc. Mais uma vez, um bom equilíbrio de velocidade e qualidade entrou em jogo, mas também algo extra: um ambiente propício para novas tecnologias, tentando outras abordagens não apenas em um novo projeto, mas para melhorar o existente.
Meu momento de envolvimento foi quando decidi implementar o Vue em um determinado projeto sobre o React. Quase tudo no futuro seguiu esse caminho! Estou ciente da felicidade da equipe em começar a programar com um framework que requer muito menos configuração inicial e com muitos recursos prontos para serem movidos rapidamente.
Em determinado momento, fomos reconhecidos por criar empreendimentos de qualidade internacional e em tempo recorde, atendendo a milhões de visitas por mês. Teria sido possível sem aquelas tecnologias que há alguns anos ainda eram pouco conhecidas ou inexistentes?
Bem, o que dizem os bancos e outras instituições, onde abundam os sistemas legados? Apesar de serem a base de muitos sistemas críticos, eles funcionam e suportam milhões de transações, usam, no entanto, linguagens antigas, por que você não acha que eles estão na vanguarda?
Poucos conseguem manter um sistema feito em uma linguagem antiga. Funciona, mas não há nada de novo que agregue valor, que acelere seu desenvolvimento, que possa evoluir junto com as necessidades do negócio – até é muito caro migrar ou já está no ponto em que é melhor não se mudar se já funciona assim — Isso implica que a empresa se moverá devagar, inovará menos... uma desvantagem.
Mais de uma vez migramos de uma pilha para outra: entre tipos de bancos de dados, serviços da AWS, novas versões do Vue, monólitos para microsserviços, frontends robustos para microfrontends etc. Isso não é um capricho, é uma necessidade para continuar gerando valor.
E falando de frontend novamente, mesmo com o quanto gostamos do Vue, não paramos para escolher outros frameworks (como Preact, Svelte e Astro) para situações em que identificamos seu valor.
No entanto, como em qualquer projeto, chegamos a um certo ponto de estabilidade em que você questiona se deve melhorá-lo ou apenas mantê-lo com as alterações que são solicitadas. Por que gastar tempo reescrevendo código?
Bem, porque há variáveis que entram em jogo, principalmente quando se ganha responsabilidade; você começa a ter visibilidade dos problemas no nível de negócios. Você vê que, se o cliente precisar de suporte em vários assuntos, além de ativar ou desativar rapidamente um determinado recurso, a empresa não dirá como estruturá-lo, mas espera-se eficiência. Em outras palavras, é seu dever promover o mais adequado, se a pilha escolhida facilitar isso e também se antecipar o máximo possível. Isso é promover a vanguarda tecnológica.
Recomendações
Já contei sobre o caminho que me levou a ser mais consciente e promover essa cultura de ponta. A partir disso, extraio algumas recomendações:
Refatorar
Eles são uma arma poderosa tanto para melhorar a qualidade do código quanto para mantê-lo atualizado e escalável, ou seja, facilitar a inclusão de alterações futuras. Na pressa de liberar a última corrida para produção, seu código pode não ser o melhor. Mas passar a tempestade pode ser melhorado.
O código limpo nos permite tornar mais fácil e eficiente adicionar novo código, ao mesmo tempo em que facilita a colaboração de mais colegas e o acompanhamento de um caminho. Já aconteceu com você que antes de completar o requisito você teve que fazer mais alterações ou ler várias vezes para entender? Este tempo extra é evitado fazendo um bom código e quando não é alcançado no início, o refatoração entra.
O que, como e quando refatorar se torna uma questão cultural para a equipe. Pode ser algo progressivo e iterativo: arquivo que toco, arquivo para melhorar; arquivo que mexe muito, arquivo que pode ser reestruturado até estabilizar. Um guia claro é baseado na taxa de mudança e complexidade, conforme visto na imagem a seguir:
Equipamento
Ouça a equipe! Isso é importante, especialmente quando você ganha responsabilidade como um líder sênior ou técnico. Muitas ideias saem da equipe que contribuem para a evolução do produto. A equipe conhece seu código e ferramentas melhor do que ninguém. Mantendo os canais de discussão abertos e ouvindo atentamente para reconhecer a proposta que melhor se adapta, as melhores soluções são encontradas.
Conferências e encontros
Sejam virtuais ou presenciais, são fontes valiosas de ideias e novas tecnologias que promovem a comunidade. Eles são uma janela para tendências que nos permitem ver formas viáveis de direcionar nossa estratégia.
Investimento em engenharia
Outra maneira de olhar para isso é como um investimento que vai compensar. Por exemplo, migrar nossa infraestrutura para Kubernetes representa um grande esforço, tempo, curva de aprendizado, desenvolvimento e monitoramento, mas no final teremos implementado uma arquitetura que nos permite gerenciar, dimensionar e responder muito melhor ao imenso tráfego que recebemos.
Ou, se migrarmos do Vue-cli para o Vite quando este ainda era muito limitado em sua integração, mas sabendo de suas vantagens em velocidade e apostando com segurança que a mesma equipe que criou o Vue continuaria a aperfeiçoá-lo, o resultado —meses depois— é uma configuração em nossos projetos de frente que, além de eficiente, é fácil de configurar e integrar com outras ferramentas. Garantimos rapidez, qualidade e escalabilidade e, por isso, continuamos na vanguarda.
Avaliação
Por que uma tecnologia em vez de outra, especialmente em nosso ambiente de desenvolvimento, onde algo novo está surgindo constantemente.
Mesmo que resolva algo no presente, pode ter desvantagens a longo prazo. Se eu escolher uma ferramenta que quase não recebe contribuições ou sua equipe a esqueceu, é bem possível que não seja o que eu preciso, pois no futuro ela terá que ser trocada – ainda antes do esperado – para recuperar o investimento.
Por isso escolheremos o que for mais viável entre custos, esforços, compatibilidade, prazos e outras variáveis.
Portas abertas
O que foi dito antes nos leva a contemplar nosso dever de promover sempre o melhor. Estar na vanguarda não é apenas cumprir os objetivos do presente, mas também preparar o futuro.
Outro exemplo: Usamos muito o Jest para testes unitários e mencionei que usamos o Vite. A mesma equipe também criou o Vitest, que é intercompatível com o Jest, mas vai ainda mais longe ao emparelhar com o Vite. Isso faz com que seja um caminho a seguir, pois temos mais segurança para o crescimento do projeto. Garantimos no futuro que teremos a parte de testes coberta e funcional, apoiando em última análise uma maior disponibilidade de serviços.
Pragmatismo
No entanto, o negócio deve continuar. Em casos urgentes, é difícil justificar dedicar tempo a uma ferramenta ou migração que represente uma curva de aprendizado para nós, principalmente se já tivermos expertise com o que é atual. Assim, avançamos com o que nos torna produtivos no momento. Uma forma de facilitar a vanguarda apesar desse cenário é estruturar os projetos de forma que possam ser atualizados gradativamente.
Por exemplo: mover para Vue 3 ou adicionar Typescript? Há passos progressivos mais alcançáveis do que fazer tudo de uma vez. Talvez configurar o básico, testar, liberar, alterar o próximo componente e iterar.
Dinâmica e transferência de conhecimento
Finalmente, certas atividades em grupo nos permitem aprender o que outras equipes estão fazendo, como por meio de programação em pares ou revisões de código. Aqui sabemos o que há de novo com que lidam, seus desafios e soluções dadas, por que escolheram uma ou outra ferramenta. Isso facilita a transferência de conhecimento que eventualmente ajuda a tomar melhores decisões.
Conclusões
A vanguarda tecnológica é um caminho que seguimos e promovemos. Consegue-se, entre outras formas, escolhendo as tecnologias e arquiteturas adequadas não só porque são modernas, mas também porque fornecem soluções tanto no presente como no futuro.
Mesmo quando representam um esforço extra, reconhecemos o crescimento que proporcionam profissionalmente, o que permite que o negócio se mantenha competitivo. Mesmo que não seja uma exigência, como membros da equipe temos consciência de nossa missão de ir além, recomendando o melhor para a evolução do produto.