Ismael Celis
@ismaelcelis.com
I'll be at today's London Ruby User Group meet-up, speaking about Event Sourcing, eventual consistency and durable messaging patterns. Show up if interested! lrug.org
LRUG | London Ruby User Group
The London Ruby User Group (LRUG) meets on the 2nd Monday of the month for talking and socialising (about Ruby).
lrug.org
November 10, 2025 at 10:25 AM
I'll be at today's London Ruby User Group meet-up, speaking about Event Sourcing, eventual consistency and durable messaging patterns. Show up if interested! lrug.org
Reposted by Ismael Celis
Are you ready for the Scottish Ruby User Group this week? We're to be joined by the fabulous @ismaelcelis.com to talk durable messaging, event sourcing and more! Also: you can just hang out with other Rubyists. Sign up and we'll see you on Thursday! www.meetup.com/scotrug/even...
Durable messaging and related patterns in Ruby, for fun and profit, Thu, Nov 13, 2025, 6:00 PM | Meetup
Hallowe'en is almost upon us - get ready for [the Samhuinn celebrations](https://beltane.org/about-samhuinn/) maybe carve yourself a neep as tradition suggests. And then? W
www.meetup.com
November 9, 2025 at 10:51 PM
Are you ready for the Scottish Ruby User Group this week? We're to be joined by the fabulous @ismaelcelis.com to talk durable messaging, event sourcing and more! Also: you can just hang out with other Rubyists. Sign up and we'll see you on Thursday! www.meetup.com/scotrug/even...
I need to shave off 16 minutes from this talk somehow, without it losing meaning.
November 9, 2025 at 12:37 PM
I need to shave off 16 minutes from this talk somehow, without it losing meaning.
Autonomous components communicating by reading and appending messages to a log. This temporal decoupling is what enables the logical boundaries that most micro-services fail to achieve. Blocking direct calls = temporal coupling.
November 9, 2025 at 12:50 AM
Autonomous components communicating by reading and appending messages to a log. This temporal decoupling is what enables the logical boundaries that most micro-services fail to achieve. Blocking direct calls = temporal coupling.
Re-playability and autonomy, two faces of the same coin.
November 9, 2025 at 12:31 AM
Re-playability and autonomy, two faces of the same coin.
Playing with Given, When, Then helpers to test event-sourced Actors.
GIVEN these previous events
WHEN I dispatch a new command
THEN I expect these new events
Pure, behaviour tests, no database in sight.
GIVEN these previous events
WHEN I dispatch a new command
THEN I expect these new events
Pure, behaviour tests, no database in sight.
November 8, 2025 at 6:09 PM
Playing with Given, When, Then helpers to test event-sourced Actors.
GIVEN these previous events
WHEN I dispatch a new command
THEN I expect these new events
Pure, behaviour tests, no database in sight.
GIVEN these previous events
WHEN I dispatch a new command
THEN I expect these new events
Pure, behaviour tests, no database in sight.
Sourced's durable workflows are just event-sourced reactors under the hood, so they can participate in "conversations" with other actors just as well. This example holiday booking runs and retries steps sequentially.
November 8, 2025 at 12:19 PM
Sourced's durable workflows are just event-sourced reactors under the hood, so they can participate in "conversations" with other actors just as well. This example holiday booking runs and retries steps sequentially.
I'll never get tired of rebuilding event sourced projections
November 7, 2025 at 7:10 PM
I'll never get tired of rebuilding event sourced projections
Reposted by Ismael Celis
I shared a bit more detail about the morphing algorithm in Morphlex here. I also released Morphlex 1.0. joel.drapper.me/p/morphlex/
Better DOM Morphing with Morphlex
joel.drapper.me
November 7, 2025 at 11:45 AM
I shared a bit more detail about the morphing algorithm in Morphlex here. I also released Morphlex 1.0. joel.drapper.me/p/morphlex/
The TODO List pattern in Event Sourcing is such a simple way to orchestrate integrations with third parties, for example sending and tracking web hooks
November 7, 2025 at 11:46 AM
The TODO List pattern in Event Sourcing is such a simple way to orchestrate integrations with third parties, for example sending and tracking web hooks
The talk I’m preparing just split into two possible talks 😭
November 7, 2025 at 12:17 AM
The talk I’m preparing just split into two possible talks 😭
23 slides in, probably a third of the talk done. Onward.
November 6, 2025 at 6:21 PM
23 slides in, probably a third of the talk done. Onward.
I wrote a quick mixin with a basic ".on(message)" DSL to facilitate building message handlers that don't require full Event Sourcing semantics. Handler methods can still request full event history for a stream, so you can still build ES on top of this, if needed.
November 6, 2025 at 1:33 PM
I wrote a quick mixin with a basic ".on(message)" DSL to facilitate building message handlers that don't require full Event Sourcing semantics. Handler methods can still request full event history for a stream, so you can still build ES on top of this, if needed.
Got the Todo App demo working with the new event-sourced architecture, too. Again no UX changes, but it's good to have a couple of different demos to test-drive changes to the library.
November 5, 2025 at 5:41 PM
Got the Todo App demo working with the new event-sourced architecture, too. Again no UX changes, but it's good to have a couple of different demos to test-drive changes to the library.
I'm removing the ability to (easily) run immediately-consistent workflows in my Ruby Event Sourcing stuff. It's a self-imposed moratorium on the more familiar paradigm, to force me to focus and polish the eventually-consistent mode. Make the hard thing easy first.
November 5, 2025 at 11:54 AM
I'm removing the ability to (easily) run immediately-consistent workflows in my Ruby Event Sourcing stuff. It's a self-imposed moratorium on the more familiar paradigm, to force me to focus and polish the eventually-consistent mode. Make the hard thing easy first.
Today's rant: ismaelcelis.com/posts/2025-1...
Unfinished business
Web framework emphasis on sync web controllers vs async background jobs leads to incohesive workflows.
ismaelcelis.com
November 5, 2025 at 12:16 AM
Today's rant: ismaelcelis.com/posts/2025-1...
I need to use "cyclomatic complexity" in conversation more.
November 4, 2025 at 5:47 PM
I need to use "cyclomatic complexity" in conversation more.
Ok. Got the old Coffeeshop demo app working with the new architecture. Everything is eventually consistent, and all aspects of the UI are reactive (yet server-rendered).
November 4, 2025 at 4:55 PM
Ok. Got the old Coffeeshop demo app working with the new architecture. Everything is eventually consistent, and all aspects of the UI are reactive (yet server-rendered).
Small addition to Plumb: merging and intersecting interface definitions github.com/ismasan/plum...
Interface merge by ismasan · Pull Request #27 · ismasan/plumb
Merging interfaces
Use the + operator to merge two interfaces into a new one that must support both sets of method names.
Iterable = Types::Interface[:each, :map]
Countable = Types::Interface[:size...
github.com
November 4, 2025 at 12:35 PM
Small addition to Plumb: merging and intersecting interface definitions github.com/ismasan/plum...
Very close to finishing The Big Refactor ™️ of my Ruby Event Sourcing library (just in time for next week's talks!). Previous interfaces remain mostly the same, but most of the heavy-lifting has been pushed down into the runtime.
November 3, 2025 at 10:47 PM
Very close to finishing The Big Refactor ™️ of my Ruby Event Sourcing library (just in time for next week's talks!). Previous interfaces remain mostly the same, but most of the heavy-lifting has been pushed down into the runtime.
LLMs are great because I can ask them the stupidest questions and no human (especially employers) will ever know just how dumb I am.
November 3, 2025 at 12:54 PM
LLMs are great because I can ask them the stupidest questions and no human (especially employers) will ever know just how dumb I am.
Rooting for Trappist 1e
November 3, 2025 at 12:08 PM
Rooting for Trappist 1e
Good read. A bit more strongly-worded than I'd done it, and perhaps some false dichotomies in there, but the central point (model behaviour and context, not just data) stands oluatte.com/posts/domain...
DDD & the Simplicity Gospel | Olu Atte
The false gospel of simplicity. Domain Driven Design (DDD) vs Slop.
oluatte.com
November 3, 2025 at 11:43 AM
Good read. A bit more strongly-worded than I'd done it, and perhaps some false dichotomies in there, but the central point (model behaviour and context, not just data) stands oluatte.com/posts/domain...
7yo, sighing: "sometimes I really don't understand Humanity"
November 2, 2025 at 5:56 PM
7yo, sighing: "sometimes I really don't understand Humanity"
This thread is social media gold
What’s the stupidest thing you’ve ever done? I don’t mean “cheating on your partner” stupid, I mean stupid stupid. Like, once, I had this bubble bath which smelled absolutely delicious, so I took a big glug of it. That kind of stupid. (It did not taste delicious.)
November 1, 2025 at 11:07 AM
This thread is social media gold