Loading....

O engenheiro Carl Engström explica como aumentar o limite de 10.000 músicas curtidas permitiu que sua equipe abordasse um problema muito mais profundo e melhorasse a experiência de audição dos usuários finais, independentemente de seu dispositivo ou rede.

À primeira vista, aumentar o limite de 10.000 músicas curtidas parece um simples exercício de engenharia. Alguns comentaristas do Reddit até afirmaram ter identificado algumas linhas de código que definem a restrição. Por que não simplesmente excluí-los e corrigir as lacunas?

Como diz o velho ditado, ‘foi um pouco mais complicado do que isso’. Para entender o porquê, devemos nos aprofundar na história da pilha de tecnologia do Spotify, especialmente a área de trabalho do lado do cliente e a camada móvel que dominam a experiência do usuário.

Nossa arquitetura de cliente foi projetada para ser simples e remonta a uma época em que os laptops dominavam a experiência de audição. Isso ajuda, especialmente nos primeiros dias, quando você mede o que funciona e o que não funciona. Se um recurso não se sustenta, podemos substituí-lo por um sistema mais sofisticado.

Músicas curtidas, um dos recursos mais populares do Spotify, é um ótimo exemplo dessa abordagem. Cada vez que você abre o aplicativo Spotify, ele carrega todos os metadados associados a essas faixas do armazenamento em disco do dispositivo na memória ativa (RAM).

Simples, certo? Não necessariamente. Se você coletar milhares de músicas curtidas, toda vez que o aplicativo for iniciado, todos os metadados (incluindo nome do artista, caminhos para a capa do álbum e assim por diante) devem ser carregados do zero. Tudo bem se você estiver usando um laptop ou o smartphone mais recente, porque há RAM suficiente para gerenciar essa etapa com o mínimo de atraso. (Usuários de laptop geralmente se beneficiam da conectividade sem fio estável, que também acelera o processo.)

Mas agora vivemos em um mundo tecnologicamente diverso. Os ouvintes do Spotify estão cada vez mais móveis, o que significa que a página inicial do smartphone desempenha um papel maior na experiência do usuário do que a Biblioteca, onde residem as Músicas Curtidas.

Passaram-se também treze anos desde o lançamento do primeiro smartphone. Hoje, existem milhares de dispositivos diferentes. Isso apresenta outro desafio. Como você oferece uma excelente experiência de usuário para todos os ouvintes do Spotify quando existem tais disparidades na capacidade de processamento do dispositivo e na conectividade de rede?

Uma melhor experiência auditiva para todos
Nossa arquitetura anterior simplificava a observação da taxa de sucesso das músicas curtidas na inicialização. Todos os metadados foram carregados com sucesso ou não. Também poderíamos medir quanto tempo isso levou e quantas pessoas atingiram ou estavam perto de atingir o limite de 10.000.

Nos últimos dois a três anos, notamos que a experiência de inicialização para aqueles com dispositivos menos poderosos e conectividade mais fraca não era ideal, especialmente quando eles estavam próximos ou no limite de 10.000. Também descobrimos que, mesmo que um ouvinte tivesse milhares dessas faixas, ele geralmente ouvia apenas algumas centenas.

Por essas duas razões, decidimos agir. É importante lembrar que agora o objetivo não era apenas aumentar o limite de 10.000. Essa foi a ponta do iceberg. Em vez de simplesmente focar no limite em si, encontramos uma oportunidade muito maior: modernizar nossa arquitetura do lado do cliente, atendendo assim às necessidades de todo o nosso grupo demográfico, especialmente aqueles com telefones mais antigos e acesso a redes mais lentas.

A solução: modernização da pilha de tecnologia para um público global
Enfrentamos o desafio de duas perspectivas. Primeiro, poderíamos encontrar uma maneira de evitar o carregamento de todos os metadados em um determinado dispositivo toda vez que o usuário abrisse o aplicativo? Em segundo lugar, quando iniciamos o download, poderíamos fazê-lo em lotes que minimizassem os tempos de inicialização e carregamento da visualização? Em abril deste ano, estávamos prontos para testar essa abordagem para iOS e depois para Android.

Como funciona? Na primeira vez que você abre o aplicativo com o novo cliente, os metadados das músicas curtidas são baixados em lotes para o seu smartphone. Os dados são armazenados na unidade do seu dispositivo ou em um cartão SD, se necessário.

Crucialmente, também pré-criamos todas as classificações disponíveis com as Músicas Curtidas (por título, artista, álbum e adicionadas recentemente) e as armazenamos em disco. Agora podemos mostrar qualquer exibição lendo a tabela correta e transmitindo os resultados pré-calculados do armazenamento em disco. Isso substitui o método anterior em que a classificação ocorria na memória, restringindo a velocidade de smartphones menos potentes.

