Case study · Fintech
Pagamentos Pix na escala de um superapp
Construção e evolução dos módulos de pagamento Pix de um superapp de alto tráfego usado por milhões de pessoas, com Coroutines, Flow e Clean Architecture.
- Cargo
- Engenheiro Android III → Engenheiro Android Sênior
- Empresa
- Zup Innovation
- Período
- set 2023 – Atual
Contexto
A Zup Innovation é uma empresa brasileira de tecnologia que constrói produtos digitais para grandes clientes. Eu trabalho no app Android nativo de um superapp de alto tráfego do setor financeiro, em que o Pix é uma das funcionalidades mais usadas. Milhões de usuários ativos dependem dele para movimentar dinheiro todos os dias.
Entrei em setembro de 2023 como Engenheiro Android III e fui promovido a Engenheiro Android Sênior em dezembro de 2024.
Desafio
Pagamento deixa pouca margem para erro. Cada mudança precisa se sustentar em quatro frentes ao mesmo tempo:
- Segurança e corretude. Cada fluxo conversa com APIs REST de alta segurança e precisa lidar com timeouts e falhas sem deixar o usuário em dúvida se o dinheiro saiu ou não.
- Performance em escala. Com milhões de usuários em todo tipo de aparelho, pequenas regressões de renderização ou de threading viram chamados de suporte rapidamente.
- Vários squads, um app. As features precisam de fronteiras claras para que vários times entreguem em paralelo sem atrapalhar uns aos outros.
- Ritmo de release. Um superapp publica versões com frequência, então o pipeline precisa ser rápido e confiável.
Abordagem
Features de pagamento modulares. Liderei o desenvolvimento de features nativas centrais como módulos independentes, com dependências explícitas, o que melhorou a modularidade e o reuso de código entre os fluxos.
Clean Architecture com MVVM. A UI é feita em Jetpack Compose e só renderiza estado. Os ViewModels transformam as intenções do usuário nesse estado, os use cases concentram as regras de negócio e os repositórios escondem de onde os dados vêm. Cada camada pode ser testada isoladamente.
Coroutines e Flow de ponta a ponta. A concorrência estruturada mantém o trabalho de rede e de disco fora da main thread e o cancela quando o usuário sai da tela. O estado da tela é um único StateFlow, então a UI não fica dessincronizada do que o app sabe.
@HiltViewModel
class PixViewModel @Inject constructor(
private val sendPix: SendPixUseCase,
) : ViewModel() {
private val _uiState = MutableStateFlow<PixUiState>(PixUiState.Editing())
val uiState: StateFlow<PixUiState> = _uiState.asStateFlow()
fun authorize(request: PixRequest) {
// A payment must never be submitted twice.
if (_uiState.value is PixUiState.Processing) return
_uiState.value = PixUiState.Processing
viewModelScope.launch {
_uiState.value = sendPix(request).fold(
onSuccess = { receipt -> PixUiState.Success(receipt) },
onFailure = { error -> PixUiState.Failure(error.toPixError()) },
)
}
}
}Integração segura com APIs. Trabalho junto com os times de produto e backend na integração de APIs REST de alta segurança para fluxos financeiros digitais.
CI/CD no Jenkins. Ajudo a manter os pipelines que fazem o build, os testes e a publicação do app. Automação confiável é o que torna seguros os releases frequentes.
Mentoria. Também sou mentor de devs juniores em boas práticas de Kotlin, arquitetura MVVM e testes unitários.
Arquitetura
Nesta visão simplificada, os módulos de feature dependem dos módulos core, mas não uns dos outros, e o módulo do app conecta tudo com o Hilt. Dentro de uma feature, as dependências apontam para dentro: a UI conhece o ViewModel, o ViewModel conhece os use cases, e só a camada de dados conhece o Retrofit e o Room.
Resultados
- Módulos de pagamento escaláveis atendendo um superapp usado por milhões de usuários ativos.
- Mais performance e estabilidade, com Coroutines, Flow e padrões de Clean Architecture.
- Ciclos de release mais rápidos, sustentados por pipelines de CI/CD robustos no Jenkins.
- Promoção de Engenheiro Android III para Engenheiro Android Sênior em dezembro de 2024.
Stack
As ferramentas por trás desse trabalho, todas usadas em produção:
- Kotlin
- Jetpack Compose
- Coroutines
- Flow
- Hilt
- Retrofit
- Jenkins
Os detalhes foram simplificados e os nomes de clientes omitidos para respeitar a confidencialidade.
Próximo case study
Do MVP legado para MVVM e Clean Architecture
Terras App SolutionsQuer construir algo assim?
Estou aberto a vagas de Android sênior em empresas internacionais.