DUOLABS
Work

Long-run operation of a payment app

We took on a mobile payment app that sees frequent payments, built its features, and ran it for a long stretch. While moving code written in an older programming language onto a new structure without changing its existing behavior, we kept the flow from payment request through failure and retry running. In a payment app, a single small defect becomes a question of user trust. The work spans the code migration, payment flows, camera document submission, multiple languages, and collecting and fixing app errors.

Launch
2020
Client
A payments company
Type
Payments

01 / 04

A code migration done without stopping a live payment app

The mobile payment app ran on code written in an older programming language, and that code was moved to a structure centered on the current language. Real payments were flowing through the service, so existing behavior stayed as it was while code boundaries were reorganized to make new features and maintenance easier. Payments kept happening during the move, so releases were conservative and the area around each change was rechecked every time.

A code migration done without stopping a live payment app
02 / 04

A payment flow that never loses track of state, from request to retry

A mobile payment runs as a flow of payment request, authentication, result handling, failure response, and retry. While building and maintaining this flow, the exceptions and state handling that can arise at each step were checked with care. In a payment app, even one small defect shakes user trust at once.

A payment flow that never loses track of state, from request to retry
03 / 04

Camera document submission, and messages that mean the same in every language

The mobile payment app includes a feature for photographing documents with the camera and submitting them. It was built and maintained with the real-world flow in mind: camera permission, the quality of the captured image, upload status, and failure handling. The user base is broad, so screen text was organized in several languages, and messages that must be precise, such as payment, authentication, and error messages, were checked against the screen flow to make sure they did not drift between languages.

Camera document submission, and messages that mean the same in every language
04 / 04

Operations that gathered app errors and fixed causes first, with crashes near zero

Errors in the live mobile payment app were gathered and watched with an error-collection tool, traced to their cause, and fixed quickly. Throughout the operating period, the rate of app crashes was kept close to zero. The app was run alongside another payment app built on the same foundation, with issues shared remotely and the scope of each fix agreed.

Operations that gathered app errors and fixed causes first, with crashes near zero

Highlights

01

Moving old code onto a new structure while keeping existing behavior

02

Maintaining the payment flow from request and authentication through failure and retry

03

Operations that collected and fixed app errors, keeping crashes close to zero

Insights

Read the blog