Evolução de (quase) 3 anos de app Android do Magalu

Thais Aquino
luizalabs
Published in
3 min readMar 19, 2018

Em 2015 enquanto outras companhias sofriam para se manter no mercado, o Magazine se reinventava ao lançar seu app nativo Android e iOS (faltando 1 mês pra Black Friday 😱 porque a gente gosta de emoção!) mudando a experiência de compra de seus clientes provendo uma forma mais fácil e rápida de comprar em qualquer lugar.

O app já não é mais um bebê e este ano fará 3 anos de existência 🚀! Neste post vou contar um pouco de como evoluímos o app do Magalu e como os nossos outros apps foram crescendo com os aprendizados neste caminho percorrido.

De nenhuma arquitetura a uma arquitetura Clean, Reativa e com Injeção de Dependências

Grande desafio, tempo curto e time enxuto, um app que mudaria completamente a experiência do usuário mobile do Magalu. O app saiu a tempo da Black Friday de 2015, foi sucesso. Mas claro que com toda correria ficou um mundo de débito técnico para o futuro.
Não tinha uma arquitetura muito bem definida, não tinha testes, muita coisa poderia ser melhorada. E foi melhorada a medida que fomos conseguindo tempo para revisitar alguns trechos.
O time cresceu, mais braços e mais cabeças pensando com carinho em como melhorar a qualidade e manutenibilidade do código. Então adotamos uma arquitetura Clean para desacoplar o código e ter camadas bem definidas e testáveis. Adicionamos Injeção de Dependência com a Dagger para melhor gerenciar os estados da app e matar alguns singletons. Introduzimos RxJava, podendo aplicar filtros, transformações nos dados entre as camadas, deixou nosso código mais conciso e menos propenso a erros. O tratamento de erros melhorou muito, trazendo melhor experiência para o usuário e aumentando nosso crash free!

Guenta coração que agora temos testes!

Tendo as camadas bem definidas conseguimos aplicar teste unitário para cada uma. Com o desacoplamento de código da tela, conseguimos aplicar testes de UI mais facilmente mockando retornos da API com MockWebServer e mockando alguns objetos da nossa estrutura com Mockito. E usamos Espresso para os testes de UI.
Passamos a adotar uma regra de a cada Pull Request ter tanto testes unitários das camadas quanto teste de UI com Espresso em alguns projetos.
O ganho foi enorme! A cada evolução não precisaríamos ficar testando na mão cada pedaço do app de forma exaustiva. Passamos a confiar nos nossos testes que dedurariam qualquer quebra de comportamento resultante da alteração e pudemos ser mais produtivos e assertivos (e tomar mais café ☕).

Introdução do Kotlin no nosso dia-a-dia

Com o lançamento do Kotlin, ficamos extremamente empolgados com tudo o que a linguagem oferece (confira neste post aqui). Logo quisemos começar a codar loucamente em Kotlin. Mas como manter o app funcionando, reescrever em Kotlin e não perder a produtividade com novas features chegando? Não foi de uma hora pra outra que começamos a colocar Kotlin no projeto. Começamos com os testes, escrevendo os testes novos com Kotlin e depois com tempo reescrevendo alguns existentes. Depois com mais confiança partimos para o desenvolvimento das novas features com Kotlin, já que é interoperável com Java. É uma luta constante no app do Magalu que é gigante, nos outros apps já tivemos a oportunidade de fazer 100% em Kotlin.

Code Review

Com o time maior nossos Code Reviews ficaram mais rigorosos. Conseguimos garantir que o código que entre na nossa Code base seja revisado e testado por pelo menos duas pessoas. Isso agrega muito ao desenvolvimento de cada profissional envolvido bem como para a saúde dos nossos projetos. A comunicação entre o time é constante e muito construtiva. Procuramos sempre dividir os conhecimentos adquiridos com os diversos projetos e o que estiver rolando de novidades no mundo Android.

Agile

Não só a forma como desenvolvemos e testamos nossos apps melhorou como a forma como o time trabalha em sinergia para fazer acontecer! Ficamos mais ágeis, melhoramos a dinâmica e a comunicação como um todo para evoluir cada vez mais rápido e de forma sustentável. Para tudo isso acontecer contamos com metodologias ágeis regendo todo o nosso trabalho.

--

--

Thais Aquino
luizalabs

Senior Software Engineer (Flutter | React Native | Android | iOS)