Due to complications with publishing on Medium, this blog has moved to: https://madabout.software

Due to complications with publishing on Medium, this blog has moved to: https://blog.eventide-project.org

Allowing a service to terminate is the most common course of action to take when an unexpected error is encountered. The key word here is unexpected.

Some errors are unexpected, and they should cause a service to terminate. But there are some errors that are expected, and they should be handled appropriately — typically by retrying whatever logic was in-progress when the error was raised.

If it’s expected that an error will occur in the course of handling some message, and if it’s expected that the error is recoverable, then care should be taken to implement the handler logic inside…

One word best sums up error handling in services: Don’t.

To make the don’t rescue errors rule even more precise: Don’t rescue errors whose occurrence isn’t explicitly expected as a matter of course.

The point of errors is that they signal a circumstance so extraordinary and exceptional that there’s no way to recover. The term exception is used interchangeably with error for this reason. In the case of such an exceptional state, with so many unknowns, the best thing to do is to stop doing anything. In other words: terminate the process.

Except in rare cases, there’s usually no safe…

The Eventide toolkit supports two backend database implementations of its message store: Postgres and Event Store.

Both Postgres and Event Store support the minimum requirements:

  • Write messages to a stream
  • Isolate concurrent writes from each other using version-based optimistic locking
  • Retrieve messages from a stream, optionally starting from a particular position
  • Retrieve messages from a category of streams, optionally starting from a particular position
  • Retrieve the last message from a stream
  • Support retrieval in batches
  • Provide gapless sequences for a message positions within a stream
  • Provide sequences — possibly with gaps — for a message positions within a category


Service architectures in Ruby, you say? Certainly services can only be built in languages like Java and Go, and require elaborate messaging transport and mass-scale storage solutions that only the biggest teams and companies can afford!

Of course, none of that is true. And it should be pointed out that the exact same things used to be said of web app development between 1997 and 2007, and especially of MVC and ORM — both of which were considered only suitable for advanced developers. …

The Eventide Project community is excited to announce the 1.0 release of Eventide: the best microservice, autonomous service, event/reactive, and event sourcing toolkit built in Ruby, and one of the best stacks available in any language!

Eventide has been in development for 3 years, and has been the production backbone of a number of evented microservices implementations in a handful of industries since early-2016. It was open-sourced in late-2015 after many months of production burn-in and shakedown in the world of consumer financial services applications.

While the code has been ready for real world application throughout its history, we’ve been…

Suggesting that the software methodology wars are comparable to the fight for basic human rights in the US in the 1960s is a stretch, and its not meant to depreciate the sacrifices of the civil rights activists of that time, and the improvements they brought to society.

Nonetheless, I increasingly reflect on the parallels between growing up in the shadow of the civil rights movement and growing up in the shadow of Agile software development that has become synonymous with Scrum.

I grew up in a world that that the civil rights movement created. I was born into it. From…

One of the great frustrations with acquiring subtle knowledge is that it can’t be materially transferred.

The one thing that definitively characterizes crude knowledge is its ability to be rendered into books, blog posts, video materials, and the ability for anyone who consumes those materials to gain a certain measure of ability or fluency with the subject.

Subtle knowledge can’t be assimilated through material means. It can’t be converted into concrete materials the way that more basic and crude subjects can. …

There’s a spectrum of crude knowledge through subtle knowledge. Things like tools, frameworks, and patterns are on the crude side of the spectrum. Design principles and design qualities are on the subtle side.

Knowledge of design qualities and design principles is much harder to acquire than the more crude subjects, but that subtle knowledge is a multiplier of all the other software knowledge you have.

All of the design principles you know or have heard of are expressions of a handful of qualities. …

Scott Bellware

Developer Advocate. Relentless Improvement.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store