Stephan Ewen, Founder and CEO of Restate.dev joins the show to talk about the coming era of resilient apps, the meaning of and what it takes to achieve idempotency, this world of stateful durable execution functions, and when it makes sense to reach for this tech. :link: https://changelog.fm/636
Ch | Start | Title | Runs |
---|---|---|---|
01 | 00:00 | This week on The Changelog | 00:56 |
02 | 00:56 | Sponsor: Retool | 02:45 |
03 | 03:46 | Start the show! | 03:10 |
04 | 06:56 | Demystify Idempotency | 02:13 |
05 | 09:09 | Achieving Idempotency | 02:29 |
06 | 11:38 | Where does the word Idempotency come from? | 02:15 |
07 | 13:53 | Why solve this problem? Why you? | 08:58 |
08 | 22:51 | Leaving Flink | 06:25 |
09 | 29:15 | Sponsor: Heroku | 02:40 |
10 | 31:56 | What is durability? | 07:26 |
11 | 39:22 | When should I reach for this? | 06:41 |
12 | 46:03 | The era of Resilent Apps as a service (RAaaS)? | 03:29 |
13 | 49:32 | Marketing challenge of resilience | 04:18 |
14 | 53:50 | Tangent: Why are AI agent demos booking flights? | 01:37 |
15 | 55:27 | Sponsor: Augment Code | 03:30 |
16 | 58:57 | Adam predicts that "this is the year" of durable and resilience | 11:50 |
17 | 1:10:46 | Infra required for Restate | 04:29 |
18 | 1:15:16 | It's Schrödinger's cat | 04:06 |
19 | 1:19:22 | Publishing Changelog with Restate? | 11:19 |
20 | 1:30:41 | This new world of durable execution functions | 05:32 |
21 | 1:36:13 | Changelog.com/community | 00:21 |
22 | 1:36:34 | Closing thoughts? | 01:50 |
23 | 1:38:24 | More thoughts and closing | 01:38 |
Just started listening! Keen for this. There was previous discussion around this topic: https://changelog.zulipchat.com/#narrow/stream/453512-general/topic/What.20trending.20tech.20are.20you.20most.20bullish.20on.3F/near/490607287
In the first five minutes, I knew I was going to love this episode. The conversation diving into explaining the concept of idempotency was great to hear called out rather than just glossed over. It is such a useful concept to understand, but not always easy to grasp and apply. I’ve utilized similar concepts applied to managing system resources and configuration management with Terraform and Ansible where it’s important to ensure the expected result even when events are repeated. It’s nice to see the significant impact these same principles provide when applied in other areas than the ones I have familiarity with.
I might be biased here, from working with Elixir for so long... but the entire episode gave me vibes of you have built an erlang thing, and when Jerod mentioned Elixir just caught him off guard. :joy:
Excelent episode, and it's great that is a tool that you can self host and is source available. But the same way as temporal I think it just doesn't appeal for me the same way it would appeal to others.
There was an Oxide and Friends episode on distributed sagas that's sort of related: https://oxide-and-friends.transistor.fm/episodes/the-saga-of-sagas
I don't know why Erlang didn't take over the world. I guess back when it started getting into the mainstream it had some performance problems with strings or something. That article is brilliant though. I know I have built complex systems and then said "I should have done it in erlang"
You can achieve similar reliability in Go if you never mutate anything, and only use channels to pass values between go func
s (no sharing values between them otherwise)
Otherwise, for efficient and safe concurrency, really nothing beats Erlang/Elixir, Swift, or Rust
Or Pony :) https://www.ponylang.io/
@cevado it's a fun article but it doesn't really paint a compelling picture to me... I would sincerely really love to understand the Erlang way, but maybe I just haven't worked on the kinds of systems which need it?
Maybe resisting the microservices hype has insulated me from the worst of the problems. We still run our company on a PHP monolith with a Redis job queue and a few tightly-scoped side services. I'm not saying that's better than using Erlang, just that maybe I'm not well placed to understand the problems the post describes :/
@Daniel Buckmaster the article is just for fun but I guess it highlights what the erlang vm really is:
- An asynchronous, message-based runtime.
- Supervision trees for fault-tolerant processes.
- Lifecycle management for dynamic workers.
- APIs for synchronous and asynchronous calls.
- Live introspection tools for debugging.
- A distributed message inbox (that still isn’t quite sharded right).
when I worked with ruby and started working with elixir I had the same feeling. "I just don't need it all". the thing clicked to me when I realized that I stopped reaching for external tools and just relied on what's already available on the VM.
when your runtime provide you the basics of atomic execution, location transparency, communication abstractions that are cluster aware, easy to handle clusterization, self recovery and everything else that comes with erlang vm you just delay more definitive and impactfull architectural decisions. this means you end up having more time to bake in your solution, see it evolving as your app scales up and do the choices that is a big compromise over your entire system architecture later.
it's like what Sandi Metz says on this talk about the wrong abstraction. sometimes you need to give time for the right abstraction to show up, now imagine that applied to the distributed systems architecture. it makes the life of the engineer and reasoning about what you're doing more simple. just as an example in the past 3 jobs that i worked, we reached for redis once, and it was to coordinate something between a go application and the elixir application.
but for sure it's a double edged sword, you shouldn't get in love with the smart solution that you've built, when you have a architectural decision screaming to be made, it's good to extract it out, make it available to other parts/applications of your system.
In my case I had to build several micro services around a rails monolith. Some were because I wanted better performance, some were because I had to have many persistent connections, some were for background tasks and scheduled tasks, and I also leveraged some SAAS apps from Amazon. Of course apps that monitored all this and reacted when things went wrong.
When it was all said and done there were several languages at play, a few databases etc. I think Erlang would have been able to handle all of that in a uniform and and comfortable way.
Having said all that I wasn't an expert at Erlang having just dabbled in it for fun and of course nobody else in the company knew erlang and I had no idea where I would hire erlang programmers from.
This was all more than a decade ago. Today I might have reached for go maybe but back then go was pretty new and didn't have much mindshare.
Tim Uckun said:
Having said all that I wasn't an expert at Erlang having just dabbled in it for fun and of course nobody else in the company knew erlang and I had no idea where I would hire erlang programmers from.
This is probably the most important factor in stack choice, and overlooked because it's social and not technical
RE: naming of “durable functions” from the end of the episode.
What about Durable Executions, DEX for short? Has a nice ring :smile:
I think the product should be named "function orchestration" which is what it really is. Tagline "kubernetes for your functions"
Hehe, when teaching PaaS to UI folks, I often say "kubernetes is React for compute/network resources"
Make a backronym for FORT Function Orchestration (for) Resilient (Restartable?) Transactions
Ron Waldon-Howe said:
There was an Oxide and Friends episode on distributed sagas that's sort of related: https://oxide-and-friends.transistor.fm/episodes/the-saga-of-sagas
That whole episode I was just waiting for someone to bring up the comparison.
Last updated: Jun 28 2025 at 12:32 UTC