Great talk. Thank you. Here follows some thoughts: . First of all: state machines are great !!! . In favor of OOP: "[Domain?] Context is king". A model is not supposed to emulate the real world, just to model it -- and according to the "view/needs" of the system at hand. A mamal within a pet shop context is quite different from the same class of entities in a forest management system. As such, they are modeled (or designed) and "treated" differently. . Messaging: Ask -> Request-Response Tell -> Fire-Forget
> state machines are great Until you make 'em distributed. Actor systems design requires persisted distributed actor state log. In terms of Akka it's handled with EventSourcedBehaviour and CRDT. The state itself is eventually consistent, so it's responsibility of the developer to skip over intermediate states and define actual synchronization barriers over a specific domain model (e.g. tx isolation levels)... and it's a really tricky thing to do in case of Actor Modeling - only Aggregate Root map directly to specific Actor, due to explicit definition of synchronization boundaries. And ofc Bounded Contexts define redundancy...