Revolut Vincent Berihuete Aug 17, 2022

iOS Screen Navigation Engine at Revolut

Article Summary

Vincent Berihuete from Revolut reveals how they ditched traditional iOS navigation patterns for something far more powerful. Forget Coordinators—this is about building a custom navigation engine that eliminates code duplication across massive fintech flows.

Revolut's iOS team built a Flow Engine: a state machine-driven navigation system that abstracts screen flows and their dependencies. Instead of copying navigation logic across view controllers, they created reusable flows that handle complex user journeys (like product details with related items and cart actions) in a single, testable abstraction layer.

Key Takeaways

Critical Insight

Revolut's Flow Engine transforms iOS navigation from scattered view controller logic into centralized, testable flows that can be called with a single line of code from anywhere in the app.

The article includes full code samples showing exactly how to build your own Flow Engine backbone and implement it for real-world scenarios.

About This Article

Problem

iOS developers at Revolut had navigation logic scattered across view controllers. Whenever ProductDetails or similar screens needed to be called from multiple locations, they had to copy-paste implementations and manage different business actions and dependencies each time.

Solution

Vincent Berihuete's team built a three-layer Flow Engine using a state machine. Flow defines steps and state, FlowPerformer executes logic, and FlowRunner simplifies everything into single-line calls like runProductDetailFlow().

Impact

Developers can now call complex multi-screen flows from anywhere in the app with a single line of code. The architecture also improves testability through TDD-friendly abstractions and removes code duplication across Revolut's navigation patterns.