Você já parou para pensar em quão frustrante pode ser esperar por builds no seu pipeline de integração contínua (CI)? É como esperar por um ônibus que nunca chega... O Pinterest, em sua recente experiência, demonstrou como uma reestruturação na forma como os testes são executados pode transformar essa dor de cabeça em algo mais suportável. Com um enfoque técnico que vale a pena explorar, a equipe de engenharia da plataforma conseguiu reduzir os tempos de build do Android em mais de 36% ao implementar uma estratégia de sharding ciente do tempo de execução.

Entendendo o Problema

Antes de mais nada, é importante entender o que estava acontecendo com o sistema anterior do Pinterest. Eles utilizavam o Firebase Test Lab e dividiam os testes baseados em nomes de pacotes. Isso resultava em uma distribuição desigual das cargas de trabalho, onde alguns testes demoravam muito mais do que outros, causando o que podemos chamar de "gargalos" nos processos. O teste mais lento atrasava todo o ciclo de build, levando a uma latência insuportável para os desenvolvedores. E, convenhamos, em um mundo onde a velocidade é crucial, isso não é aceitável.

A Solução Inovadora

A solução encontrada pela equipe foi o desenvolvimento do PinTestLab, uma infraestrutura de testes interna que roda em emuladores Android em instâncias do EC2. Essa mudança não apenas trouxe mais controle sobre o agendamento e a configuração do ambiente, mas também permitiu a introdução de um algoritmo de sharding ciente do tempo de execução. O que isso significa na prática? Eles começaram a agrupar os testes com base na duração esperada, em vez de simplesmente dividir os testes por pacotes ou em um esquema de round-robin.

Como Funciona o Algoritmo de Sharding

O algoritmo que eles adotaram utiliza dados históricos de execução armazenados no sistema de gerenciamento de testes Metro. Ao invés de distribuir os testes de forma aleatória ou por quantidade, o algoritmo ordena os testes pela duração esperada e os atribui aos shards de maneira que minimiza a variação no tempo de execução. resultao? A diferença entre o shard mais rápido e o mais lento caiu para menos de 30 segundos, permitindo que o processo de build fosse concluído de forma muito mais consiteente.

Dicas Avançadas para Otimização de CI

Se você está pensando em aplicar algumas dessas estratégias na sua própria equipe, aqui vão algumas dicas que podem fazer a diferença:

Conclusão

Em resumo, o que o Pinterest fez é um exemplo brilhante de como a arquitetura de software pode melhorar a eficiência dos processos de desenvolvimento. A utilização de dados históricos para otimizar o tempo de execução dos testes é uma prática que vale a pena adotar. Vendo o sucesso deles, é possível concluir que, ao invés de se contentar com soluções prontas, devemos nos questionar: como podemos adaptar e melhorar nossas ferramentas para se adequar à nossa realidade? A resposta pode levar a inovações que nem imaginamos!

Resumindo, a experiência do Pinterest não só oferece uma visão clara sobre a importância de um CI eficiente, mas também nos lembra que sempre há espaço para inovação e melhorias. Vamos nos inspirar e trazer mais eficiência para nossos próprios ciclos de desenvolvimento!