Most engineers building payments bounce between conversations on databases and conversations on distributed systems. It’s as if the two actual hard things in computer science are migrations and race conditions.
I got a hint of that a few weeks ago, while doing research on Caitie McCaffrey’s distributed sagas. Here’s what I wrote back then:
At the end of the paper, there’s an intriguing sentence that caught the attention of McCaffrey: “We believe that a saga [as a distributed system] can be implemented with relatively little effort”.
That was the insight that McCaffrey needed. Sagas were the missing step between the single relational database and the distributed system that could make Halo 4 possible.
To create a system that felt like a relational database but was distributed, McCaffrey had to design a data system that preserved some of its guarantees, but didn’t need to be built on a single machine. That’s why she got inspired to build a distributed system after reading a database paper.
When I wrote how Uber tests in production, I argued that creating a staging environment to test services you can’t control is pointless.