Things I've said on Bluesky in August 2025.| ismaelcelis.com
In Object Oriented programming, identity and behaviour are often conflated. But it can be usefuk to think of them as different concepts.| ismaelcelis.com
I’ve been playing with and exploring Event Sourcing for a while now, but only recently realised that part of my thinking might have been muddled by unexamined assumptions about what commands are and what they do in the context of Event Sourcing.| Posts on Ismael Celis
In this series: Part 1: Practical Railway-Oriented Pipelines in Ruby Part 2: User input, errors and metadata Part 3: Extending pipelines Part 4: Middleware Part 5: Testing pipelines Testing pipelines. Testing any complex workflow can be challenging. Composable pipelines can make it easier to use a “divide and conquer” approach to testing. 1. Unit test each step in isolation. Steps may or may not be complex, but their simple #call(Result) Result interface makes them easy to test.| Posts on Ismael Celis
In this series: Part 1: Practical Railway-Oriented Pipelines in Ruby Part 2: User input, errors and metadata Part 3: Extending pipelines Part 4: Middleware Part 5: Testing pipelines In the previous article in this series I showed how to extend the basic pipeline with domain-specific steps and helpers. Here I’ll show how to add middleware to the pipeline, to add tracing, logging, caching, and other cross-cutting concerns. Middleware Middleware is a bit of code that wraps around each step in ...| Posts on Ismael Celis
In this series: Part 1: Practical Railway-Oriented Pipelines in Ruby Part 2: User input, errors and metadata Part 3: Extending pipelines Part 4: Middleware Part 5: Testing pipelines In the previous article in this series I showed how to pass extra metadata from one step to the next, including user input, errors and context data. This article expands on the previous ones by showing how to extend the pipeline with domain-specific steps and helpers.| Posts on Ismael Celis
Handling user input, errors and metadata in a Railway-oriented pipeline in Ruby.| ismaelcelis.com
Modeling your domain as timelines instead of object graphs| ismaelcelis.com
The Event Store interface is the canonical data store in event sourcing, and it’s in charge of persisting and retrieving events produced by your system.| ismaelcelis.com
An exploration of patterns for building composable data pipelines in Ruby, from the basics to the possibly YAGNI.| ismaelcelis.com
Notes from my Dead Code Podcast episode on Event Sourcing and Ruby.| ismaelcelis.com
The Decide, Evolve, React pattern in Ruby, explained step by step| ismaelcelis.com
The Command Layer is the place where business logic happens, user input is handled and decisions are made. In this article I explore the role of the Command Layer in event-sourced systems| ismaelcelis.com
In this series I’ll go over the basic concepts in Event Sourcing. The code examples are in Ruby, but the general principles should apply in any language.| ismaelcelis.com
A simplified approach to building composable data pipelines in Ruby, with examples and use cases.| ismaelcelis.com