All blogs / Software / engineering practice
Event-Driven by Oskar Dudycz
Practical articles, training, and consulting about Event Sourcing, event-driven architecture, CQRS, and software architecture.
Software / engineering practiceDistributed systems / cloudDatabases
- Posts
- 300 from 11 Jun 2023 to 19 Oct 2026
- Posting
- weekly (33 in the last year)
- Kind
- personal blog
- Feed
- https://event-driven.io/rss.xml
2026 27
- Thoughts on Dynamic Consistency Boundary
- Sharing is (not always) caring. PgBouncer pooling modes in practice
- Open Source, a relic, a charity or still the thing?
- We all wanted to be Netflix, who do we want to be next?
- Avoid Duke Nukem Forever Mode
- Start Small, Grow Big: how to pick the first feature for Event Sourcing
- Fractal Architecture, Cognitive Load, Vertical Slices and other terms that do(n't) fit your head
- Vertical slices, their ownership and external dependencies
- Fixing bugs in Event Sourcing is hard, for real?
- Throw, Result, or neither?
- On swimming, learning and my journey to being the last one
- Addition by subtraction in Software Design
- Announcing Strictland - new contract testing library for message compatibility
- You can fork a package, but can you own it?
- How soon is now in PostgreSQL?
- On mashing up modelling techniques for fun and profit
- Don't overestimate domain expertise
- Vibing, Harness and OODA loop
- Yoda Principle for better integrations
- Anti-patterns in event modelling - Passive-Aggressive Events
- The one where Oskar explains Example Mapping
- Interactive Rubber Ducking with GenAI
- The End of Coding? Wrong Question
- Parse, Don't Guess
- How I cheated on transactions. Or how to make tradeoffs based on my Cloudflare D1 support
- On rebuilding read models, Dead-Letter Queues and Why Letting Go is Sometimes the Answer
- Rebuilding Event-Driven Read Models in a safe and resilient way
2025 46
- Architecture Weekly is 5 years old! 🎉
- Multi-tenancy and dynamic messaging workload distribution
- Checkpointing the message processing
- Consumers, projectors, reactors and all that messaging jazz in Emmett
- Requeuing Roulette in Event-Driven Architecture and Messaging
- Handling Events Coming in an Unknown Order
- Dealing with Race Conditions in Event-Driven Architecture with Read Models
- On Messaging and Distributed Systems with Ian Cooper
- New Recording on Event modelling anti-patterns from DDDEU
- Sneaky Code Bites Back
- PostgreSQL partitioning, logical replication and other Q&A about PostgreSQL Superpowers
- Just use SQL they say... Or how accidental complexity piles on
- My thoughts on Vertical Slices, CQRS, Semantic Diffusion and other fancy words
- Compilers Aren't Just for Programming Languages
- Requiem for a 10x Engineer Dream
- Why Open Source Isn't Always Fair. Dual licenses explained
- Workflow Engine design proposal, tell me your thoughts
- The Order of Things: Why You Can't Have Both Speed and Ordering in Distributed Systems
- Dealing with Eventual Consistency, and Causal Consistency using Predictable Identifiers
- Predictable Identifiers: Enabling True Module Autonomy in Distributed Systems
- Start Alone, Then Together: Why Software Modelling Needs Solitary Brainstorming
- Secondary Indexes and the Specialized Storage Dilemma
- Do we still need the QA role?
- Killer metrics, or why you should know upfront when to remove the new feature
- Residuality Theory: A Rebellious Take on Building Systems That Actually Survive
- The Underestimated Power of Hot Spots and Notes in EventStorming
- Hints on getting to speak at conferences
- Why We Should Learn Multiple Programming Languages
- Business Won't Let Me and other lies we tell to ourselves
- PostgreSQL JSONB - Powerful Storage for Semi-Structured Data
- Monolith-First - are you sure?
- What we don't know that we don't know
- We are no superhumans
- TypeScript Migrates to Go: What's Really Behind That 10x Performance Claim?
- Whole Architecture Weekly content is free now!
- Practical Introduction to Event Sourcing with Emmett
- So you want to break down monolith? Read that first.
- How does Kafka know what was the last message it processed? Deep dive into Offset Tracking
- Documenting Event-Driven Architecture with EventCatalog and David Boyne
- Defining Your Paranoia Level: Navigating Change Without the Overkill
- React Query: A solution for Frontend State Management challenges? With Tomasz Ducin
- Understanding Kafka's Consumer Protocol: A Deep Dive into How Consumers Talk to Brokers
- Kafka Consumers: Under the Hood of Message Processing
- How Kafka Producer Works internally
- How to build MongoDB Event Store
- Thoughts on Platforms, Core Teams, DORA Report and all that jazz
2024 59
- Locks, Queues and business workflows processing
- Distributed Locking: A Practical Guide
- On getting the meaningful discussions, and why that's important
- The Write-Ahead Log: A Foundation for Reliability in Databases and Distributed systems
- Applying Observability: From Strategy to Practice with Hazel Weakly
- Deduplication in Distributed Systems: Myths, Realities, and Practical Solutions
- Ordering, Grouping and Consistency in Messaging systems
- Idempotent Command Handling
- Building your own Ledger Database
- Tech Debt doesn't exist, but trade-offs do
- Frontent Architecture, Backend Architecture or just Architecture? With Tomasz Ducin
- Bootstrapping CRUD with Pongo
- Don't Oversell Ideas: Trunk-Based Development Edition
- Running a regular SQL on Pongo documents
- Why to measure and make our system observable? How to reason on chaotic world
- Pongo behind the scenes
- Webinar #23 - Gojko Adzic on designing product development experiments with Lizard Optimization
- Webinar #22 - On Performance Testing with Jarosław Pałka
- Making your system observability predictable
- When Logs and metrics are not enough: Discovering Modern Observability
- Pongo gets strongly-typed client, migrations, and command line tooling
- Show me the money! Practically navigating the Cloud Costs Complexity
- Using S3 but not the way you expected. S3 as strongly consistent event store
- My Architecture Drivers
- Webinar #21 - Michael Drogalis: Building the product on your own terms
- Architecture Weekly #192 - Talk is cheap, show me the numbers! Benchmarking and beyond!
- Using event metadata in event-driven projections
- Is It Production Ready?
- Writing and testing event-driven projections with Emmett, Pongo and PostgreSQL
- Architecture Weekly #190 - Queuing, Backpressure, Single Writer and other useful patterns for managing concurrency
- Mastering Database Connection Pooling
- Event Sourcing on PostgreSQL in Node.js just became possible with Emmett
- Pongo - Mongo but on Postgres and with strong consistency benefits
- Filtering EventStoreDB subscriptions by event types
- How to automatically setup pgAdmin with a Docker database
- Setting up NGINX load balancer for .NET WebApi
- Combining the To-Do List and the Passage Of Time patterns for resilient business workflows
- Let's build the worst Event Sourcing system!
- Why you should batch message processing and how to do it with .NET AsyncEnumerable
- Docker Compose Profiles, one the most useful and underrated features
- How to write a left-fold streams collector in Java
- This is not your uncle's Java! Modelling with Java 22 records pattern matching in practice
- How to configure a custom Test Container on the EventStoreDB example
- Mocking the native Node.js Test Runner
- How to build an in-memory Message Bus in TypeScript
- Event modelling anti-patterns explained
- I'm no longer Marten maintainer
- Testing Event Sourcing, Emmett edition
- Join my Event Sourcing workshops at Techorama and DDD Europe and speed up your journey!
- How to tackle compatibility issues in ECMA Script modules (and in general)
- Keeping our overachieving freak on a leash
- Should you always keep streams short in Event Sourcing?
- Implementing Closing the Books pattern
- Announcing Emmett! Take your event-driven applications back to the future!
- Production-Grade Event Sourcing Workshop - Modelling, DevOps, Process
- How TypeScript can help in modelling business workflows
- Stream ids, event types prefixes and other event data you might not want to slice off
- Should you record multiple events from business logic?
- Not all issues are complex, some are complicated. Here's how to deal with them
2023 30
- What Dune can tell us about setting our goals
- Why I won't use .NET Aspire for now
- Hitchhiker's Guide To Moving From Relational Data To Events
- A few notes on migrating storage library
- Are you Marten or Wolverine user? Tell us more!
- How to deal with privacy and GDPR in Event-Driven systems
- We introduced support plans for Marten
- GDPR for busy developers
- Anti-patterns in event modelling - Clickbait event
- Women in IT
- In the defence of Object-Relational Mappers
- Internal and external events, or how to design event-driven API
- How to design software architecture pragmatically
- Is the Strategy Pattern an ultimate solution for low coupling?
- Oops I did it again, or how to update past data in Event Sourcing
- Architecture Weekly became the Substack Bestseller!
- My journey from Aggregates to Functional Composition
- Event transformations, a tool to keep our processes loosely coupled
- Prototyping, an underestimated design skill
- Behaviour-Driven Design is more than tests
- Could you help me by filling a short survey about an online course?
- A simple way to configure integration tests pipeline
- How to scale out Marten
- How to set global setting for XUnit tests
- How to create a Docker image for the Marten application
- Vertical Slices in practice
- Follow the money to get a better design
- Removability over Maintainability
- Recap of Event Sourcing Live 2023
- A few words on communication
Undated 138
- The Holy Grail syndrome
- Anti-patterns in event modelling - I'll just add one more field
- Is the audit log a proper architecture driver for Event Sourcing?
- A few notes on running open source project after Marten v6 release
- General strategy for migrating relational data to document-based
- How to test event-driven projections
- Publishing read model changes from Marten
- Postgres Superpowers in Practice
- Event stores are key-value databases, and why that matters
- ChatGPT, revolution or not?
- Ensuring uniqueness in Marten event store
- Projecting Marten events to Elasticsearch
- How to handle multiple commands in the same transaction
- Fun with serial JSON
- Don't let Event-Driven Architecture buzzwords fool you
- Set up OpenTelemetry with Event Sourcing and Marten
- Event-driven projections in Marten explained
- Explicit validation in C# just got simpler!
- Stacking the bricks in the software development process
- Guide to Projections and Read Models in Event-Driven Architecture
- How to validate business logic
- Let's build event store in one hour!
- Don't be like Ebenezer Scrooge. A few words about workaholism
- Explicit events serialisation in Event Sourcing
- The magic is that there is no magic. Or how to understand design patterns.
- Share your story on Event Sourcing Live 2023
- Testing asynchronous processes with a little help from .NET Channels
- Mapping event type by convention
- How to get all messages through Postgres logical replication
- How events can help in making the state-based approach efficient
- Never Lose Data Again - Event Sourcing to the Rescue!
- How Postgres sequences issues can impact your messaging guarantees
- Writing and testing business logic in F#
- Push-based Outbox Pattern with Postgres Logical Replication
- Testing business logic in Event Sourcing, and beyond!
- Dive a bit deeper, look a bit wider
- On the importance of setting boundaries in team management
- It doesn't have to be toxic at work
- Event Versioning with Marten
- Slim your aggregates with Event Sourcing!
- How playing on guitar can help you to be a better developer?
- What do the British writer and his fence have to do with Software Architecture?
- Why are we afraid of our decisions?
- Straightforward Event Sourcing with TypeScript and NodeJS
- Union types in C#
- How to effectively compose your business logic
- Event-driven distributed processes by example
- Is keeping dates in UTC really the best solution?
- Should you generate the client code from the API?
- Unobvious things you need to know about key-value stores
- Ogooreck, a sneaky testing library in BDD style
- Should you throw an exception when rebuilding the state from events?
- Why I'm leaving Event Store and getting ready for the next episode
- Power of ignorance, or how to write simple code
- What onion has to do with Clean Code?
- A few tricks on how to set up related Docker images with docker-compose
- Persistent vs catch-up, EventStoreDB subscriptions in action
- How to build a simple event pipeline
- Are Temporal Tables an alternative to Event Sourcing?
- Agile vs Introverts
- The risk of ignoring risks
- Twelve things I learned about Java during my last code review
- Small rant about the Software Design
- Introduction to Event Sourcing - Self Paced Kit
- How to ensure uniqueness in Event Sourcing
- “I'm not interested in politics” is not actual anymore
- 15 tips on how to run meetings effectively
- Immutable Value Objects are simpler and more useful than you think!
- How to quickly scale a legacy monolith?
- I tested it on production and I'm not ashamed of it
- A simple trick for idempotency handling in the Elastic Search read model
- Using strongly-typed identifiers with Marten
- Should a programmer's creativity be shown in code formatting?
- No, it can never happen!
- Integrating Marten with other systems
- How to do snapshots in Marten?
- CQRS is simpler than you think with .NET 6 and C# 10
- Keep your streams short! Temporal modeling for fast reads and optimal data retention
- Simple patterns for events schema versioning
- Event Streaming is not Event Sourcing!
- How to register all CQRS handlers by convention
- Long-polling, how to make our async API synchronous
- Dealing with Eventual Consistency and Idempotency in MongoDB projections
- How to use ETag header for optimistic concurrency
- Tell, don't ask! Or, how to keep an eye on boiling milk
- What does Mr Bean opening the car have to do with programming?
- What does a construction failure have to do with our authorities?
- Let's talk about positions in event stores
- How to build event-driven projections with Entity Framework
- 10 notes on the 10th blogging anniversary
- Anti-patterns in event modelling - State Obsession
- How to slice the codebase effectively?
- Will it scale... down?
- Computer says no! Why we might have an issue with Artificial Intelligence soon
- Anti-patterns in event modelling - Property Sourcing
- How to build and push Docker image with GitHub actions?
- How to build an optimal Docker image for your application?
- Notes about C# records and Nullable Reference Types
- In what language are programmers writing?
- Snapshotting Strategies
- Form a wall! And other concerns about security
- Let's take care of ourselves! Thoughts on compatibility
- How to get the current entity state from events?
- When not to use Event Sourcing?
- Generic does not mean Simple
- Structural Typing in TypeScript
- When Agile is not enough
- How to scale projections in the event-driven systems?
- Snapshots in Event Sourcing
- Why are senior devs afraid to code?
- How to create a custom GitHub Action?
- Memoization, a useful pattern for quick optimization
- How using events helps in a teams' autonomy
- How to enhance and configure your site search with Algolia?
- Events should be as small as possible, right?
- How to create projections of events for nested object structures?
- How to get started with Open Source?
- How to successfully do documentation without a maintenance burden?
- How money in Cloud impacts Architectural decisions?
- Can command return a value?
- CQRS facts and myths explained
- Why Partial is an extremely useful TypeScript feature?
- How to set up a test matrix in XUnit?
- What's the difference between a command and an event?
- Saga and Process Manager - distributed processes in practice
- What if I told you that Relational Databases are in fact Event Stores?
- What texting your Ex has to do with Event-Driven Design?
- Sociological aspects of Microservices
- How (not) to cut microservices
- Bring me problems, not solutions!
- Outbox, Inbox patterns and delivery guarantees explained
- How to (not) do the events versioning?
- Optimistic concurrency for pessimistic times
- Why a bank account is not the best example of Event Sourcing?
- Revolution now!
- Architect Manifesto
- Borys had the best dribbling
- Talks