← All work
Android · Kotlin · 2025 · Series-B fintech (under NDA)

Rebuilding onboarding for a Series-B fintech

Cut a fragile, single-module onboarding flow down to a modular, testable Compose architecture — and halved time-to-first-screen.

Lead Android Engineer (contract)

Drop 1–2 screenshots in src/content/work/ and list them under shots:

The problem

A growing onboarding flow had calcified into one massive module with tangled view-model state. Every change risked regressions, build times ballooned, and the team had stopped writing tests because nothing was isolatable.

The problem

The flow had grown organically from MVP to revenue driver without ever being re-architected. UI, navigation, validation, and network logic all lived in a single module behind a handful of god view-models. Onboarding was the company’s highest-stakes surface — and the scariest one to touch.

The approach

  • Carved out clear module boundaries:feature:onboarding, :core:network, :core:design — with explicit public APIs and no leaking internals.
  • Modeled state as a single source of truth per step using sealed UI states and StateFlow, so every screen became deterministic and previewable.
  • Made it testable — pure, injectable use cases behind interfaces; the critical validation and navigation paths got unit coverage that actually runs in CI.
  • Rebuilt the UI in Compose against the existing design system, matching the designers’ intent pixel-for-pixel while collapsing duplicated XML.

The result

Parallel delivery became possible, build times dropped, and the team started writing tests again because the seams finally existed. The architecture has since absorbed two major flow changes without a rewrite.