A partir daí, toda vez que você iniciar o aplicativo, os metadados já estarão lá, junto com todas as suas músicas curtidas, classificadas e prontas para uso. O aplicativo também verifica os servidores do Spotify em busca de novas curtidas e os metadados correspondentes são adicionados ao dispositivo.

Nossos testes mostram uma melhoria considerável nos tempos de inicialização e carregamento da visualização, especialmente com smartphones menos potentes. Isso reflete o desejo do Spotify de atender melhor todos os nossos clientes, especialmente aqueles com telefones mais antigos e conectividade menos confiável.

E mesmo se você não for um usuário avançado de Músicas curtidas, as melhorias gerais de desempenho podem resultar em uma experiência de audição mais agradável.

Da pesquisa ao lançamento: como trocar o motor durante o voo
Historicamente, Spotify adotou uma abordagem iterativa para melhorar a pilha de tecnologia. Mas, como nossa pesquisa mostrou, essa não era uma opção com as Músicas curtidas.

É por isso que precisávamos de um ano para concluir o projeto, desde a pesquisa até o lançamento. Para modernizar a arquitetura do cliente, tivemos que remover ou modificar cerca de 100.000 linhas de código na base de código do cliente compartilhada. Alguns deles exigiam várias adições, aumentando a complexidade. Também ajustamos os aplicativos para Android e iOS.

Em cada etapa da construção, tivemos que garantir que nossa nova versão replicasse os recursos de aplicativos existentes em sua totalidade – o equivalente clássico da engenharia de software a ‘trocar o mecanismo no meio do voo’.

Durante a pesquisa e elaboração das especificações técnicas, havia um enorme caminho a percorrer. Por exemplo, onde e como um ouvinte pode ‘curtir’ uma música exatamente? Existem dezenas de maneiras de adicionar músicas favoritas em sua biblioteca. Tivemos que identificar cada um deles e mapear o processo para nossa nova arquitetura.

Paralelamente, tivemos que acompanhar os aprimoramentos na arquitetura operacional do cliente e inserir essas iterações em nosso próprio código, de modo que os recursos e a funcionalidade fossem idênticos quando trocássemos.

Muito trabalho também foi feito para combinar a evolução da experiência geral do usuário e da interface do usuário. Trabalhamos de perto com essas equipes para garantir que a nova arquitetura suportasse as tendências gerais na página inicial. A recente adição de Atalhos é um bom exemplo da mudança na experiência do usuário, e nossa abordagem teve que apoiar essa direção.

O teste e o desenvolvimento ocorreram em paralelo, permitindo adicionar mais pessoas aos grupos de teste à medida que a pilha se tornava mais estável. Cerca de sete meses antes do lançamento, estávamos trabalhando com 30 funcionários, crescendo para 1.000 quatro meses depois. Isso nos deu controle sobre o processo de teste e retornou muitos comentários não filtrados do Spotify sobre as mudanças na experiência do usuário!

Em seguida, adicionamos cerca de 1% de todos os usuários, aumentando gradualmente esse número para 50% para encontrar esses “erros em um milhão”. Isso nos permitiu concluir todas as correções restantes antes de mudar todos os usuários para a nova arquitetura.

O enigma da priorização
Muitas vezes me perguntam, como você decide dar luz verde a um projeto como este, quando há tantas prioridades concorrentes? É uma boa pergunta que vai direto ao ponto de como tomamos decisões complexas e difíceis de recursos no Spotify.

Eu monitorei o impacto do limite de curtidas por cerca de três anos. Eu sabia que se aumentássemos o limite, isso poderia ter um impacto negativo na experiência geral de nossos usuários finais. E nessa fase, não sabíamos ao certo se valia a pena investir em uma reformulação da arquitetura para acomodar esse aprimoramento.

Mas quando analisamos mudanças mais amplas no comportamento do usuário, nossa atenção mudou de elevar o limite para melhorar nossa pilha de tecnologia, beneficiando os usuários nos próximos anos.

Isso também nos forçou a repensar nossa abordagem de segmentação de público. Às vezes, organizações com centenas de milhões de usuários e enormes conjuntos de dados podem perder de vista o indivíduo. É muito fácil imaginar que o ouvinte médio do Spotify tenha o smartphone mais recente ou similar, mas é claro que não. Nossa abordagem definitivamente mudou em favor de análises mais segmentadas que atendem melhor a todo o espectro de conectividade de dispositivos.

Também havia uma forte motivação para “fazer a coisa certa” em nome dos usuários finais em todo o mundo. Apesar de toda a conversa sobre pilhas de tecnologia e limites semelhantes, sempre temos em mente o que é importante no Spotify, que é dar aos nossos ouvintes a oportunidade de curtir e se inspirar com música e podcasts.