One Flutter codebase, three teams, and a flagship credit app

myEquifax is the consumer app for one of the three national credit bureaus, where people check their score, freeze their file, and watch for their information on the dark web. Equifax embedded a senior Black Airplane Flutter expert with its own mobile team and its product agency for six months in 2024: to set one architecture for all three teams, take sign-in and payments to completion, and prove a feature could run on the web.

Client
Equifax, one of the three national credit bureaus
Role
A senior Flutter expert embedded with their mobile team, alongside their product agency
Services
Architecture review, mobile development, authentication, payments integration, training
Stack
Flutter, Dart, Auth0, Swift and Kotlin platform channels, Flutter web
Engagement
Six months, 2024

Results

  • 6

    Test environments with working Auth0 sign-in

  • 1

    Crossing point between app code and native payments

  • 15+

    Equifax employees at our Flutter workshop

The audit

Three teams, one way to build

Equifax’s mobile team, their product agency, and Black Airplane were all writing code into the same app. We read the whole codebase, then wrote down one structure every team would follow, so a feature looks the same whoever builds it.

  • Structure

    The same three layers in every feature

    Screens, business rules, and data access each have their own place in every feature, whichever team builds it.

  • Testing

    Rules that can be tested on their own

    Business rules sit apart from the screens, so they can be checked without building a screen around them.

  • Review

    One vocabulary for code review

    With the layers named, three teams could review each other’s work in the same terms.

  • Change

    Changes that stay where they belong

    A redesigned screen, a new business rule, or a changed API each touches one layer, not the whole feature.

Sign-in

Auth0, end to end, in every environment

The app was moving to Auth0 from a beta sign-in path that was never meant to carry production traffic. We owned the Auth0 implementation in the app: login and logout, token handling, and the wiring that has to be right before it can be trusted with a credit file.

Equifax tests in six environments, each with its own Auth0 tenant, and mobile sign-in ends with a link the phone has to route back into the right build. So we worked through them with the internal team, one environment at a time, until a tester in any of them could sign in and land back in the app.

Payments

Native payments behind one Dart package

Payment capability already existed in native code. We reached it from Flutter through one internal Dart package that crosses to Swift on iOS and Kotlin on Android over platform channels.

Feature teams call one Dart API and never touch the native side. If the native contract changes, one package changes with it, and the screens that take payment never have to know.

Proof of concept

The same feature, running in the web portal

Equifax’s web portal is built and maintained apart from the app. To show that mobile work could serve the web too, we compiled a Flutter feature from the mobile codebase for the web and mounted it inside an existing portal page, as a component of a page the portal already owned.

It was a proof of concept, and we presented it as one. It drew enough interest that we ran a workshop on Flutter’s cross-platform and web capabilities for more than fifteen Equifax employees across several teams.

The app after launch

  • 1.5M

    Downloads in the app’s first year

  • 4.8

    App Store rating, across 48,000+ ratings

  • 5.3

    Sessions per user, as reported after launch

myEquifax launched in April 2025, after this engagement. Equifax shared the download and session figures publicly; the App Store rating was verified in October 2026. They belong to the product and the people who launched it, not to us.

What services are you looking for?