This post has originally been written as a part of Proto.Actor official documentation which you can find here.
It was a paid for technical writting gig so the article itself is written by me but the illustrations have been created by Proto.Actor creator Roger Johansson

In this example, we are going to go beyond Proto.Actor and leverage Proto.Remote package in order to enable bidirectional communication between different actors in a client to server fashion.

These actors might be living inside of separate actor systems partitioned by a network (potentially located on different machines) and as a result of this, we…

It is very hard to reason about life, death, nature of existence, and reality itself. Eternity/Infinity are hard concepts to grasp. Even all religions have the promise of eternity (once you die) and most of them claim that “God” himself is eternal. For an ordinary human, it is really hard to grasp those concepts. Or is it …

Most of the difficulties related to that lie in the fact that w most of the time we are looking at it from the wrong frame of reference. the wrong perspective.

We are looking at things in terms of is/isn’t, left/right, good/evil…

Design patterns are very useful things in general and they pop up a lot if you are applying DDD in an OOP context (If you’re there you are probably already applying Tactical DDD patterns).

One principle I want to emphasize here because I see so many violations of it, is the following: “Don’t use pattern names when implementing a pattern”.
It’s amazing how people keep missing the point.

Applying this principle is actually very helpful in double checking if you are applying the right pattern to the right thing. What do I mean?
If you are finding it hard not to…

Paradigm Shift — a term coined by Thomas Kuhn (The structure of scientific revolutions)

Normal science:

people work within boundaries with not much critical thinking going on

Anomalies arise:

Things that cannot be explained using current models

Crisis phase:

When anomalies become more and more frequent, there comes Doubt on the correctness of current models.

This leads to Revolutionary Science

There is a crisis in how we deal with data

So much investment but not many proven results (there are exceptions mostly with big players)

The industry as a whole generally fails — specifically in transformational measures (treating data as…

Everything is broken down:

Books -> Chapters

Worlds -> Countries

Software -> Services

5 virtues of modularity

  • Comprehensibility / Cognitive Load
  • Parallel evolution / Team Autonomy
  • Fine-grained, ROI-aligned investments
  • Granular Customisability — do things differently in different modules
  • Containment — Isolated failures

How do these apply in the real world:

  • I can tell you stuff about Switzerland independent of any other country

The illusion of Boundaries (overemphasized a lot) — the world does not work that way (or even software)

4 languages in Switzerland

West of Switzerland speaks French

-> Understanding language better is key to understand the boundaries better…

Projections Explained

Projections since 2009…

CQRS — split reading and writing (this brought opportunities)

Mostly a logical separation (not a physical one) — that’s not what the pattern is about (but you can do it)

Event Sourcing + DDD — apply it on a bounded context level

You need to know the requirements from the consumers BEFORE building projections

Event Store is a collection of streams (which are in turn collections/sequences of heterogenous events partitioned by name or key)

Aggregate instance has its own stream

Each event appears at a certain position/offset (sequence) in an event stream (a monotonically incremented…

There are well-established patterns for dealing with conflicting updates in traditional data stores (Relational, Key-value) but how do you deal with conflicts when you have event streams?

Event sourcing is not a top level architecture it is a tactical pattern, (unlike EDA)

Event stores act similar to Escrow.

The level of granularity for concurrency is the event sequence

This means I want to write this sequence of events IFF there have been no changes (version / sequence is still the same for this stream / aggregate)

But sometimes you don’t care (can use Expected version ANY if you have no…

Experience report really.

An editorial system for scientific publishing: Submit -> Review -> Revise -> Accept -> Publish, etc. workflows

A big part of this process is in detecting fraud

Needed a lot of different views for a lot of different types of users, eg. authors, journal editors, peer reviewers …

Needed a lot of metadata about these users (who are they)

Thus, Event Sourced arch was picked.

Needed the fact that the audit log WAS the actual history of the state of entities.

Used jvm, kotlin, http4k, PostgreSQL

Mistakes we made

Seduced by eventual consistency

They made an http…

Keynote — Udi Dahan

Event sourcing intro (the natural order of things — as he put it XD) — event sourcing from first principles probably

Event Sourcing all of the things (excited about it) — The best thing since sliced bread — Every technology goes through this phase

aka Gartner Hype Cycle

It is a lot harder than it looks initially…

Main novelty ES brings in:

ES is a collection of patterns based on the idea of persisting the full history of a domain as a seq of events, rather than persisting just the current state

Domain Model pattern


While staring out of the window of a plane traveling to Amsterdam for “DDD / Event Sourcing Europe”, I had a sudden rush of inspiration and decided to try and scribble a quick blog post.

Here goes nothing…

Designed by vectorpocket

When talking about software, we often hear the term “architecture” mentioned a lot. That inevitably reminds us of buildings and construction. While this may be true up to some extent, there are a lot of discrepancies between the approaches we take towards architecting a building (a house for example) and a typical web application software system. …

Anes Hasicic

Software Engineer

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