Curry On
July 15-16th, 2019

Finite-State Machines: All models are wrong but this one is useful
Raj Saxena
Chris Ford


At N26, we are building a bank the world loves to use. As we expanded to the UK, we faced a challenge. We needed to extract a payment workflow evolved over years of operation in the Eurozone, mix it with the arcane rules of the British banking system and produce a robust and extensible service. At all times, we had to be able to reconstruct and explain the history of every single payment. We had to move fast and not break things. Our solution? A well-worn formalism - finite-state machines! Our team used the meta-language of states and transitions as a common frame of reference. Everyone, from product owner, to programmer, to the person on the business end of the support pager, shared this vocabulary. This talk is an experience report from N26 and ThoughtWorks. We share how in 2018 we built the payment system for the UK Market using finite-state machines as a unifying conceptual notation. We will explain how this approach informed our analysis, documentation, implementation, resilience and observability. We will discuss the design decisions we made and the tricks we used to make our lives easier.


Raj is part of the core banking team at N26 and has lead the work of building the UK payment platform. He is a polyglot programmer having experience building JVM based backend systems and frontend apps. He likes to build systems and understands that one of the biggest challenge in building software is to take the team along. He is thrilled by new technologies, best practices and promotes them. He can often be found playing devil’s advocate in discussions. Very good at pretending to be an adult.

Chris has coded both correct and incorrect programs for many years, though he prefers the former. He has also coded both correct and incorrect musical compositions for many years, though he doesn’t really mind which. As well as a longstanding interest in TDD, types and continuous delivery, Chris is always interested in learning better ways to write programs that do what they are supposed to do. He is Head of Technology for ThoughtWorks Spain and is based in Barcelona.