Skill Issue logo

Skill Issue

Archives
Subscribe
July 17, 2026

So I tried event-sourcing...

My prototype event-sourced social media crossposting app is in production. It still isn’t feature-complete, but it supports user registration, sign in, connecting Bluesky/Mastodon accounts, creating topics, queuing posts into those topics, and my secret sauce, the posting algorithm.

I’ve got a bit of work to get it actually usable over my existing app. It doesn’t support threads or media, which are the biggest blockers.

Architecturally, it’s quite cool, but I can see why this has never really given more conventional designs any challenge as the default architecture. The concepts at play are less intuitive. Things that feel like they should be easy (and are easy in conventional designs) are tricky. Designing every change/feature requires more consideration.

None of that is a deal-breaker for me, though. I’m still curious about how this might be applied to eCommerce. It’s often used as an example domain for showing off event-sourcing (and it’s a very fitting one), but I know (better than most) how big the gulf between a toy eCommerce store and a production-ready digital commerce platform is.

I’m going to keep going with the prototype to get a little more experience changing a system like this. Supporting threads (sequences of posts, not Meta's other, other, other social network) will require reshaping some of my events and gracefully handling the old data. My architectural plan accounted for that eventuality, but I still want to see it in action.

After that, I think I’ll work to extract the web stack and event-sourcing machinery from the project, so I can reuse it. That’ll require formalizing some concepts and creating some DSLs or APIs. Currently many of the concepts live only as bespoke instances with no shared parent class. To create a framework I’ll need to pull them into abstract classes, or something similar.

Separate from the actual work of building the system, I wanted to make sure that my process managers and integrators and such were designed in a way that was actually correct and not buggy. It was a perfect excuse to mess around with TLA+. It’s a technology that I’ve always wanted to learn properly.

I’m still an absolute beginner with it, but with a little help from the machine god, I was able to model a few of the core functions of the application and use it to detect two separate bugs in different areas of the system. Very cool, but it was a fair bit of work.

It seems to me that formal verification and event-sourcing are something of a natural fit. Event-sourcing requires that you design your process managers and integrators carefully, so that they can run correctly in dynamically scaled environments. Tools like TLA+ allow you to model those systems and ensure that (given a certain system configuration) the guarantees you need will be met. Definitely something I’ll be exploring further.


No metal recommendation this week. I noticed prolific Japanese ambient music artist Chihei Hatakeyama released a new record that I hadn’t listened to yet. This particular release has a wonderfully neutral and relaxing tone to it. Great for focus work.

White Paddy MountainUnconsciousness Silence, by Chihei Hatakeyama
Don't miss what's next. Subscribe to Skill Issue:
Older → Forthlike
Share this email:
Share on LinkedIn Share on Mastodon Share on Bluesky
chat
globe
Bluesky
GitHub
Twitter
LinkedIn
Powered by Buttondown, the easiest way to start and grow your newsletter.