Case study · Financial Services · 2025

A fintech startup

Rebuilt a slow, drop-off-heavy onboarding flow into a fast, typed, multi-step experience with resumable sessions — cutting abandonment and speeding up KYC.

The challenge

New users were abandoning a long, single-page sign-up before finishing KYC. Every reload lost their progress, validation errors surfaced too late, and the backend coupling made even small changes risky to ship.

What we did

  • Rebuilt onboarding as a typed, multi-step flow with resumable, server-persisted sessions so no progress is ever lost.
  • Moved validation inline and early, with clear, human error messages at each step instead of one wall at the end.
  • Split the KYC provider integration behind a clean service boundary, so verification changes ship without touching the UI.
  • Instrumented each step to see exactly where drop-off happened — and kept iterating against real funnel data.

Outcomes

-41%
onboarding drop-off
2.3x
faster completion

Services

Web EngineeringUI/UX DesignBackend Engineering

Stack

Next.jsTypeScriptGoPostgres
Start a project

Key engineering decisions

The choices that shaped this build — and the reasoning behind them. It’s how we think about a problem, not just what we shipped.

Architecture

Next.js for the funnel, a Go service for KYC

Onboarding is public and conversion-critical, so we wanted server rendering and fast first paint — Next.js's strength. Identity checks are CPU-bound and latency-sensitive, so we isolated them in a Go service with predictable performance under load. One language per job, not one framework for everything.

2.3x faster completion
UX

Resumable, server-persisted multi-step flow

We replaced a single long form with a typed, multi-step flow whose state is persisted server-side after every step, so a dropped connection or a returning user never loses progress. Validation moved inline and early, with human-readable errors at each step instead of one wall at the end.

-41% drop-off
Security

KYC provider behind a hardened service boundary

Sensitive identity data flows only through a single, isolated service with least-privilege access and audited I/O — never through the client or the public app tier. That boundary also lets us swap or add verification providers without touching the UI or widening the data's blast radius.

Performance

Step-level funnel instrumentation

Every step emits structured events, so we can see exactly where users hesitate or drop and iterate against real data instead of guesses. Several of the biggest wins came from removing friction the analytics surfaced, not from redesigns.

Engineering notes

Because each step is independently persisted and validated, the flow degrades gracefully on flaky mobile connections — a reload resumes exactly where the user left off. That resilience, more than any single optimisation, is what moved the completion numbers.

Let's build

Have something to build?

Tell us what you're working on. We'll get back to you with a clear, honest take on how we can help.