Lições aprendidas com um aplicativo pessoal

Igor Escodro
Android Dev BR
Published in
7 min readJan 6, 2020

Aprender novas bibliotecas é sempre legal, mas implementá-las direto no seu código profissional pode ser bem perigoso: as bibliotecas são lançadas em alfa, com alguns bugs e falta de estabilidade. Uma maneira de se manter atualizado com as mais novas tecnologias sem comprometer o código de produção é ter um aplicativo pessoal para ser usado como um playground.

Ao estudar novos componentes geralmente criamos um projeto separado para cada um. Isso é bom mas não leva em consideração um ponto importante: em projetos focados em apenas uma tecnologia, sempre implementamos o caminho feliz. No mundo real, precisamos conectar e injetar diferentes bibliotecas, e é comum encontrar problemas durante esse processo. Criar um projeto pessoal é lidar com todas as particularidades de um projeto profissional mas com menos responsabilidades.

No início de 2020, meu aplicativo pessoal fez um ano no Google Play e dois anos em desenvolvimento. Alkaa é um aplicativo simples de gerenciar tarefas criado para estudar as mais novas tecnologias do Android, servindo como um lugar livre para implementar qualquer coisa sem nenhuma restrição.

Ele era um projeto bem simples para começar a estudar Kotlin (Alkaa significa começar, iniciar em finlandês). Comecei a adicionar mais bibliotecas, mais conceitos de arquitetura e o projeto cresceu ao ponto de se tornar um aplicativo pronto para o Google Play, com usuários ativos. Nesse artigo eu quero compartilhar alguns das lições apreendidas durante esse último ano.

Esteja em constante evolução

Uma das minhas paixões em desenvolvimento de software é a arquitetura. Entretanto, nas primeiras vezes que ajudei no definição de arquitetura de projetos profissionais, eu quebrei alguns princípios e os aplicativos não ficaram muito fácil de manter. Mas eu tenho orgulho disso, apesar de tudo. Todos os erros, os estudos e quebra de códigos me ajudaram a entender muito melhor os princípios de arquitetura.

Ter um ambiente controlado para tentar, falhar e tentar novamente ajuda muito a ganhar mais conhecimento e confiança. A arquitetura abaixo representa a primeira versão do Alkaa, que foi lançada em janeiro de 2019.

Arquitetura Alkaa 1.0

Ele continha apenas um módulo (:app) e a separação de camadas era bem simplista. As setas representam o fluxo de dependência, que significa que o bloco A que aponta para o bloco B sabe o código do bloco B. Como você pode notar, há várias dependências cruzadas entre eles e, por conta disso, qualquer mudança em um pacote impacta significativamente outros pacotes.

Agora a próxima arquitetura representa a versão 1.5, lançada em dezembro de 2019:

Arquitetura Alkaa 1.5

Essa arquitetura tem quatro módulos principais (:app, :features, :data and :libraries) e seus sub-módulos, com uma melhor separação de responsabilidades. Ela tenta seguir alguns conceitos de Arquitetura Limpa (Clean Architecture), princípios de SOLID e a recomendação do Google para modularização. Aqui as setas continuam representando o fluxo de dependência, mas agora não há mais dependências cruzadas. Além disso, as dependências estão invertidas para o módulo mais importante, o domain, o qual contém todas as regras de negócio e não deve ser alterado com base em outros módulos.

Todo mundo tem algum ponto que deseja melhorar: pode ser arquitetura, interface de usuário, conhecimento sobre Android em geral etc. Dê foco nas habilidades que você quer aprimorar e não tenha medo de tentar e falhar. Também não tenha medo de começar algo novo porque você sente que não tem conhecimento suficiente. Aprender é um processo. Seu projeto pessoal é um lugar seguro para tentar tudo que você tem vontade.

Teste a sua aplicação

Testar a sua aplicação é sempre importante. Isso vai economizar bastante tempo, tornar as alterações de código mais seguras e você mais confiante. Todo mundo já trabalhou em algum projeto pessoal sem código de testes, mas normalmente existe um time de teste para ser a última linha de defesa entre o aplicativo e o usuário final. Desenvolver sozinho tem menos pressões mas também menos ajuda externa.

Quando eu comecei meu projeto, testes não eram prioridade. Tudo que eu queria era implementar novas funcionalidades, desenhar a interface do usuário, fazer o aplicativo funcionar. Os testes poderiam ficar pra depois, afinal era só um projeto livre. Mas eu tinha que testar manualmente todos os fluxos do aplicativo após cada mudança de estrutura para garantir que não tinha quebrado nada.

Todos nós sabemos que testes são necessários, mas algumas vezes os ignoramos. Minha recomendação é ir passo a passo: tente o Espresso Recorder para gerar testes de instrumentação automaticamente pra você. Depois de algum tempo você vai perceber que você pode escrever seus próprios testes com Matchers personalizados e isso os torna mais fáceis de ler e dar manutenção. Então você vai perceber que testes de instrumentação demoram muito para rodar e você vai tentar testes unitários. E assim vai.

