
Hands-on Lab120min
How to design your messages: Patterns and tradeoffs in Event Driven Architectures
This session explores the long-term impacts of message structure, schema evolution, and event design choices in distributed systems. Using real-world examples, it highlights trade-offs between domain purity and operational needs, and offers a framework to help teams make informed, context-driven decisions rather than prescribing one-size-fits-all solutions.

Kostas StroggylosKaizen Gaming
talkDetail.whenAndWhere
Saturday, November 8, 13:20-15:20
Room 6 - Olympias
talks.roomOccupancytalks.noOccupancyInfo
- "Our domain code is clean, but we can't trace message flows in production and debug issues."
- "Our event structure helps observability but the domain concepts are buried in boilerplate code that handles metadata."
- "Other teams keep subscribing to our internal messages or are constantly asking for changes to our public message schemas."
Sound familiar?
When designing distributed systems, we often make quick decisions on the structure of the messages we publish and consume, without evaluating critical trade-offs between domain purity and operational requirements that can impact us in the long run. The same can happen with schema versioning and evolution, broker topology, and separation of internal vs public events.
This session showcases the practical implications of such decisions through real-world examples and lessons learned the hard way.
We'll examine how different approaches affect not just the code but also the team's ability to reason about, evolve, and operate the system. Rather than prescribing a single "correct" answer, we'll provide a framework for making informed decisions in a given context.
- "Our event structure helps observability but the domain concepts are buried in boilerplate code that handles metadata."
- "Other teams keep subscribing to our internal messages or are constantly asking for changes to our public message schemas."
Sound familiar?
When designing distributed systems, we often make quick decisions on the structure of the messages we publish and consume, without evaluating critical trade-offs between domain purity and operational requirements that can impact us in the long run. The same can happen with schema versioning and evolution, broker topology, and separation of internal vs public events.
This session showcases the practical implications of such decisions through real-world examples and lessons learned the hard way.
We'll examine how different approaches affect not just the code but also the team's ability to reason about, evolve, and operate the system. Rather than prescribing a single "correct" answer, we'll provide a framework for making informed decisions in a given context.

Kostas Stroggylos
Kostas is a principal software engineer with a solid experience of more than 20 years.
He is currently fighting legacy and architecting novel software solutions at Kaizen Gaming. When not getting his hands dirty with code, riding his bike, sailing or hiking, he studies the sociotechnical aspects of complex systems and likes to challenge assumptions and existing practices. He is passionate about organizational agility and fast flow. He serves as a volunteer and committee member for Devoxx Greece, an organizer for Better Ways (ex Agile Summit) and co-organizes Domain Driven Design Greece meetup.
He is currently fighting legacy and architecting novel software solutions at Kaizen Gaming. When not getting his hands dirty with code, riding his bike, sailing or hiking, he studies the sociotechnical aspects of complex systems and likes to challenge assumptions and existing practices. He is passionate about organizational agility and fast flow. He serves as a volunteer and committee member for Devoxx Greece, an organizer for Better Ways (ex Agile Summit) and co-organizes Domain Driven Design Greece meetup.
talkDetail.shareFeedback
talkDetail.feedbackNotYetAvailable
talkDetail.feedbackAvailableAfterStart
talkDetail.signInRequired
talkDetail.signInToFeedbackDescription
occupancy.title
occupancy.votingNotYetAvailable
occupancy.votingAvailableBeforeStart
talkDetail.signInRequired
occupancy.signInToVoteDescription
comments.speakerNotEnabledComments