OO
Back to Work
FlutterMobile ArchitectureCross-border payments

Voye

Senior Mobile Engineer — owned mobile architecture for the wallet and cross-border transfer surfaces, end to end.

Building a production-reliable Flutter transfer experience across multiple payment partners and regions with different compliance constraints - while keeping transaction states observable and user recovery paths predictable.

Voye hero screenshot

01

The Problem

Building a production-reliable Flutter transfer experience across multiple payment partners and regions with different compliance constraints - while keeping transaction states observable and user recovery paths predictable.

02

Approach & Architecture

Built an end-to-end transfer experience covering quote generation, beneficiary setup, sender validation, funding, payout, and transfer lifecycle tracking. The focus was production reliability across multiple payment partners and regions with different compliance constraints. Delivery prioritized observable transaction states, clear operational fallbacks, and predictable user recovery paths when dependencies were degraded.

One codebase shipped the same regulated transfer flow to iOS and Android at once — important when compliance requirements mean the logic has to stay identical across platforms, not just visually similar.

Key decisions

  • Separated identity, transfer orchestration, and wallet operations into bounded mobile domains.
  • Standardized API contracts and state transitions to reduce integration drift and ambiguous UI states.
  • Implemented idempotent retry handling and reconciliation logic for partner timeout and duplicate-event scenarios.

Security considerations

  • Applied secure credential storage, token lifecycle controls, and least-privilege session boundaries.
  • Instrumented auditable user and transaction events for fraud investigation and compliance operations.
  • Aligned verification and transaction checks with KYC/AML process requirements.
Voye screenshot

03

Technical Challenges

A transfer in Voye isn't a single API call — it moves through KYC, FX quote generation, payment processing, settlement, and transaction tracking, each a separate system with its own timing. The hardest part was making sure the mobile app always reflected the correct state of a transaction, even when backend events arrived out of order or connectivity was poor.

04

Trade-offs

We prioritized reliability over real-time updates: rather than making every screen depend on a live request, the app leaned on local state and background synchronization where it made sense. Some information updated a beat later than instant, but the experience stayed stable on the unreliable networks a lot of this user base actually has.

05

Outcome

Live on App Store and Play Store. Handles multi-currency transfers with transparent payout status across international corridors.

06

Lessons Learned

The biggest lesson was designing around transaction state transitions instead of screens. Once I started thinking in terms of a transfer's lifecycle rather than a sequence of UI flows, features became easier to reason about, easier to debug, and more resilient to failure.