Uma vez que você começa a testar a sua aplicação, não tem mais volta. Dê uma chance pra isso.

Embarque no hype

Todos os anos o Google mostra diversas bibliotecas em estágio de pré-lançamento e é difícil adotá-las em nossos projetos profissionais. Uma nova biblioteca pode quebrar o código ou podemos descobrir que ela não é a melhor solução para o seu problema, decidindo removê-la completamente depois de certo ponto.

Felizmente isso não é um problema no seu projeto pessoal. Você pode (e deve) tentar novas bibliotecas nesse ambiente controlado. Isso irá ajudar a ganhar mais experiência nessa nova ferramenta e ser capaz de integrá-la muito mais rápido após ela atingir um estado mais estável. No Alkaa eu embarquei em vários hypes: Kotlin, Navigation, WorkManager, Contraint and Motion layout, Koin, Coroutines, Flow, Dynamic Delivery e muitos outros. Atualmente vários deles estão sendo usados nos meus projetos profissionais.

Ajude a comunidade

À medida que implementar novas bibliotecas você provavelmente irá encontrar alguns problemas em que as soluções não são encontradas facilmente na internet. Se isso acontecer, abra um Issue Tracker, pergunte no Stack Overflow ou abra uma discussão no Slack AndroidDevBR. Isso não apenas irá te ajudar a encontrar a solução, mas irá servir como referência para a comunidade Android.

Outra boa maneira de ajudar a comunidade é escrevendo um artigo sobre a tecnologia que você está estudando. Compartilhe obstáculos enfrentados, as partes complicadas do código e como chegar na solução final. Você pode pensar que não é necessário porque alguém já escreveu algo, mas é importante você compartilhar o seu ponto de vista.

Compartilhe conhecimento com seu time no trabalho, compartilhe trechos de código, converse sobre novas tecnologias, dê seu ponto de vista e ajude durante revisões de código. Um ponto chave no aprendizado é compatilhar.

Trate seu projeto com carinho

Uma vez que seu projeto começar a ficar mais estruturado, você irá perceber que quebrar o código não é mais tão divertido quanto era no começo. Depois de todo seu esforço, você ficará mais cuidadoso ao integrar alterações no seu código base.

Para proteger melhor o código, minha primeira recomendação é proteger o branch master de commits. Essa alteração permite que novas alterações entrem na master apenas através Pull Requests, impedindo mudanças que quebrem o código ou que funcionalidades não terminadas sejam integradas. É muito importante conhecer o GitHub Flow (ou similar em outra plataforma), mas para resumir, o branch master deve sempre estar pronto para ser lançado.

Uma das partes mais importante para um desenvolvimento sustentável é garantir a qualidade do código. Adicionar análise de código estáticas, revisão de código automatizada e integração contínua no projeto irá ajudar muito em sua manutenção no futuro. Ferramentas como Detekt, Ktlint, Codebeat, Travis CI e Circle CI são gratuitas para uso não comercial e funcionam perfeitamente com projetos Android.

Encontre seu próprio ritmo

Desenvolver seu próprio projeto pessoal é desafiador. Você é responsável por cada passo do aplicativo, da arquitetura de software e design da interface visual, até o lançamento no Google Play. Mas não é porque você tem vários papéis que você deve se cobrar demais. Respeite seu ritmo, desenvolva no seu tempo livre, não existe prazo ou cliente pedindo entregas. Seu projeto tem que ser divertido e recompensador.

Durante o desenvolvimento do Alkaa nesse últimos dois anos, houve momentos que eu não encostei no projeto por um, dois meses. E não tem problema algum nisso. Em alguns momentos sua vida profissional vai te demandar muito, em outros será sua vida pessoal ou você vai simplesmente querer aproveitar seu tempo fazendo outras coisas. Não torne seu projeto em algo a mais para se cobrar na sua vida.

Considerações finais

Desenvolver seu projeto pessoal irá te ajudar a aprender novas tecnologias, melhorar suas habilidades atuais e te tornar mais confiante no trabalho. Não tenha medo de cometer erros, você irá aprender muito com eles! Para concluir, eu vou deixar um ótimo pensamento para o seu novo ano:

“Espero que nesse próximo ano, você cometa erros.

Porque se você está cometendo erros, então você está fazendo novas coisas, tentando novas coisas, aprendendo, vivendo, se esforçando, mudando a si mesmo, mudando o mundo. Você está fazendo coisas que nunca fez antes, e mais importante, estará fazendo algo.”

— Neil Gaiman

Obrigado pela leitura!

--

--

Igor Escodro
Android Dev BR

Passionate Android developer | Google Developer Expert for Android