
Show Notes
Eighteen months ago, Tyler Cloutier appeared on the show with what sounded like an ambitious (some might say crazy) plan: build a new distributed database from scratch, then use it to power a massively multiplayer online game. That's two of the hardest problems in software, tackled simultaneously. But sometimes the best infrastructure comes from solving your own impossible problems.
The game, Bitcraft, has now launched on Steam. SpacetimeDB has hit version 1.0. And Tyler returns to share what actually happened when theory met production reality. We cover the launch day performance disasters (including a cascading failure caused by logging while holding a lock), why single-threaded execution running entirely from L1 cache can outperform sophisticated multi-threaded approaches by two orders of magnitude, and how the database's reducer model - borrowed from functional programming - enables zero-downtime code deployments. We also get into how SpacetimeDB is expanding beyond games with TypeScript support and React hooks that make building real-time multiplayer web apps surprisingly simple.
If you're building anything where multiple users need to see the same data update in real time - which, as Tyler points out, describes most successful applications from Figma to Facebook - SpacetimeDB's approach of treating every app as a multiplayer game might be worth understanding.
--
Support Developer Voices on Patreon: https://patreon.com/DeveloperVoices
Support Developer Voices on YouTube: https://www.youtube.com/@DeveloperVoices/join
SpacetimeDB: https://spacetimedb.com/
SpacetimeDB on GitHub: https://github.com/clockworklabs/SpacetimeDB
Our previous episode with Tyler: https://youtu.be/roEsJcQYjd8
Clockwork Labs: https://clockworklabs.io/
Bitcraft Online: https://bitcraftonline.com/
Bitcraft on Steam: https://store.steampowered.com/app/3454650/BitCraft_Online
WebAssembly: https://webassembly.org/
Flecs (ECS for C/C++): https://www.flecs.dev/flecs/
TigerBeetle: https://tigerbeetle.com/
CockroachDB: https://www.cockroachlabs.com/
Google Cloud Spanner: https://cloud.google.com/spanner
Erlang: https://www.erlang.org/
Apache Kafka: https://kafka.apache.org/
Tyler Cloutier on X: https://x.com/TylerFCloutier
Tyler Cloutier on LinkedIn: https://www.linkedin.com/in/tylercloutier/
--
Kris on Bluesky: https://bsky.app/profile/krisajenkins.bsky.social
Kris on Mastodon: http://mastodon.social/@krisajenkins
Kris on LinkedIn: https://www.linkedin.com/in/krisjenkins/
0:00 Intro
2:01 The Architecture of SpacetimeDB
5:01 Client-Side Prediction in Multiplayer Games
11:00 Reducers and Event Streaming
15:00 Launching Bitcraft on Steam
19:00 Debugging Launch Performance Problems
26:56 Hot-Swapping Server Code Without Downtime
30:01 In-Memory Tables and Query Optimization
42:00 Is SpacetimeDB Only For Games?
51:00 Performance Benchmarking For Web Workloads
55:00 Why Single-Threaded Beats Multi-Threaded
1:00:01 Multi-Version Concurrency Control Trade-offs
1:05:01 Sharding Data Across Multiple Nodes
1:10:56 Inter-Module Communication and Actor Models
1:17:00 Replication and the Write-Ahead Log
1:24:00 Supported Client Languages
1:29:00 Getting Started With SpacetimeDB
1:39:02 Outro
More from Developer Voices
How would you manage 30 million lines of PHP? You can't rewrite it - you'd be fired long before you delivered. That was the problem facing Facebook around 2011, and their answer was to add a type system, giving birth to the Hack language. But adding types to PHP turned out to be the easy part. The hard part was building a type checker that developers used to "edit, save, refresh" would actually tolerate. So how do you type-check tens of millions of lines of code fast enough that nobody notices?
Building something people actually want is supposed to be the happy ending. But it arrives with a bill attached: feature requests you didn't ask for, pull requests you'd rather not maintain forever, users demanding the one thing you swore you'd never build, and — if you're unlucky — a company where the sales team quietly starts deciding what engineering works on. DuckDB has spent the last two and a half years working through that list. So how do you stay a database engineering team when success keeps trying to turn you into something else?
My guest this week is James Brown, an engineering lead at Schroders, and that's a useful vantage point — asset managers carry all the regulation and organisational weight of a bank, mixed with the first-to-market pressure of a startup. James starts with his own "Claude mania": months of agents running around the clock, and the wave of anxiety that hit him one morning walking to the shop without one running at home. From there, Clair — the plugin he's building to give coding agents proximal awareness of each other, using git orphan branches as a zero-infrastructure message bus; why AI behaves like oxygen in a room full of tiny fires; what "going well" actually measures inside a regulated firm; and why he thinks team sizes won't change, even when the number of teams does.
There's a problem that's bugged the database industry since the 1980s: you run an expensive query over millions of rows, cache the result, and then a single new row arrives. Logically that's one small update, but most engines throw the cached answer away and recompute everything from scratch. Some will handle changes incrementally, but only for "simple" queries - and the rules for what counts as simple are arbitrary and brittle. So can you incrementally maintain *any* SQL query, no matter how complex? For decades the answer was no. Then an award-winning paper called DBSP proved that the answer is yes - all queries are simple enough.
AI is changing the way we all build software — that much seems clear. But the landscape is moving so fast that even the people paid to keep up are struggling. MCP or skills? Fine-tune or just prompt? LangChain or let a thousand agents loose? With almost 70 competing technologies and a shelf life of maybe six months on any advice, how do you figure out what's actually worth your time?