ServiceComposer contract-less composition request handlers header image

ServiceComposer contract-less composition request handlers


Recently, I started thinking about evolving the ServiceComposer user-facing API. I was faced with many options, leading me to analysis paralysis. I decided to start with a principle first: The feel-at-home ServiceComposer principle. This principle led me to introduce a new syntax that mimics ASP.NET controllers for defining composition handlers. This syntax helps users reduce the learning and adoption curve. Let's take a look, shall we?

Continue reading...

All the new goodies in ServiceComposer


Thanks to users’ feedback, I enjoyed working on some new cool ServiceComposer features, namely endpoint filters, a greatly improved event handling API, and declarative model binding, which paves the way for a new cool feature in the works

Continue reading...

Happy 20 years, dear blog


I’ve been blogging for the last twenty years, with ups and downs. Nonetheless, it’s a milestone to celebrate.

Continue reading...

A small ServiceControl maintenance utility


From time to time, I enjoy writing code on the side, like an open-source project. This time, the opportunity came from a support case and the need to ease the customer's life in their daily maintenance tasks.

Continue reading...

Someone says event, and magically, coupling goes away


I feel events are used too many times as a hammer to dismantle coupling. Unfortunately, it's gold plating. It might look better, but it'll fire back in the long term and cost more.

Continue reading...

I gotta tell you: CQRS doesn't imply Event Sourcing


Too many times, Event Sourcing is presented as the natural companion to CQRS. That's not the case. CQRS doesn't dictate using Event Sourcing. Let's see why.

Continue reading...

Mattox: simple, pre-configured NServiceBus endpoints


NServiceBus endpoints support only code-based configuration, which is handy and not always friendly at the same time. But what if we could plug in the superb Microsoft configuration extensions to configure NServiceBus endpoints?

Continue reading...

Compensation is all around us


In a message-based system, we might feel a lack of control, especially when in need of compensating changes spread across the system. Fear not! Real life deals with compensation every day! And it's better than rolling back a transaction or deleting some data in the database.

Continue reading...

Define messages as POCO, interfaces, or records. Does it really matter?


.NET developers building message-based systems seem to give serialization and surrounding concerns more importance than needed. Let's try to dissect the topic

Continue reading...

The power of timeouts to compensate for failures and other tales


There are scenarios when a chatty services relationship seems the only option, with the results of coupling quickly becoming our best friend. Not all hope is lost, we can try to ask different questions to untangle the knot.

Continue reading...

Append-only models: The why, the when, and the how


There are scenarios where updating data is either forbidden by policies or undesirable because it hinders the ability to fulfill other requirements. That is when append-only models come to the rescue.

Continue reading...

Why all this fuss about eventual consistency? It's everywhere!


Our industry seems to worry A LOT about eventual consistency. The real world is eventually consistent by definition. Still, we continuously try to fit a square peg into a round hole. Why is that, and what can we do about it?

Continue reading...

Eight months with the Kindle Scribe


I've been using a Kindle Scribe since December 2022. Primarily for reading and, from time to time, for note taking. Would I buy it knowing what I know today? No.

Continue reading...

The guilt that comes with flexible working hours


I've been working remotely for Particular Software for the last ten years. To this day, I still feel guilty for taking time off during regular working hours, even though we don't have working hours at all. Why is that?

Continue reading...

What if my command was rejected?


Distributed systems are different and require a different mindset. That's particularly true when dealing with async processes and failures. We need new tools and a new toolbox. And in the end, we can avoid rejecting that command.

Continue reading...

Back to Basics: commands, events, and messages


When you're involved with something for a very long time, it's easy to fall into the trap of taking many concepts for granted. Let's go back to the basics and build a common foundation. Today's topics are commands, events, and messages.

Continue reading...

Back to Basics: service boundaries, autonomous components, and coupling


When you're involved with something for a very long time, it's easy to fall into the trap of taking many concepts for granted. Let's go back to the basics and build a common foundation. Today's topics are service boundaries, autonomous components, and coupling.

Continue reading...

How many (micro)services do I need?


Microservices, microservices everywhere. But how many of them do we need? It's easy to be trapped by the micro thing and end up with thousands of them. Let's try to provide some guidance.

Continue reading...

What's an Outbox and why do we need it? Hint: it's about data integrity


Distributed systems are ugly beasts sometimes. They hide subtle tricks that can lead to data loss and system corruption. The Outbox pattern helps address a couple of them.

Continue reading...