# Event-Driven.io by Oskar Dudycz > Practical, first-hand material about Event Sourcing, CQRS, event-driven architecture, and software architecture, plus consulting and hands-on training by Oskar Dudycz. Oskar Dudycz is an independent software architect, consultant, trainer, conference speaker, and open-source maintainer. Content is available in English and Polish. Prefer the URL whose language matches the reader. ## Start and contact - [Event-Driven.io — English](https://event-driven.io/en/): Articles about Event Sourcing, CQRS, event-driven architecture, and pragmatic software design. - [Event-Driven.io — Polski](https://event-driven.io/pl/): Artykuły o Event Sourcingu, CQRS, architekturze zdarzeniowej i pragmatycznym projektowaniu oprogramowania. - [Contact Oskar Dudycz — English](https://event-driven.io/en/contact/): Contact Oskar about software architecture consulting, training, workshops, and speaking. - [Kontakt z Oskarem Dudyczem — Polski](https://event-driven.io/pl/contact/): Kontakt w sprawie konsultacji architektonicznych, szkoleń, warsztatów i wystąpień. ## Consulting, training, and workshops - [Software Architecture Consulting](https://event-driven.io/en/consulting/): Practical consulting for teams designing, reviewing, or improving Event Sourcing, CQRS, and event-driven systems with Oskar Dudycz. - [Konsulting architektury oprogramowania](https://event-driven.io/pl/consulting/): Praktyczny konsulting dla zespołów projektujących, oceniających i rozwijających systemy wykorzystujące Event Sourcing, CQRS i architekturę opartą na zdarzeniach. - [Training](https://event-driven.io/en/training/): Hands-on Event Sourcing and event-driven architecture training for development teams, available online or on site and tailored to your project. - [Szkolenie](https://event-driven.io/pl/training/): Praktyczne szkolenia z Event Sourcingu i architektury zdarzeniowej dla zespołów, dostępne online lub na miejscu i dopasowane do projektu. - [Event-Driven Architecture: The Light and the Dark Side](https://event-driven.io/en/light-and-dark-side-of-eda-workshop/): A four-day online cohort workshop on getting from business requirements, through a process model, to a working event-driven system with the right delivery, ordering and consistency guarantees. - [Architektury oparte na zdarzeniach: ciemne i jasne strony](https://event-driven.io/pl/light-and-dark-side-of-eda-workshop/): Czterodniowy warsztat online w formule kohortowej o tym, jak przejść od wymagań biznesowych przez model procesu do działającego systemu opartego na zdarzeniach, z właściwymi gwarancjami dostarczenia, kolejności i… - [Understand Event Sourcing in practice - public workshop](https://event-driven.io/en/szkolenie-event-sourcing/): Event Sourcing is an appealing pattern. It lets us track every business fact without losing business information. This gives us visibility into our business processes.… - [Zrozum Event Sourcing w praktyce - otwarte szkolenie](https://event-driven.io/pl/szkolenie-event-sourcing/): Event Sourcing jest bardzo kuszącym wzorcem. Pozwala śledzić wszystkie fakty biznesowe. Nie tracimy żadnej informacji biznesowej. Dzięki temu zyskujemy obserwowalność naszego przepływu biznesowego.… - [Consistency Boundaries and Concurrency: From Model to Code](https://event-driven.io/en/szkolenie-granice-spojnosci-i-modelowanie_eda/): A two-day online workshop on drawing consistency boundaries, handling concurrency and event streams, and verifying your model before AI writes the code. - [Granice spójności i współbieżność: od modelu do kodu](https://event-driven.io/pl/szkolenie-granice-spojnosci-i-modelowanie_eda/): Dwudniowy warsztat online o tym, jak wyznaczać granice spójności, panować nad współbieżnością i strumieniami zdarzeń oraz sprawdzać model, zanim AI napisze kod. ## Other key pages - [Hi! My name is Oskar Dudycz](https://event-driven.io/en/about/): Oskar Dudycz is an independent software architect, consultant, trainer, speaker, and open-source maintainer specialising in Event Sourcing and event-driven systems. - [Cześć! Nazywam się Oskar Dudycz](https://event-driven.io/pl/about/): Oskar Dudycz jest niezależnym architektem oprogramowania, konsultantem, trenerem i twórcą open source specjalizującym się w Event Sourcingu i systemach zdarzeniowych. ## English articles - [Sharing is (not always) caring. PgBouncer pooling modes in practice](https://event-driven.io/en/connection-pooler-modes-advisory-locks/): The sad thing about programming is that eventually we reach production; the closer we get, the nastier things get. Some people start asking, Will it scale?, and some even run performance and load tests.… - [Open Source, a relic, a charity or still the thing?](https://event-driven.io/en/open-source-a-relict-a-charity-or/): A friend asked me recently whether there is any sense in doing Open Source now. My answer was the same as always. I see three options. 1\. You get money out of it. 2\. You're dogfooding it in your work projects. 3\.… - [We all wanted to be Netflix, who do we want to be next?](https://event-driven.io/en/we-all-wanted-to-be-netflix-who-do/): I recently realised that there’s an aspect of GenAI tooling that’s not spoken about much, and I think that’s important to where we are going as an industry.… - [Avoid Duke Nukem Forever Mode](https://event-driven.io/en/avoid-duke-nukem-forever-mode/): How old are you? I’m Duke Nukem 3D old. Not in the sense that I was born in 1996, but that it came out when I was the right age. Being 11 years old was the right age to laugh hard at Duke’s jokes.… - [Start Small, Grow Big: how to pick the first feature for Event Sourcing](https://event-driven.io/en/start-small-grow-big-how-to-pick/): Let’s say we did the hard part. We read up on Event Sourcing, even here on my blog; we did a modelling workshop, we got the nods around the table, and someone finally said: “Fine, let’s try it somewhere”.… - [Fractal Architecture, Cognitive Load, Vertical Slices and other terms that do(n't) fit your head](https://event-driven.io/en/fractal-architecture-cognitive-load/): I wrote on LinkedIn that it seems that there are never enough articles on Vertical Slices. Each time I write a follow-up, there’s another follow-up needed. And guess what?… - [Vertical slices, their ownership and external dependencies](https://event-driven.io/en/vertical-slices-and-dependencies/): A few questions about Vertical Slices come up again and again, and they're good ones. If a slice cuts through all the layers, do we get a table per slice?… - [Fixing bugs in Event Sourcing is hard, for real?](https://event-driven.io/en/fixing-bugs-in-event-sourcing-is-hard/): Every system ends up with bad data. Some of it comes from integrations, some from users doing things nobody predicted, and a good part of it comes from us, because we shipped a change that looked fine in review.… - [Throw, Result, or neither?](https://event-driven.io/en/throw-result-or-neither/): There is one question I keep getting about my event-sourced code: why don’t I use Result? It usually comes after someone sees a decision throwing an exception.… - [On swimming, learning and my journey to being the last one](https://event-driven.io/en/on-swimming-learning-and-my-journey/): Work impacts how we live, and our lives impact how we do our work. My name is Oskar Dudycz, not Paulo Coelho, and today I’m not going to talk about software architecture or the event-driven world, but about the world in… - [Addition by subtraction in Software Design](https://event-driven.io/en/addition-by-subtraction-in-software-design/): I want it all, and I want it now. This is not only a Freddie Mercury quote but also, too often, a general plan for our software product.… - [Announcing Strictland - new contract testing library for message compatibility](https://event-driven.io/en/announcing-strictland-contract-testing/): I just released something. It's called Strictland. And it's a contract testing library. Why did I do it? Before I go further, if you can’t wait, you can check it on: GitHub - https://github.com/event-driven-io/strictland… - [You can fork a package, but can you own it?](https://event-driven.io/en/you-can-fork-a-package-but-can-you-own-it/): Fork your dependencies, trim them to only your use case, never update unless it breaks for your users. I’ve been vocal about this for 10+ years.… - [How soon is now in PostgreSQL?](https://event-driven.io/en/how-soon-is-now-in-postgresql/): How soon is now? In PostgreSQL, it's not always as soon as you'd think. I learned that the hard way recently, so you don't have to. It took me hours and wasn't easy to reproduce, even though the fix is one line.… - [On mashing up modelling techniques for fun and profit](https://event-driven.io/en/on-mashing-up-modelling-techniques/): Many people believe there should be one, and only one, way to model software. I think differently, I like to mix different techniques.… - [Don't overestimate domain expertise](https://event-driven.io/en/should_we_trust_domain_experts/): I was toying with LLM-based domain research. It reminded me of the common mistake we make when we try to practice DDD: overreliance on what domain experts are telling us.… - [Vibing, Harness and OODA loop](https://event-driven.io/en/vibing_harness_and_ooda_loops/): Hey, have a look at what I made during the weekend. I had some time, grabbed a beer, turned on the computer and tried to code this feature.… - [Yoda Principle for better integrations](https://event-driven.io/en/yoda_principle_in_command_design/): Try not. Do. Or do not. There is no try! I'm calling this the Yoda Principle. Master Yoda said that to Luke Skywalker a long time ago in a galaxy far, far away.… - [Anti-patterns in event modelling - Passive-Aggressive Events](https://event-driven.io/en/passive_aggressive_events/): Have you ever heard phrases like. Just an update, the milk ran out. Someone finished it and put the empty carton back. Or So everyone is aware, the meeting started 15 minutes ago.… - [The one where Oskar explains Example Mapping](https://event-driven.io/en/intro_to_example_mapping/): One of the first indications of getting old(er) is when people stop getting your movie or music references. Of course, based on this rule, some people are always old. That happens.… - [Interactive Rubber Ducking with GenAI](https://event-driven.io/en/interactive_rubber_ducking_with_gen_ai/): You may already know that I'm a GenAI sceptic. And a general sceptic. Do you know that scepticism comes from the Greek σκέπτομαι (skeptomai), meaning 'to search, to think about, or look for'?… - [The End of Coding? Wrong Question](https://event-driven.io/en/the_end_of_coding_wrong_question/): Be careful what you wish for, because your wish may come true. What LLMs revealed is how many people in our industry don't like to code.… - [Parse, Don't Guess](https://event-driven.io/en/parse_dont_guess/): Last time, I shared with you how sneaky I was on transaction handling.. Today, the opposite: I'll tell you how I fixed the issue when I tried to be too sneaky. I already told you that Sneaky Code Bites Back. The moral?… - [How I cheated on transactions. Or how to make tradeoffs based on my Cloudflare D1 support](https://event-driven.io/en/cloudflare_d1_transactions_and_tradeoffs/): We're being told that software design is the art of making tradeoffs. But... Are we taught how to make them? Not that it's easy to teach tradeoffs, it's a subtle art of explanation.… - [On rebuilding read models, Dead-Letter Queues and Why Letting Go is Sometimes the Answer](https://event-driven.io/en/rebuilding_read_models_skipping_events/): In the last article, I explained how to rebuild Event-Driven Read Models in a safe and resilient way. I asked readers to let me know if they find any blind spots in my design. Well, I found one myself.… - [Rebuilding Event-Driven Read Models in a safe and resilient way](https://event-driven.io/en/rebuilding_event_driven_read_models/): Let's make a soup today: a blog soup. We'll mix multiple ingredients like: events (obviously), read models, inline and async projections, rebuilding read models, backfilling new ones with data from existing events,… - [Architecture Weekly is 5 years old! 🎉](https://event-driven.io/en/architecture-weekly-is-5-years-old/): Welcome to the new week! Who said that LinkedIn notifications are useless? I did, several times. Yet! Today, I opened my computer for the first time since last Tuesday and just saw a notification that Architecture Weekly… - [Multi-tenancy and dynamic messaging workload distribution](https://event-driven.io/en/multitenant_and_dynamic_message_handling/): There are several reasons why I'm blogging. The first one is that I forget, and writing helps me to remember and organise my findings.… - [Checkpointing the message processing](https://event-driven.io/en/checkpointing_message_processing/): Let's start by asking you two questions. 1. What Super Frog has to do with messaging? 2. When was the last time you wrote if statements in SQL? If it's been a long time, have you at least seen them?… - [Consumers, projectors, reactors and all that messaging jazz in Emmett](https://event-driven.io/en/consumers_processors_in_emmett/): Did you know that you can build an event store in one hour? I even did it a few times on the conference stage. Actually, it took me usually around 25 minutes; the rest was mistyping, lame jokes and a bit of explanation.… - [Requeuing Roulette in Event-Driven Architecture and Messaging](https://event-driven.io/en/requeuing_roulette_in_messaging/): I'm always saying that there's a thin line between good and bad practice, and this thin line is named "Context". That's also true for the (anti-)pattern I'm calling "Requeuing Roulette".… - [Handling Events Coming in an Unknown Order](https://event-driven.io/en/strict_ordering_in_event_handling/): Learn how to detect missing or out-of-order events and where strict ordering can realistically be guaranteed in event-driven systems. - [Dealing with Race Conditions in Event-Driven Architecture with Read Models](https://event-driven.io/en/dealing_with_race_conditions_in_eda_using_read_models/): My events came out of order! What should I do?! Are you familiar with the term "phantom record" and its benefits? No? Let me explain it to you today. Everyone has a plan until they get punched in the mouth.… - [On Messaging and Distributed Systems with Ian Cooper](https://event-driven.io/en/on-messaging-and-distributed-systems/): Welcome to the new week! New week, new video. Last week, you got my talk about event-driven modelling anti-patterns. A significant portion of it was to explain the difference between logical design and technical one.… - [New Recording on Event modelling anti-patterns from DDDEU](https://event-driven.io/en/new-recording-on-event-modelling/): Welcome to the new week! I’m always saying that with Event-Driven Architecture, the modelling effort pays back. That goes both ways: the less effort we put in modelling, the more it’ll hurt later.… - [Sneaky Code Bites Back](https://event-driven.io/en/sneaky-code-bites-back/): Welcome to the new week! Sneaky code bites back, I realised that again recently. I realised I'd been writing terrible code when I couldn't explain it to myself. The code worked. It was adding SQLite support to Pongo.… - [PostgreSQL partitioning, logical replication and other Q&A about PostgreSQL Superpowers](https://event-driven.io/en/postgresql-partitioning-logical-replication/): Welcome to the new week! Last Tuesday, I did a new version of the “PostgreSQL Superpowers” webinar, thanks to the invitation from the good folks at Particular.… - [Just use SQL they say... Or how accidental complexity piles on](https://event-driven.io/en/just-use-sql-they-say-or-on-how-accidental/): Welcome to the new week! “Just use SQL”, they say. “No need for ORMs”, they add. And they may be right, but… Let’s say that you want to query users.… - [My thoughts on Vertical Slices, CQRS, Semantic Diffusion and other fancy words](https://event-driven.io/en/my-thoughts-on-vertical-slices-cqrs/): Welcome to the new week! Vertical Slices in software architecture are pictured right now as the best thing since sliced bread. I won’t try to hide that, like it.… - [Compilers Aren't Just for Programming Languages](https://event-driven.io/en/compilation-isnt-just-for-programming/): Welcome to the new week! What does this streaming pipeline have to do with a programming language compiler? At first glance? Nothing! This looks like a typical functional pipeline that processes food delivery orders.… - [Requiem for a 10x Engineer Dream](https://event-driven.io/en/requiem-for-a-10x-engineer-dream/): Welcome to the new week! People claim they get 10x productivity boosts with AI coding tools. After my recent experiments with Claude Code, I'm starting to think we're not using these tools the same way.… - [Why Open Source Isn't Always Fair. Dual licenses explained](https://event-driven.io/en/why-open-source-isnt-always-fair/): Welcome to the new week! Rug pull! Open Source drama! Yet another License change! We’re being hit recently by headers on social media. And guess what, I’m also making a similar change in my OSS projects.… - [Workflow Engine design proposal, tell me your thoughts](https://event-driven.io/en/workflow-engine-design-proposal-tell/): Welcome to the new week! As you may know, I’m building Emmett \- a library/framework aiming to make building business-focused apps smoother with an event-driven approach.… - [The Order of Things: Why You Can't Have Both Speed and Ordering in Distributed Systems](https://event-driven.io/en/the-order-of-things-why-you-cant/): Picture this scenario: An online retailer runs a flash sale with 500 units of a hot product. Within minutes, they've processed 742 orders. Their inventory shows -242 units.… - [Dealing with Eventual Consistency, and Causal Consistency using Predictable Identifiers](https://event-driven.io/en/dealing-with-eventual-consistency/): Users want to attach files and keep working. Systems need time to upload, store those files and link it to the specific process or entity.… - [Predictable Identifiers: Enabling True Module Autonomy in Distributed Systems](https://event-driven.io/en/predictable-identifiers-enabling/): In distributed systems, we face a fundamental tension between module communication and module autonomy. Our modules need to exchange information and coordinate actions, yet we want each module to evolve independently… - [Start Alone, Then Together: Why Software Modelling Needs Solitary Brainstorming](https://event-driven.io/en/start-alone-then-together-why-software/): Watch a jazz quartet improvise, and you might think they're making it up as they go. They're not. Every riff builds on practised scales and learned patterns. The constraints don't stifle creativity—they make it work.… - [Secondary Indexes and the Specialized Storage Dilemma](https://event-driven.io/en/secondary-indexes-and-the-specialized/): In 2016, the Kafka team faced a problem that illustrates a fundamental challenge in distributed systems design. Users kept asking: "How do I query the current state of my data without replaying the entire log?" If you're… - [Do we still need the QA role?](https://event-driven.io/en/do-we-still-need-the-qa-role/): Welcome to the new week! I've been seeing the same discussion popping up across tech forums and social media lately: is QA dead? "The testing market is ending.” Some argue.… - [Killer metrics, or why you should know upfront when to remove the new feature](https://event-driven.io/en/killer-metrics-or-why-you-should/): Welcome to the new week! Let’s get back to the story I told in Why to measure and make our system observable? How to reason on chaotic world. I was working on another migration from on-premises to the cloud.… - [Residuality Theory: A Rebellious Take on Building Systems That Actually Survive](https://event-driven.io/en/residuality-theory-a-rebellious-take/): I was sitting in a dark room at NDC Oslo when Barry O'Reilly started talking about lightbulbs. One hundred thousand of them, to be exact, all interconnected, each one either on or off.… - [The Underestimated Power of Hot Spots and Notes in EventStorming](https://event-driven.io/en/the-underestimated-power-of-hot-spots/): I've been facilitating the EventStorming sessions for years now, and something keeps catching my attention. While teams naturally focus on mapping out those orange event sticky notes (the backbone of any EventStorming… - [Hints on getting to speak at conferences](https://event-driven.io/en/hints-on-getting-to-speak-at-conferences/): Occasionally, I'm asked how to get to conferences (especially the bigger ones). My secret recipe is to: just try. Many people are so afraid of being rejected that they're paralysed. Impostor syndrome is kicking in.… - [Why We Should Learn Multiple Programming Languages](https://event-driven.io/en/why-we-should-learn-multiple-programming/): In a recent Discord chat, I heard the phrase that: A good senior developer should be able to program in any language. As someone who's spent years working across multiple tech stacks, this got me thinking.… - [Business Won't Let Me and other lies we tell to ourselves](https://event-driven.io/en/business-wont-let-me-and-other-lies/): "Business won't let us implement proper telemetry." "We can't write tests because there's no time." "The manager won't approve refactoring." "We don't have budget for proper CI/CD." "The deadline doesn't allow for… - [PostgreSQL JSONB - Powerful Storage for Semi-Structured Data](https://event-driven.io/en/postgresql-jsonb-powerful-storage/): Object-oriented or relational? You’ve seen this battle in your projects. For many years, we tried to fit the business data, which is usually grouped by business use case, into a normalised table structure.… - [Monolith-First - are you sure?](https://event-driven.io/en/monolith-first-are-you-sure/): Welcome to the new week! Our industry is highly related to fashion and trends. Trends set up by the tech influencers promoting some ideas, quite often that they haven’t even tried to apply in the real system.… - [What we don't know that we don't know](https://event-driven.io/en/what-we-dont-know-that-we-dont-know/): Welcome to the next week! I’ve got good news and bad news for you today. The good news is that I no longer have the flu; the bad news is that it evolved into pneumonia… So, because of that, I have other news that could… - [We are no superhumans](https://event-driven.io/en/we-are-no-superhumans/): Welcome to the next week! If you want to make God laugh, tell him about your plans. Everyone has a plan until they get punched in the face. We can and should make plans but also learn to let go.… - [TypeScript Migrates to Go: What's Really Behind That 10x Performance Claim?](https://event-driven.io/en/typescript-migrates-to-go-whats-really/): Welcome to the new week! Almost two weeks ago, Microsoft announced they're porting the TypeScript compiler from JavaScript to Go, promising a staggering 10x performance improvement.… - [Whole Architecture Weekly content is free now!](https://event-driven.io/en/whole-architecture-weekly-content/): Hi, the only constant in the world is change. Seven months ago, I made a big change and made the Architecture Weekly a paid newsletter. Now, I have decided to make it fully free.… - [Practical Introduction to Event Sourcing with Emmett](https://event-driven.io/en/practical-introduction-to-event-sourcing/): Titles can be misleading. No special guest this time, but I’d like to introduce you to Emmett. Oh well, most importantly, I'd like to introduce you to Event Sourcing and show you how straightforward it can be.… - [So you want to break down monolith? Read that first.](https://event-driven.io/en/so-you-want-to-break-down-monolith/): I've been involved in several projects that tried to break down a legacy monolith. Some were successful, but most were not. Even those moderately successful had a common, painful experience.… - [How does Kafka know what was the last message it processed? Deep dive into Offset Tracking](https://event-driven.io/en/how-does-kafka-know-what-was-the/): Let’s say it’s Friday. Not party Friday, but Black Friday. You’re working on a busy e-commerce system that handles thousands of orders per minute. Suddenly, the service responsible for billing processing crashes.… - [Documenting Event-Driven Architecture with EventCatalog and David Boyne](https://event-driven.io/en/documenting-event-driven-architecture/): Welcome to the new week! “How to document systems build with Event-Driven Architecture?” and “How to keep our understanding about evolving messages definitions?” Are one of the common questions I’m being asked.… - [Defining Your Paranoia Level: Navigating Change Without the Overkill](https://event-driven.io/en/defining-your-paranoia-level-navigating/): Welcome to the new week! The biggest challenge in understanding new technology or practices isn't the time needed to learn them. A much bigger challenge is unlearning the practices we've been using so far.… - [React Query: A solution for Frontend State Management challenges? With Tomasz Ducin](https://event-driven.io/en/react-query-a-solution-for-frontend/): Welcome to the new week! Tomasz Ducin is back with us to explain the next parts of Frontend Architecture—this time with a deeper, more hands-on walkthrough of Frontend State Management on the React Query example.… - [Understanding Kafka's Consumer Protocol: A Deep Dive into How Consumers Talk to Brokers](https://event-driven.io/en/understanding-kafkas-consumer-protocol/): Last week, we explored how Kafka consumers work in consumer groups and how rebalancing ensures partition distribution. That sparked an interesting question about how consumers actually communicate with brokers and detect… - [Kafka Consumers: Under the Hood of Message Processing](https://event-driven.io/en/kafka-consumers-under-the-hood-of/): Last week, we discussed how Kafka producers work and how Kafka stores data. We discussed details like fsync, crash resiliency and why it’s better to flush data on disk rarely. That was a bit of nerd sniping.… - [How Kafka Producer Works internally](https://event-driven.io/en/how-a-kafka-like-producer-writes/): Imagine you’re sending a message to Kafka by calling something simple like: We often treat this like a “black box”. We put messages on one side and get them on the other.… - [How to build MongoDB Event Store](https://event-driven.io/en/mongodb_event_store/): I have always said that MongoDB is not the best choice for event storage, and guess what? I just released the stable version of the MongoDB event store in Emmett. And let me explain today how to do it.… - [Thoughts on Platforms, Core Teams, DORA Report and all that jazz](https://event-driven.io/en/thoughts-on-platforms-core-teams/): All the best in New Year! Here’s my summary of 2024: I survived! And that’s a success that I want to repeat in 2025. Right before Christmas, I wrote a longer thread on social media with my thoughts on the hot topic:… - [Locks, Queues and business workflows processing](https://event-driven.io/en/locks-queues-and-business-workflows/): Last week, we discussed Distributed Locking. Today, we’ll continue with locking but doing it differently: with a full backflip. We’ll discuss how to implement a simple in-process lock. What’s special about it?… - [Distributed Locking: A Practical Guide](https://event-driven.io/en/distributed-locking-a-practical-guide/): Was your data ever mysteriously overwritten? No? Think again. Have you noticed conflicting updates to the same data? Still nope?… - [On getting the meaningful discussions, and why that's important](https://event-driven.io/en/on-getting-the-meaningful-discussions/): Welcome to the next week! This time, I’d like to go less techy and focus more on the soft part of being an architect. As much as I like to show code and explain the application of the technologies and patterns, I don’t… - [The Write-Ahead Log: A Foundation for Reliability in Databases and Distributed systems](https://event-driven.io/en/the-write-ahead-log-a-foundation/): I want to talk with you today about the Write-Ahead Log concept. Why? Last month, I gave the “PostgreSQL Superpowers” talk again twice at .NET meetups.… - [Applying Observability: From Strategy to Practice with Hazel Weakly](https://event-driven.io/en/applying-observability-from-strategy/): Have you considered applying observability but struggled to match the strategy with the tooling? Or maybe you were lost on how to do it?… - [Deduplication in Distributed Systems: Myths, Realities, and Practical Solutions](https://event-driven.io/en/deduplication-in-distributed-systems/): Last week, we discussed how to use queuing to guarantee idempotency. What’s idempotency? It’s when we ensure that no matter how often we run the same operation, we’ll always end up with the same result.… - [Ordering, Grouping and Consistency in Messaging systems](https://event-driven.io/en/ordering-grouping-and-consistency/): We went quite far from our Queue Broker series in recent editions, but today, we’re back to it! Did you miss it? In an initial article, we introduced the QueueBroker—a central component that manages queuing,… - [Idempotent Command Handling](https://event-driven.io/en/idempotent_command_handling/): Practical command-handling patterns for preventing duplicate business effects with optimistic concurrency and explicit deduplication. - [Building your own Ledger Database](https://event-driven.io/en/building-your-own-ledger-database/): Building your own database sounds like moronic move. Yet, that’s the advice I gave recently on the Architecture Weekly Discord channel. Why did I do it?… - [Tech Debt doesn't exist, but trade-offs do](https://event-driven.io/en/tech-debt-doesnt-exist-but-trade/): Welcome to the next week! I laughed hard right after entering the room. During the call, my friend Arek told someone: “We’ll add it to tech debt.” It was years ago, and I probably heard that term for the first time.… - [Frontent Architecture, Backend Architecture or just Architecture? With Tomasz Ducin](https://event-driven.io/en/frontent-architecture-backend-architecture/): Welcome to the new week! For a long time, I’ve wanted to talk more about Frontend Architecture. In my projects, I always enjoyed delivering features end-to-end the most.… - [Bootstrapping CRUD with Pongo](https://event-driven.io/en/crud_with_pongo/): The leitmotif of this blog is the event-driven approach. I truly believe that it's a way to keep our applications closer to business. By doing so, we can better reflect the business process in our system design and code.… - [Don't Oversell Ideas: Trunk-Based Development Edition](https://event-driven.io/en/dont-oversell-ideas-trunk-based-development/): Welcome to the new week! We're searching for simple answers to hard problems. We scroll through social media, getting 10-30 seconds of "life hacks.".… - [Running a regular SQL on Pongo documents](https://event-driven.io/en/sql_support_in_pongo/): Have you heard someone say: "We'll use this tool because it requires a long onboarding and lots of memorisation?" You could have seen the decision as such in hindsight, but that doesn't happen too often intentionally.… - [Why to measure and make our system observable? How to reason on chaotic world](https://event-driven.io/en/why-to-measure-and-make-our-system/): Welcome to the next week! Did you watch or listen to the last releases with our special guests? On Performance Testing with Jarosław Pałka Gojko Adzic on designing product development experiments with Lizard Optimization… - [Pongo behind the scenes](https://event-driven.io/en/pongo_behind_the_scenes/): If you want to make God laugh, tell him about your plans. My plans were simple: recharge during summer, take a break in July, and then return to the regular writing cadence.… - [Webinar #23 - Gojko Adzic on designing product development experiments with Lizard Optimization](https://event-driven.io/en/webinar-23-gojko-adzic-on-designing/): Welcome to the next week! My favorite conspiracy theory is that the stuff we make in software actually has any sense. That's a big conspiracy, and you can see people believing that, and that's just not true.… - [Webinar #22 - On Performance Testing with Jarosław Pałka](https://event-driven.io/en/webinar-22-on-performance-testing/): We touched upon performance in the last few editions with: intro to benchmarking in Talk is cheap, show me the numbers! Benchmarking and beyond! the considerations for making our system Production Ready.… - [Making your system observability predictable](https://event-driven.io/en/making-your-system-observability/): Welcome to the next week! Last week, we discussed why logs and metrics are not enough. I promised that we’d discuss how to instrument our code. And that’s what we’re going to do today.… - [When Logs and metrics are not enough: Discovering Modern Observability](https://event-driven.io/en/when-logs-and-metrics-arent-enough/): It's 2 a.m., and your phone rings. Your system is experiencing performance degradation. Tasks are piling up in the queues, users are seeing timeouts, and your monitoring dashboard shows that the connection pool is at its… - [Pongo gets strongly-typed client, migrations, and command line tooling](https://event-driven.io/en/pongo_strongly_typed_client/): When you think upfront and want to make things right, there's an interesting feedback loop. Quite often, things start to click, often in a surprising way.… - [Show me the money! Practically navigating the Cloud Costs Complexity](https://event-driven.io/en/show-me-the-money-practically-navigating/): In my last article, I explored how Amazon S3’s new conditional writes feature can be used to implement a strongly consistent event store.… - [Using S3 but not the way you expected. S3 as strongly consistent event store](https://event-driven.io/en/using-s3-but-not-the-way-you-expected/): Welcome to the new week! Hype is strong in our industry, but the most powerful news usually comes surprisingly silent. That’s what happened with the latest AWS S3 update.… - [My Architecture Drivers](https://event-driven.io/en/architecture_drivers/): I don't feel like an authority or an expert. I prefer to think about myself as a practitioner. Our industry is filled with self-proclaimed experts; we need more doers.… - [Webinar #21 - Michael Drogalis: Building the product on your own terms](https://event-driven.io/en/webinar-21-michael-drogalis-building/): Did you have a brilliant idea for a startup but were afraid to try it? Or maybe you’ve built an Open Source tool but couldn’t find a way to monetise it? How to be a solopreneur, a company of one?… - [Architecture Weekly #192 - Talk is cheap, show me the numbers! Benchmarking and beyond!](https://event-driven.io/en/talk-is-cheap-show-me-the-numbers/): Boy, it's the fourth episode of the refreshed format, time flies! We started by learning the importance of connection pooling, discussing how to implement it, and then plot twisting to explain why what we learned so far… - [Using event metadata in event-driven projections](https://event-driven.io/en/projections_and_event_metadata/): Some time ago, I wrote about the dangers that come from the I'll just add one more field" attitude. Have you heard about the Broken Window Theory? Authors (James Q. Wilson and George L.… - [Is It Production Ready?](https://event-driven.io/en/architecture-weekly-191-is-it-production/): Welcome to the new week! Why is connection pooling important? How can queuing, backpressure, and single-writer patterns help?… - [Writing and testing event-driven projections with Emmett, Pongo and PostgreSQL](https://event-driven.io/en/emmett_projections_testing/): In the previous article, I told what happened when Emmett and Pongo walked into a bar. In other words, I announced that you can now do Event Sourcing in Node.js on top of PostgreSQL.… - [Architecture Weekly #190 - Queuing, Backpressure, Single Writer and other useful patterns for managing concurrency](https://event-driven.io/en/architecture-weekly-190-queuing-backpressure/): Welcome to the new week! In the last edition, we explored why connection pooling is crucial for using databases efficiently.… - [Mastering Database Connection Pooling](https://event-driven.io/en/architecture-weekly-189-mastering/): Welcome to the new week! Efficiently managing database connections is crucial for any application that handles multiple requests.… - [Event Sourcing on PostgreSQL in Node.js just became possible with Emmett](https://event-driven.io/en/emmett_postgresql_event_store/): Last week, I announced Pongo - Mongo, but it was on PostgreSQL. So, the Node.js library allows using PostgreSQL as a document database.… - [Pongo - Mongo but on Postgres and with strong consistency benefits](https://event-driven.io/en/introducting_pongo/): Flexibility or Consistency? Why not have both? Wouldn't it be great to have MongoDB flexible schema and PostgreSQL consistency? MongoDB is a decent database, but it gives headaches with its eventual consistency handling.… - [Filtering EventStoreDB subscriptions by event types](https://event-driven.io/en/filtering_eventstoredb_subscriptions_by_event_types/): Regular expressions are one of the classic examples of hate and hate relationships. Yes, it's not a typo; hate and hate. Do you know anyone who loves or knows how to write moderately complex regex?… - [How to automatically setup pgAdmin with a Docker database](https://event-driven.io/en/automatically_connect_pgadmin_to_database/): Developer experience is a phrase repeated in multiple ways. In our industry, we finally realised how important it is to reduce the cognitive load.… - [Setting up NGINX load balancer for .NET WebApi](https://event-driven.io/en/setting_up_nginx_with_aspnet/): "Just put the load balancer in front of it, and call it a day". But is it really that simple? Was it ever "just do XYZ?". I was preparing a new workshop recently.… - [Combining the To-Do List and the Passage Of Time patterns for resilient business workflows](https://event-driven.io/en/to_do_list_and_passage_of_time_patterns_combined/): Managing processes is non-trivial. I have written about it in multiple posts and told you the horror story of the case that should have never happened.… - [Let's build the worst Event Sourcing system!](https://event-driven.io/en/lets_build_the_worst_event_sourcing_system/): Everyone likes to talk about best practices. I went the other way around and gathered all the worst practices on how to build the worst Event Sourcing system. Was it easy?… - [Why you should batch message processing and how to do it with .NET AsyncEnumerable](https://event-driven.io/en/batching_async_enumerable/): AsyncEnumerable is a sneaky abstraction. It allows simplified and performant usage for iterating on pull-based and push-based sources. "Pull-based and push-based sources" sound smart, but what are they?… - [Docker Compose Profiles, one the most useful and underrated features](https://event-driven.io/en/docker_compose_profiles/): Erik Shafer asked me on the Emmett Discord if I could provide a sample of how to run the WebApi application using Emmett.… - [How to write a left-fold streams collector in Java](https://event-driven.io/en/how_to_write_left_fold_collector_in_java/): Last week, we covered the latest improvements to Java 22 around pattern matching and records. They enable explicit business logic modelling, making it concise and guarded by the compiler.… - [This is not your uncle's Java! Modelling with Java 22 records pattern matching in practice](https://event-driven.io/en/this_is_not_your_uncle_java/): I like learning new things. It stimulates my creativity, helps me gain diverse perspectives, and helps me be humble. When you're a notorious debutant, you learn to appreciate small stuff and simplicity, the power of… - [How to configure a custom Test Container on the EventStoreDB example](https://event-driven.io/en/custom_test_container_on_esdb_example/): Testcontainers became a popular way of setting up dependencies for integration testing. They're not ideal, as configuring them to run your tests efficiently is not as trivial as it's glossed; I explained that in A simple… - [Mocking the native Node.js Test Runner](https://event-driven.io/en/mocking_nodejs_native_test_runner/): Last week, we discussed an overused but applicable pattern: in-memory bus. This time, we'll continue with the leitmotif and talk about mocking. No, I won't mock you; I will mock TypeScript code.… - [How to build an in-memory Message Bus in TypeScript](https://event-driven.io/en/inmemory_message_bus_in_typescript/): I'm writing this article on Friday, and it's about time to have some fun. As this is a programming blog, let's have some fun coding.… - [Event modelling anti-patterns explained](https://event-driven.io/en/anti-patterns/): Have you heard about Passive Aggressive Events or CRUD sourcing? Or maybe about the Clickbait event? If you don't, you better check the talk I gave at Kafka Summit 2024.… - [I'm no longer Marten maintainer](https://event-driven.io/en/i_am_no_longer_marten_maintainer/): Folks, I'd like to inform you that I'm no longer a Marten maintainer. As you know, sometimes in the project's lifetime, there's a moment when either you need to settle things or make hard decisions.… - [Testing Event Sourcing, Emmett edition](https://event-driven.io/en/testing_event_sourcing_emmett_edition/): I've been going pretty down the rabbit hole in the last few years. What am I searching for? A way to deliver better software. And that's, of course, a "thank you for nothing" type of answer.… - [Join my Event Sourcing workshops at Techorama and DDD Europe and speed up your journey!](https://event-driven.io/en/speed_up_your_event_sourcing_journey_with_workshops/): Event Sourcing is a pattern that is quickly gaining popularity. Many companies see the advantages it brings, e.g. business focus and keeping all information about the business process.… - [How to tackle compatibility issues in ECMA Script modules (and in general)](https://event-driven.io/en/how_to_tackle_esmodules_compatibility_issues/): Do you recall moments when you're sitting and closing dozens or more browser tabs? Most of them are Google, GitHub, Blogs, and others. You click and close them one by one, not even checking if they're worth keeping.… - [Keeping our overachieving freak on a leash](https://event-driven.io/en/keeping_overachieving_freak_on_a_leash/): Being busy is not something we strive for; it's an axiom. Social media are not helping; our whole lives are on the plate. And we're chefs serving fast food.… - [Should you always keep streams short in Event Sourcing?](https://event-driven.io/en/should_you_always_keep_streams_short/): In the last article and others I did my best explaining why keeping streams short is important in Event Sourcing. I also showed you how. That should take you far enough, especially if you talk to your business.… - [Implementing Closing the Books pattern](https://event-driven.io/en/closing_the_books_in_practice/): No one knows who invented Event Sourcing. I overheard that Hammurabi did. Why? Because he standardised the first set of rules of accounting.… - [Announcing Emmett! Take your event-driven applications back to the future!](https://event-driven.io/en/introducing_emmett/): Simple is not easy. Each person has its definition of it. For me, it means that when I look at the solution, I think: "So simple. Why didn't I come up with it?". That also means that it's straightforward to understand.… - [Production-Grade Event Sourcing Workshop - Modelling, DevOps, Process](https://event-driven.io/en/production_grade_event_sourcing/): Putting the career bets is not easy; I made boring and pragmatic choices for most of my career. They took me far. Yet, I always felt that something was missing and that my systems could be delivered and operated better.… - [How TypeScript can help in modelling business workflows](https://event-driven.io/en/how_to_have_fun_with_typescript_and_workflow/): TypeScript is an intriguing language. Some say that its type system, by itself, is Turing Complete. Some take it to the extreme and even implement Flappy Bird in TypeScript types.… - [Stream ids, event types prefixes and other event data you might not want to slice off](https://event-driven.io/en/on_putting_stream_id_in_event_data/): You're reading much more code than you're writing. Readability is a highly subjective term. That's probably why some call what we're doing craft or even art.… - [Should you record multiple events from business logic?](https://event-driven.io/en/one_or_more_event_that_is_the_question/): Asking people for feedback is an intriguing story. I like to get constructive criticism for my work, as that allows me to learn something new.… - [Not all issues are complex, some are complicated. Here's how to deal with them](https://event-driven.io/en/how_to_solve_complicated_problems/): Cynefin's framework states that we have four types of decision-making contexts (or domains): clear, complicated, complex, and chaotic. They also add confusion to the mix.… - [What Dune can tell us about setting our goals](https://event-driven.io/en/dune_and_long_term_goals/): Dune series has a lot of great thoughts. They're more than just sci-fi books. Let me share one with you: Moneo: For what do you hunger, Lord? Leto: For a humankind which can make truly long-term decisions.… - [Why I won't use .NET Aspire for now](https://event-driven.io/en/nay_to_aspire/): When you're angry, take a breath, take your time and then talk. So I did after I tested .NET Aspire yesteday. I hoped it could be a decent tool for local development with a decent synergy to Marten and Wolverine, and...… - [Hitchhiker's Guide To Moving From Relational Data To Events](https://event-driven.io/en/the_end_is_near_for_crud_data/): Knock knock? Who's there? It's me, Oskar, the end is near, did you know that? Ah, you know it but don't know how to proceed? Let's talk about the end of the CRUD world.… - [A few notes on migrating storage library](https://event-driven.io/en/notes_on_migrating_storage_library/): I'm feeling like a surgeon in recent days. Who knew that changing the connection management in storage library would be a delicate thing to do? I did, but it's still an intriguing feeling.… - [Are you Marten or Wolverine user? Tell us more!](https://event-driven.io/en/marten_user_survey/): I'm always saying that the Marten community is one of the things that keeps me doing Open Source and staying in the .NET community. It's really welcoming and supportive.… - [How to deal with privacy and GDPR in Event-Driven systems](https://event-driven.io/en/gdpr_in_event_driven_architecture/): The law to be forgotten and immutable data sounds like fire and water. How to remove data if you're building an event-driven system based on append-only, immutable log. Is that even possible?… - [We introduced support plans for Marten](https://event-driven.io/en/marten_support_plans/): We just introduced support plans for Marten, and here's why. We're really committed to providing tools that are accessible, safe and bug-free. We spend hours daily talking with over 800 users on our Discord.… - [GDPR for busy developers](https://event-driven.io/en/gdpr_for_busy_developers/): This year, we had the fifth anniversary of the Developers' Doomsday. In 2018, on the 25th of May, the European General Data Protection Regulation was made applicable.… - [Anti-patterns in event modelling - Clickbait event](https://event-driven.io/en/clickbait_event/): Doctors Hate Her! Discover the Simple Trick to Lose Weight Overnight! This One Weird Trick Can Save You Hundreds on Your Energy Bills! The Secret Investment Banks Don't Want You to Know About! I'm sure you've seen such… - [Women in IT](https://event-driven.io/en/women_in_it/): I used to play football. I wasn't talented, but still, I loved it. Football is a team sport, and playing is not the only essential part of that. The other is the locker room.… - [In the defence of Object-Relational Mappers](https://event-driven.io/en/in_the_defence_of_orms/): I'm happy I didn't have to use Object-Relational Mapping tools in the last few years. They're solutions to some set of problems, but those are the problems I try to avoid having in general.… - [Internal and external events, or how to design event-driven API](https://event-driven.io/en/internal_external_events/): One of the things that we're learning too late in the Event-Driven approach is that we should have been splitting events into internal and external. While starting our journey, we focus on modelling our business case.… - [How to design software architecture pragmatically](https://event-driven.io/en/how_to_design_software_architecture_pragmatically/): I've run numerous workshops in recent years. It's intriguing to see different ways people solve the same problem. Some start from general vision and go into details, some the other way.… - [Is the Strategy Pattern an ultimate solution for low coupling?](https://event-driven.io/en/is_strategy_pattern_an_ultimate_solution_for_low_coupling/): Having a single source of truth and data point is a sweet spot for running business logic. We check the data from one place and update it. Easy peasy.… - [Oops I did it again, or how to update past data in Event Sourcing](https://event-driven.io/en/how_to_update_past_data_in_event_sourcing/): One team win is a loss for the other. For some people, money loss is a gain for others. In the same way, the challenging parts of Event Sourcing are also its superpowers. Perspective changes everything.… - [Architecture Weekly became the Substack Bestseller!](https://event-driven.io/en/architecture_weekly_became_substack_bestseller/): Boom, I got this week such a nice picture from the Substack. My Architecture Weekly newsletter appears to have become the Substack Bestseller for getting 100 paid subscribers.… - [My journey from Aggregates to Functional Composition](https://event-driven.io/en/my_journey_from_aggregates/): I was recently asked what drove me to mostly use immutable data and methods rather than the Aggregate Pattern in my samples and videos.… - [Event transformations, a tool to keep our processes loosely coupled](https://event-driven.io/en/event_transformations_and_loosely_coupling/): One of the biggest pains in traditional software design is accidental complexity. We want to understand and reflect on the business process in the code, but our perspective becomes immediately blurred.… - [Prototyping, an underestimated design skill](https://event-driven.io/en/prototype_underestimated_design_skill/): Coding is an underestimated part of the design. When we think about the design, we immediately fall to whiteboard diagrams, sticky notes, or endless discussions.… - [Behaviour-Driven Design is more than tests](https://event-driven.io/en/behaviour_driven_design_is_not_about_tests/): Why did I name the testing library Ogooreck? Between my friends, I'm well known for my lame jokes. Ogooreck is one of them. Ogooreck is a phonetical written Ogórek.… - [Could you help me by filling a short survey about an online course?](https://event-driven.io/en/online_course_survey/): I realised that I could do more to help you and other folks. I've been sharing online content for free in the last few years on this blog, self-paced kits, and OSS works. I know that it helped many folks, but...… - [A simple way to configure integration tests pipeline](https://event-driven.io/en/configure_ci_for_integration_tests/): Continuing an effort to explain DevOps scenarios, today I'd like to show you a simple way to set up integration tests that I'm using in my sample repositories and Marten. What are my assumptions?… - [How to scale out Marten](https://event-driven.io/en/scaling_out_marten/): If you are already a reader of this blog, you probably know already that I'm not so fond of the Will it scale? question. I believe that, too often, it's just a vague response if we don't like something.… - [How to set global setting for XUnit tests](https://event-driven.io/en/xunit_global_settings/): XUnit is not my favourite testing tool; I already mentioned that in How to set up a test matrix in XUnit?. To be fair, none of the .NET test tooling is my favourite.… - [How to create a Docker image for the Marten application](https://event-driven.io/en/marten_and_docker/): Containerisation is something that pushed our industry much further. Generating immutable artefacts is a foundational aspect of the DevOps process.… - [Vertical Slices in practice](https://event-driven.io/en/vertical_slices_in_practice/): I'm a preacher for the CQRS, Vertical Slices, and Feature Folders. I won't hide that, and I won't even try. I believe that structuring code based on the business feature helps deliver business value, thanks to an… - [Follow the money to get a better design](https://event-driven.io/en/follow_the_money/): I noticed that we, developers, struggle to follow the money. And that's impacting our design in the wrong way. Of course, we're pretty good at getting high salaries, but I'm not speaking about that.… - [Removability over Maintainability](https://event-driven.io/en/removability_over_maintainability/): A diverse system with multiple pathways and redundancies is more stable and less vulnerable to external shock than a uniform system with little diversity. A single line from Donella Meadows has so many dimensions.… - [Recap of Event Sourcing Live 2023](https://event-driven.io/en/event_sourcing_live_2023/): InfoQ claims that Event Sourcing is in the late majority adoption phase. That means that if you haven't started to use it, you better start doing it, as you're not innovative and lagging behind. Is that true?… - [A few words on communication](https://event-driven.io/en/a_few_words_on_communication/): I got a surprising question during my workshop this week: It seems that communication with the business is critical to make Event Sourcing right. What would you recommend to learn how to talk with the business?… - [The Holy Grail syndrome](https://event-driven.io/en/holy_graal_syndrome/): Our industry is harmed by the disease of "There has to be something more!" also called "The Holy Grail syndrome". Instead of trying to understand building blocks as they are, we're trying to mix all of them, hoping that… - [Anti-patterns in event modelling - I'll just add one more field](https://event-driven.io/en/i_will_just_add_one_more_field/): Programming origins are in mathematics. Scientists like John Von Neumann and Alan Turing built the foundations for today's computers. That may be a reason why we tend to believe that 1 plus 1 will always equal 2.… - [Is the audit log a proper architecture driver for Event Sourcing?](https://event-driven.io/en/audit_log_event_sourcing/): Usually, one of the main drivers for Event Sourcing is the audit log capability. Indeed event stores are append-only logs, theoretically, we're getting that for free.… - [A few notes on running open source project after Marten v6 release](https://event-driven.io/en/a_few_notes_on_running_open_source_project/): Last week we released the next major Marten release, and I'd like to share some of my lessons learned and insights with you.… - [General strategy for migrating relational data to document-based](https://event-driven.io/en/strategy_on_migrating_relational_data_to_document_based/): I was recently asked how to migrate a project using relational data to a document-based approach (e.g. from .NET ORM Entity Framework into Marten). As always, it's easy to ask a question but much harder to answer.… - [How to test event-driven projections](https://event-driven.io/en/testing_event_driven_projections/): Projections in an event-driven world are a way to interpret registered events. We can take a sequence of events and build from them read models in a predictable way.… - [Publishing read model changes from Marten](https://event-driven.io/en/publishing_read_model_changes_from_marten/): Integrations have different names, shades and colours, but only one adjective: challenging. Trying to glue systems together requires matching two visions into one.… - [Postgres Superpowers in Practice](https://event-driven.io/en/postgres_superpowers/): Look! Up in the sky! It's a bird! It's a plane! It's Superman! I have such a thought quite often while working with Postgres. Why? Let's say that you're building Car Fleet Management System.… - [Event stores are key-value databases, and why that matters](https://event-driven.io/en/event_stores_are_key_value_stores/): Event stores are the foundational building block of Event Sourcing. They're also one of the biggest sources of confusion. They are databases turned upside down, append-only logs.… - [ChatGPT, revolution or not?](https://event-driven.io/en/chat_gpt_revolution_or_not/): I started my career when StackOverflow didn't exist. That's how I quite often introduce myself. I'm that old. That's, of course, nothing spectacular, as many people more experienced than me would roll out their eyes… - [Ensuring uniqueness in Marten event store](https://event-driven.io/en/unique_constraint_in_marten_event_store/): Unique constraint validation is one of those things that looks simple but is not always easy. I explained already that, in Event Sourcing, it may be challenging.… - [Projecting Marten events to Elasticsearch](https://event-driven.io/en/projecting_from_marten_to_elasticsearch/): I told you already that Projections are an Event Sourcing killer feature, and today I'd like to repeat that. In Marten, we embraced that and provide various ways of handling projections.… - [How to handle multiple commands in the same transaction](https://event-driven.io/en/simple_transactional_command_orchestration/): Let's say that we're starting a new project. It's a small tool for internal needs, maybe even some sort of shadow IT project.… - [Fun with serial JSON](https://event-driven.io/en/fun_with_json_serialisation/): JSON serialisation is so much fun. We can make jokes and curse, but we must live with it. Surprisingly, that's not getting simpler if we use JavaScript or TypeScript.… - [Don't let Event-Driven Architecture buzzwords fool you](https://event-driven.io/en/dont_let_event_driven_architecture_buzzwords_fool_you/): I see a lot of new terms like Command-Event, Event-Based Compute, etc., presented around Event-Driven Architecture. Let me clear that up because there are no such things.… - [Set up OpenTelemetry with Event Sourcing and Marten](https://event-driven.io/en/set_up_opentelemetry_wtih_event_sourcing_and_marten/): If I had to select the Distributed Systems Song, I'd choose Land of Confusion. This is the world we live in. And these are the hands we're given. Use them, and let's start trying. To make it a place worth living in.… - [Event-driven projections in Marten explained](https://event-driven.io/en/projections_in_marten_explained/): Projections are a neverending story. One does not simply write a single guide. One needs to write more examples of more advanced cases.… - [Explicit validation in C# just got simpler!](https://event-driven.io/en/explicit_validation_in_csharp_just_got_simpler/): Validation is a thriving concept. It enables incredible creativity in developers implementing it in various ways. I explained my general take on How to validate business logic.… - [Stacking the bricks in the software development process](https://event-driven.io/en/stacking_the_bricks/): We, developers, are searching for Holy Grail, one pattern to rule them all. There's no such. In his excellent book "Atomic Habits", James Clear described how we should stack our habits.… - [Guide to Projections and Read Models in Event-Driven Architecture](https://event-driven.io/en/projections_and_read_models_in_event_driven_architecture/): Learn how projections turn event streams into useful read models, including rebuilds, idempotency, and eventual consistency. - [How to validate business logic](https://event-driven.io/en/how_to_validate_business_logic/): Learn where request validation ends and domain validation begins, with a practical layered approach to protecting business rules. - [Let's build event store in one hour!](https://event-driven.io/en/lets_build_event_store_in_one_hour/): Last year, I completed two items from my speaker bucket list NDC Oslo and Domain-Driven Design Europe. I'm proud and happy, as those conferences were a huge inspirations for me.… - [Don't be like Ebenezer Scrooge. A few words about workaholism](https://event-driven.io/en/a_few_words_about_workaholism/): There is a cult of workaholism in our industry. Just like the guys from the gym brag about how much they pulled on the chest or did in the deadlift, we brag about how many overtime hours we worked.… - [Explicit events serialisation in Event Sourcing](https://event-driven.io/en/explicit_events_serialisation_in_event_sourcing/): Events serialisation is an intriguing topic. On the one hand, it's part of the campfire spooky tales, so (in)famous events versioning.… - [The magic is that there is no magic. Or how to understand design patterns.](https://event-driven.io/en/the_magic_is_that_there_is_no_magic/): The magic is that there is no magic. Many patterns perceived as complicated appear to be simple or even simplistic under the cover. Take, for example, Event Sourcing.… - [Share your story on Event Sourcing Live 2023](https://event-driven.io/en/share_your_story_on_event_sourcing_live/): Event Sourcing is a concept that helps to build the bridge between business and technical implementation. It's a storage pattern that takes the business facts and uses them to model and handle business workflow.… - [Testing asynchronous processes with a little help from .NET Channels](https://event-driven.io/en/testing_asynchronous_processes_with_a_little_help_from_dotnet_channels/): Let's say that you have an event-driven application. It has an event bus that listens for events from asynchronous processes (e.g. Kafka consumer or outbox pattern).… - [Mapping event type by convention](https://event-driven.io/en/how_to_map_event_type_by_convention/): Events are an essential block of Event-Driven Architecture. They represent business facts that happened in our system. We can use them to integrate business workflow steps, store them to use them later in our business… - [How to get all messages through Postgres logical replication](https://event-driven.io/en/how_to_get_all_messages_through_postgres_logical_replication/): In an earlier article, I described Push-based Outbox Pattern with Postgres Logical Replication. The idea is to store the outgoing message (e.g. event) in the same database transaction together with the state change.… - [How events can help in making the state-based approach efficient](https://event-driven.io/en/how_events_can_help_on_making_state_based_approach_efficient/): In my last few articles, I showed the power of functional composition. That's a foundation for effective modelling of your business logic. It allows for having more straightforward and explicit code.… - [Never Lose Data Again - Event Sourcing to the Rescue!](https://event-driven.io/en/never_lose_data_with_event_sourcing/): Relational databases are not losing data. They're robust, consistent and secure! Are they? Too often, we mix technical and logical concepts. Business transactions are not the same as database transactions.… - [How Postgres sequences issues can impact your messaging guarantees](https://event-driven.io/en/ordering_in_postgres_outbox/): Big picture descriptions and overall explanations are great. They help us to understand the foundations of new ideas and then find the place we need to evaluate more.… - [Writing and testing business logic in F#](https://event-driven.io/en/writing_and_testing_business_logic_in_fsharp/): My road to functional programming was pretty long. I started with structural programming in C++ and then rebranded into an Object-Oriented approach with Java and C#.… - [Push-based Outbox Pattern with Postgres Logical Replication](https://event-driven.io/en/push_based_outbox_pattern_with_postgres_logical_replication/): There are only a few patterns that I'm comfortable saying: "You should use it always if you want to build mature system". One of them is the Outbox Pattern. Why?… - [Testing business logic in Event Sourcing, and beyond!](https://event-driven.io/en/testing_event_sourcing/): Test Event Sourcing business logic through decider, event-driven aggregate, and state-based aggregate patterns. - [Dive a bit deeper, look a bit wider](https://event-driven.io/en/dive_a_bit_deeper_look_a_bit_wider/): We live in a time of information overload. We are constantly stimulated. Our focus skills are similar to a goldfish. Seemingly our life is easier than it used to be. The same can be observed in programming.… - [On the importance of setting boundaries in team management](https://event-driven.io/en/on_the_importance_of_shaping_the_boundaries_in_team_management/): Paweł Janas is a significant figure in Polish football history. He was a decent defender on his own, then coaching our best clubs and heading the Polish national team. His coaching maxim was: "I don't fuck around".… - [It doesn't have to be toxic at work](https://event-driven.io/en/it_doesnt_have_to_be_toxic_at_work/): We work in an industry that's full of passionate people. Doing what you like and getting paid for it is a privilege and a curse. We're vulnerable to workaholism and its harmful effects.… - [Event Versioning with Marten](https://event-driven.io/en/event_versioning_with_marten/): War never changes; migrations are always complex. It's always a mind gymnastics and searching for risks and what may go wrong. Sometimes we try to cheat, ignore the consequences, and take the fastest.… - [Slim your aggregates with Event Sourcing!](https://event-driven.io/en/slim_your_entities_with_event_sourcing/): In the traditional approach, what we get is what we store. Our write model is too often used directly as our read model, because the typical set of functionality in a system has a details view that exposes it all.… - [How playing on guitar can help you to be a better developer?](https://event-driven.io/en/how_playing_on_guitar_helps_in_being_better_developer/): The first time I did not become a musician was when my grandma tried to sign me to music school. During rehearsal, I stubbornly said I would not sing or repeat things played on the piano.… - [What do the British writer and his fence have to do with Software Architecture?](https://event-driven.io/en/chesterton_fence_and_software_architecture/): Gilbert Keith Chesterton was a British writer from the turn of the 19th and 20th centuries. As for his times, we would call him an influencer or a maven. He had a lot of opinions and did not hesitate to share them.… - [Why are we afraid of our decisions?](https://event-driven.io/en/why_are_we_afraid_of_our_decisions/): I don't know if it will work well in production! Will it scale? What if we get too many users during Black Friday? Do you know those questions?… - [Straightforward Event Sourcing with TypeScript and NodeJS](https://event-driven.io/en/type_script_node_js_event_sourcing/): In the last two articles, I explained how to organise your business logic effectively, showing how proper typing and composition can help to achieve that.… - [Union types in C#](https://event-driven.io/en/union_types_in_csharp/): In the article "How to effectively compose your business logic", I explained how explicit types definition can help in making our codebase closer to the business domain, also predictable and secured.… - [How to effectively compose your business logic](https://event-driven.io/en/how_to_effectively_compose_your_business_logic/): Let's say that we'd like to implement Shopping Cart. We have the following requirements: 1. The customer may only add a product to the shopping cart after opening it. 2.… - [Event-driven distributed processes by example](https://event-driven.io/en/event_driven_distributed_processes_by_example/): Some time ago, I wrote the general rules on processing the event-driven services. check my article Saga and Process Manager - distributed processes in practice.… - [Is keeping dates in UTC really the best solution?](https://event-driven.io/en/is_keeping_utc_dates_best_solution/): In many projects, the approach to dates is quite nonchalant. People do as they want. When on-premise systems were king, the common problem was that it was hard to know precisely when something happened.… - [Should you generate the client code from the API?](https://event-driven.io/en/client_code_generation/): I'm often told that dull, repetitive tasks should be automated. However, there are times when it is better not to do this. I regularly see that people want to generate client code from API.… - [Unobvious things you need to know about key-value stores](https://event-driven.io/en/key-value-stores/): Today I wanted to talk a bit about Key-Value databases. It is a seemingly obvious subject, but it is easy to overlook the basic assumptions and have a spectacular failure in production.… - [Ogooreck, a sneaky testing library in BDD style](https://event-driven.io/en/ogooreck_sneaky_bdd_testing_framework/): Some time ago, I saw an excellent presentation of Dylan's Beattie presentation - The Art of Code. It reminds us of what we are here for. By here I mean in front of the computer.… - [Should you throw an exception when rebuilding the state from events?](https://event-driven.io/en/should_you_throw_exception_when_rebuilding_state_from_events/): Event Sourcing is not a difficult pattern to understand. Event stores are not conceptually complicated databases (although implementation may be quite complex).… - [Why I'm leaving Event Store and getting ready for the next episode](https://event-driven.io/en/leaving_event_store/): I've got some news today. Here comes the boom: I'm leaving the Event Store, which means I just became unemployed! How come? I am a pragmatic person. My usual decisions are entirely rational.… - [Power of ignorance, or how to write simple code](https://event-driven.io/en/power_of_ignorance/): I was asked to compile various statistics from our Event Store GitHub community some time ago. We wanted to analyze our public repositories in terms of, for example: summary data: number of stars, pull request, forks,… - [What onion has to do with Clean Code?](https://event-driven.io/en/onion_clean_code/): I quite often make fun of Clean Code and Clean Architecture. I'm calling it an Onion Architecture. Not least because it has layers but also because it's smelly.… - [A few tricks on how to set up related Docker images with docker-compose](https://event-driven.io/en/tricks_on_how_to_set_up_related_docker_images/): In the last few days, I have been working on guidance on piping EventStoreDB logs into Elasticsearch. ELK stack (so Elasticsearch, Logstash and Kibana) is one of the most popular tools for ingesting and analyzing logs… - [Persistent vs catch-up, EventStoreDB subscriptions in action](https://event-driven.io/en/persistent_vs_catch_up_eventstoredb_subscriptions_in_action/): Events can be a great facilitator and glue for business workflows. Subscriptions are an essential block of the event-driven system. They notify us about each of the recorded events.… - [How to build a simple event pipeline](https://event-driven.io/en/how_to_build_simple_event_pipeline/): Today we will deal with event consumption. I'll also explain how I wrote the new version of the MediatR library. Curious? We'll get to that later on.… - [Are Temporal Tables an alternative to Event Sourcing?](https://event-driven.io/en/temporal_tables_and_event_sourcing/): I've been asked recently at least a few times about Temporal Tables and how they relate to Event Sourcing. Beware, and don't confuse it with temporary tables. They are not temporary, just time-related.… - [Agile vs Introverts](https://event-driven.io/en/agile_vs_introverts/): I had this thought: most of the "Agile" methodologies and tools are invented by extroverts. Perhaps this is also why, although they are popular, they are still not a standard for designing software. Why do I think so?… - [The risk of ignoring risks](https://event-driven.io/en/the_risk_of_ignoring_risks/): Do you like playing poker? I used to play Texas Holdem with my friends regularly. We took it easy; each person put 5 PLN into the pool, and the winner took everything.… - [Twelve things I learned about Java during my last code review](https://event-driven.io/en/12_things_i_learned_on_last_pull_request_review/): As I have mentioned to you many times, I like to test different approaches, technologies and solutions. I may not have told you yet that I once wanted to be a Java developer.… - [Small rant about the Software Design](https://event-driven.io/en/small_rant_about_software_design/): Some time ago, I listened to an enlightening episode of Scott Hanselman's podcast on how to teach computer science. The guest was Maria Naggaga - Senior Program Manager at Microsoft.… - [Introduction to Event Sourcing - Self Paced Kit](https://event-driven.io/en/introduction_to_event_sourcing/): A practical introduction to Event Sourcing covering events, state reconstruction, business logic, concurrency, and projections. - [How to ensure uniqueness in Event Sourcing](https://event-driven.io/en/uniqueness-in-event-sourcing/): "How do I ensure uniqueness? For example, a unique username or an invoice number." That's usually one of the first questions I hear from someone starting the journey with Event Sourcing.… - [“I'm not interested in politics” is not actual anymore](https://event-driven.io/en/russian_invasion_of_ukraine/): War. War never changes… In IT, we’re living in a bubble. Compared to others we have good working conditions. We learned to complain about tiny things. We’re running disputes on which framework is better or worse.… - [15 tips on how to run meetings effectively](https://event-driven.io/en/fifteen_tips_on_how_to_run_meetings_effectively/): It's always worth talking things through! But is it worth meeting? During my career, I have seen many projects and companies where the "meeting culture" was killing employee performance.… - [Immutable Value Objects are simpler and more useful than you think!](https://event-driven.io/en/immutable_value_objects/): I love proper typing. But what does that even mean? I could say that this is a types' structure defined in a self-explanatory way. But that'd be clichéd, wouldn't it? That's why I won't say that.… - [How to quickly scale a legacy monolith?](https://event-driven.io/en/how_to_quickly_scale_a_legacy_monolith/): Working with a legacy monolith is not easy. For years we learned how to tame that beast gently. We nurtured it and tried not to break it. We even may enjoy that carefully crafted ecosystem.… - [I tested it on production and I'm not ashamed of it](https://event-driven.io/en/i_tested_on_production/): Testing on production usually appears in ridiculous stories. They may be only annoyances like getting questions from customers why they see the entry called "Your momma wears Prada".… - [A simple trick for idempotency handling in the Elastic Search read model](https://event-driven.io/en/simple_trick_for_idempotency_handling_in_elastic_search_readm_model/): Idempotency is a word worth watching out for. It's easy to miss a few letters and bang, and we have a problem. It is also a general problem in programming (or, as some people prefer, "a challenge").… - [Using strongly-typed identifiers with Marten](https://event-driven.io/en/using_strongly_typed_ids_with_marten/): Let's say that you have the following class definition: Now you can create instance using: So far, so good. What if we accidentally mixed the order of the parameters to, e.g.… - [Should a programmer's creativity be shown in code formatting?](https://event-driven.io/en/should_programmers_productivity_be_shown_in_code_formatting/): Each of us has at least a dose of creativity. I have always liked drawing. I wanted to make effective plays in football. Today, I play the guitar and write blog articles for you.… - [No, it can never happen!](https://event-driven.io/en/no_it_can_never_happen/): "No, it can never happen!". Have you heard this sentence before? For example, a user with the same e-mail address may not register, or the shipment won't be delivered.… - [Integrating Marten with other systems](https://event-driven.io/en/integrating_marten/): In Event Sourcing, events are the source of truth. We save them in the event store to have a permanent history of facts about business operations.… - [How to do snapshots in Marten?](https://event-driven.io/en/how_to_do_snapshots_in_marten/): Getting the state from events is a basic but controversial topic in Event Sourcing. I wrote on it longer in other article.… - [CQRS is simpler than you think with .NET 6 and C# 10](https://event-driven.io/en/cqrs_is_simpler_than_you_think_with_net6/): .NET and CQRS are well known for the high ceremony and enterprise feeling. You should treat that as superstition. Let me tell you why. CQRS is a pattern where we're segregating application behaviours.… - [Keep your streams short! Temporal modeling for fast reads and optimal data retention](https://event-driven.io/en/keep-your-streams-short-temporal-modelling-for-fast-reads-and-optimal-data-retention/): Modeling is hard. We need to take so many things into account. This article will explain the basics of temporal modeling, a foundation for keeping your stream short living.… - [Simple patterns for events schema versioning](https://event-driven.io/en/simple_events_versioning_patterns/): Practical patterns for evolving event schemas with mapping, upcasting, transformations, and migrations. - [Event Streaming is not Event Sourcing!](https://event-driven.io/en/event_streaming_is_not_event_sourcing/): I usually don't try to fight the HackerNews or Reddit opinions. That said, I cannot deny that they're powerful platforms. The heated rants can create a significant impact on the community.… - [How to register all CQRS handlers by convention](https://event-driven.io/en/how_to_register_all_mediatr_handlers_by_convention/): In CQRS, it's common to define interfaces for the handlers to enforce the unified code structure. Such an approach is used, e.g. by MediatR library. It is a simple, in-memory implementation of the Mediator pattern.… - [Long-polling, how to make our async API synchronous](https://event-driven.io/en/long_polling_and_eventual_consistency/): I'll continue today a topic of handling eventual consistency that I started in the previous article. This time let's learn the trick called "long-polling".… - [Dealing with Eventual Consistency and Idempotency in MongoDB projections](https://event-driven.io/en/dealing_with_eventual_consistency_and_idempotency_in_mongodb_projections/): Auditability, diagnostics, time travelling are usually the first mentioned features when speaking about Event Sourcing. All of them are great, but to me, projections are the real killer feature of an event-driven… - [How to use ETag header for optimistic concurrency](https://event-driven.io/en/how_to_use_etag_header_for_optimistic_concurrency/): In my article "Optimistic concurrency for the pesimistic times", I described the premises for optimistic concurrency handling. As a reminder, we assume that conflict situations will be rare.… - [Tell, don't ask! Or, how to keep an eye on boiling milk](https://event-driven.io/en/tell_dont_ask_how_to_keep_an_eye_on_boiling_milk/): Some time ago, I thought about writing a cookbook for guys, a set of essential tips on surviving in the kitchen. I thought of starting with brewing coffee and making tea, then going to advanced one like how to heat the… - [What does Mr Bean opening the car have to do with programming?](https://event-driven.io/en/what_does_mr_bean_opening_the_car_have_to_do_with_programming/): Before reading the article, please watch the video below: Mr Bean wants to add a new business feature to the project. First, the entity class, then the repository (and registers its generic version in Dependency… - [What does a construction failure have to do with our authorities?](https://event-driven.io/en/what_does_a_construction_failure_have_to_do_with_our_authorities/): Through my window, I see the result of good plans but poor execution. Opposite my flat, there is a partially completed construction place. Buildings were supposed to be eye-catching Mediterranean style apartments.… - [Let's talk about positions in event stores](https://event-driven.io/en/lets_talk_about_positions_in_event_stores/): Discussions about positions can be awkward, to say the least... It is also the case with positions in Event Sourcing. Each event store implementation has its own nomenclature and specificity.… - [How to build event-driven projections with Entity Framework](https://event-driven.io/en/how_to_do_events_projections_with_entity_framework/): Let's assume that you're building an Event-Driven system. You may be using Event Sourcing or microservices integrated with message bus or monolith with modules triggering each other by events.… - [10 notes on the 10th blogging anniversary](https://event-driven.io/en/thoughts_on_tenth_blogging_anniversary/): Yesterday, precisely ten years passed since I released my first blog post. It's still available in the original place (in Polish) at BlogSpot.… - [Anti-patterns in event modelling - State Obsession](https://event-driven.io/en/state-obsession/): Some time ago, I tackled the first event modelling anti-pattern: "Property Sourcing". Today I'd like to tackle the next one: "State Obsession".… - [How to slice the codebase effectively?](https://event-driven.io/en/how_to_slice_the_codebase_effectively/): The structure of projects is as sensitive as the discussions of spaces versus tabs or indentation size. When we enter someone's apartment, even when it is decorated based on default sets from IKEA, it always looks a bit… - [Will it scale... down?](https://event-driven.io/en/will_it_scale_down/): Some time ago, I wrote that there aren't many more annoying questions than "...but will this scale?!". We usually think prematurely about upscaling.… - [Computer says no! Why we might have an issue with Artificial Intelligence soon](https://event-driven.io/en/computer_says_no_we_may_have_an_issue_with_ai_soon/): Some time ago, I was doing a pilot project for two well-known American fast-food brands. It was about using image processing and artificial intelligence for business analysis.… - [Anti-patterns in event modelling - Property Sourcing](https://event-driven.io/en/property-sourcing/): The first time I got down to work at Event Sourcing, I was very energized. Book knowledge almost fell out of me. However, when I sat down to programming, I was looking like the dog from meme.… - [How to build and push Docker image with GitHub actions?](https://event-driven.io/en/how_to_buid_and_push_docker_image_with_github_actions/): In the previous post, I explained that with a few simple tricks, you can make your Docker image less cluttered and build faster. I explained practical patterns on how to do that.… - [How to build an optimal Docker image for your application?](https://event-driven.io/en/how_to_buid_an_optimal_docker_image_for_your_application/): Some time ago, I realised that my posts from 2011 about configuration and operation in SCRUM using TFS are still hanging on the Internet.… - [Notes about C# records and Nullable Reference Types](https://event-driven.io/en/notes_about_csharp_records_and_nullable_reference_types/): In the last months, I spent quite some time playing with C# records and Nullable Reference Types. I was hoping that thanks to them, I would trust my type better than before.… - [In what language are programmers writing?](https://event-driven.io/en/in_what_language_are_programmers_writing/): Wikipedia states that there are around 700 programming languages. Some are more popular. Some are less. But what language do programmers write in?… - [Snapshotting Strategies](https://event-driven.io/en/snapshotting-strategies/): Looking at resources from the Internet, you may conclude that snapshots are an essential part of the Event Sourcing system. It may be tempting to read the current state from a single record instead of multiple events.… - [Form a wall! And other concerns about security](https://event-driven.io/en/form_a_wall/): There were 0.3 seconds left till the end of the NBA match. Detroit Pistons were leading by a single point against San Antonio Spurs. The ball was in the hands of San Antonio players.… - [Let's take care of ourselves! Thoughts on compatibility](https://event-driven.io/en/lets_take_care_of_ourselves_thoughts_about_comptibility/): In the last year, the word responsibility is used in all possible ways. Responsibility for us, for others. We can be heroes wearing masks instead of cloaks.… - [How to get the current entity state from events?](https://event-driven.io/en/how_to_get_the_current_entity_state_in_event_sourcing/): Today I'd like to go back a bit to the basics of Event Sourcing. I recently realised that I often cover more advanced topics. So sometimes, it's handy to take a step back and polish the basics.… - [When not to use Event Sourcing?](https://event-driven.io/en/when_not_to_use_event_sourcing/): A practical guide to deciding when Event Sourcing adds value and when technical or organisational constraints make it a poor fit. - [Generic does not mean Simple](https://event-driven.io/en/generic_does_not_mean_simple/): As you know, I am a fan and practitioner of CQRS.. I believe that it is falsely considered as complicated. In my opinion, it can help even with the classic CRUD approach.… - [Structural Typing in TypeScript](https://event-driven.io/en/structural_typing_in_type_script/): When we talk about typing in programming languages, we usually divide it into static and dynamic. Static typing is checked at the compile-time, e.g. in Java, C#, C++. Dynamic typing is checked when the code is run, e.g.… - [When Agile is not enough](https://event-driven.io/en/when_agile_is_not_enough/): Today I want to invert the classical pro-agile drawing. Let's talk about the devaluation of functionality that occurs in Agile projects. In the old times, the project was planned ahead. The Waterfall was the king.… - [How to scale projections in the event-driven systems?](https://event-driven.io/en/how_to_scale_projections_in_the_event_driven_systems/): People want to scale up everything. In the past, the recipe for everything was to buy a larger server. Today, the answer is to add another instance. Does it always make sense?… - [Snapshots in Event Sourcing](https://event-driven.io/en/snapshots-in-event-sourcing/): One of the great benefits of Event Sourcing is that you don't lose any business data. Each business operation ends with a new event appended to the event store.… - [Why are senior devs afraid to code?](https://event-driven.io/en/why_are_senior_devs_afraid_to_code/): The job interview is a stressful situation, usually for both parties. Some time ago, I had to recruit senior developers. I had the idea to ask a set of elementary questions.… - [How to create a custom GitHub Action?](https://event-driven.io/en/how_to_create_a_custom_github_action/): As you may know, I'm a fan of documentation. I wrote a few practical tips on this topic on the blog: "How to create projections of events for nested object structures?", "Architect Manifesto", "How to enhance and… - [Memoization, a useful pattern for quick optimization](https://event-driven.io/en/memoization_a_useful_pattern_for_quick_optimisation/): Today I would like to show you a simple programming pattern that can be useful for quick code optimization. This pattern is called Memoization.… - [How using events helps in a teams' autonomy](https://event-driven.io/en/how_using_events_help_in_teams_autonomy/): Autonomy is the Holy Grail for the management of multiple teams. At least that's how it's perceived; it's not easy to get the right balance.… - [How to enhance and configure your site search with Algolia?](https://event-driven.io/en/how_to_configure_algolia_for_your_site_search/): Some time ago, I wrote on how to create documentation without the pain (read it here). Documentation is something that has been one of the main tasks since I joined Event Store.… - [Events should be as small as possible, right?](https://event-driven.io/en/events_should_be_as_small_as_possible/): TV size? The bigger, the better. Debt amount? Opposite. It's hard to find the right size that suits all. How big should the event be? What amount of information should it contain?… - [How to create projections of events for nested object structures?](https://event-driven.io/en/how_to_create_projections_of_events_for_nested_object_structures/): Did you ever feel so encouraged so much that you immediately thought, "This is great, let's do it!". I'm sure you did. I'm also sure that few times you got backslash immediately after facing the more advanced scenario.… - [How to get started with Open Source?](https://event-driven.io/en/how_to_start_with_open_source/): As you may know, I'm an active Open Source contributor. Since December 2020, I'm working full-time on the Open Source project EventStoreDB.… - [How to successfully do documentation without a maintenance burden?](https://event-driven.io/en/how_to_successfully_do_documentation_without_maintenance_burden/): Developers like to complain about the lack of documentation. They complain even more when they have to write it. No programmer wants to do this - neither do I! Rarely, projects manage to keep the documentation up to… - [How money in Cloud impacts Architectural decisions?](https://event-driven.io/en/how_money_in_cloud_impacts_architectural_decisions/): It's intriguing how our perspective on software development changed in the last few years. We transformed from the on-premise age to the cloud era. Cloud is no longer a "buzz word".… - [Can command return a value?](https://event-driven.io/en/can_command_return_a_value/): Last week I busted common myths and explained facts about CQRS. Today I'll continue my effort. I tackle one of the most common questions about CQRS: "Can command return a value?".… - [CQRS facts and myths explained](https://event-driven.io/en/cqrs_facts_and_myths_explained/): I'm sure that you know a lot of Urban Legends. They usually start with "hey, my friend's cousin saw that..." or "you know, I've read such stuff on the Internet...". Everyone has the right to have an opinion.… - [Why Partial\ is an extremely useful TypeScript feature?](https://event-driven.io/en/partial_typescript/): If TypeScript were a friend of mine on Facebook, then I'd mark our relation as complicated. It's a history of love & hate, or rather hate & appreciation. I was a TypeScript hater.… - [How to set up a test matrix in XUnit?](https://event-driven.io/en/how_to_setup_a_test_matrix_in_xunit/): Each country has the go-to place for hiding from daily struggles. In Poland, we have Bieszczady. It's a mountain range that's also the wildest part of our country.… - [What's the difference between a command and an event?](https://event-driven.io/en/whats_the_difference_between_event_and_command/): What's the difference between a command and an event? The answer seems apparent, but let's see if it's straightforward. The command represents the intention. It targets a specific audience.… - [Saga and Process Manager - distributed processes in practice](https://event-driven.io/en/saga_process_manager_distributed_transactions/): Learn how Sagas and Process Managers coordinate distributed business processes without relying on distributed transactions. - [What if I told you that Relational Databases are in fact Event Stores?](https://event-driven.io/en/relational_databases_are_event_stores/): Are you one of those people saying that Event Sourcing is detached from reality? Do you think that you don't need such extravagance, as you have relational databases? Why go wild?… - [What texting your Ex has to do with Event-Driven Design?](https://event-driven.io/en/what_texting_ex_has_to_do_with_event_driven_design/): We sometimes feel melancholic, blue and a bit messy. When we enhance those feelings with "gummy berry juice" then various dubious ideas come to our minds. We grab the phone, we bash out a few brilliant sentences.… - [Sociological aspects of Microservices](https://event-driven.io/en/sociological_aspects_of_microservices/): Last week, I started writing about the topic of cutting systems into microservices (read more here). I was sceptical about the frequent technical motivations associated with them.… - [How (not) to cut microservices](https://event-driven.io/en/how_to_cut_microservices/): Today, I'm holding a keyboard in one hand and scissors in the other. What do I need these scissors for? According to the post title, I would like to talk about cutting (micro) services.… - [Bring me problems, not solutions!](https://event-driven.io/en/bring_me_problems_not_solutions/): "Bring me solutions, not problems!" I've heard this sentence multiple times from Business and management. You've heard it too, haven't you?… - [Outbox, Inbox patterns and delivery guarantees explained](https://event-driven.io/en/outbox_inbox_patterns_and_delivery_guarantees_explained/): Understand at-most-once, at-least-once, and exactly-once semantics, plus how Outbox and Inbox patterns support reliable messaging. - [How to (not) do the events versioning?](https://event-driven.io/en/how_to_do_event_versioning/): Developers that are not running a system in production might call themselves lucky. They can live in their perfect world. It is a world where there are no problems; everything is black and white.… - [Optimistic concurrency for pessimistic times](https://event-driven.io/en/optimistic_concurrency_for_pessimistic_times/): Apparently, one of the worst things you can wish someone is "may you live in interesting times". In these interesting times of ours, I wanted to write something to cheer you up, something optimistic.… - [Why a bank account is not the best example of Event Sourcing?](https://event-driven.io/en/bank_account_event_sourcing/): While explaining the Event Sourcing, bank account balance calculation is a common starting point. I claim that even though it sounds right, then it's not the best example to show at first.… - [Revolution now!](https://event-driven.io/en/revolution_now/): Did you ever get an offer that someone will pay you for what you are currently doing as a hobby? What would be your decision if that would mean leaving the project that you liked?… - [Architect Manifesto](https://event-driven.io/en/architect_manifesto/): "Architects are not needed anymore. Those days are gone!" "We're agile - we're not doing waterfall, so we're not designing upfront." "We have autonomous teams that drive their design." "We have DevOps team." Have you… - [Borys had the best dribbling](https://event-driven.io/en/borys_najlepiej_dryblowal/): Borys had the best dribbling, Cybor bent it like Beckham, there were a few little kids who could pull off 200 keepie-uppies. My class 5B always gave 5A a hiding after a tough match.… ## Polish articles - [Jak zacząć z Open Source?](https://event-driven.io/pl/jak_zaczac_z_open_source/): Cześć! Zaczyna się HactoberFest, więc kiedy jak nie teraz zacząć swoją przygodę z Open Source? Jak pewnie wiesz działam trochę w tym temacie.… - [Relacja z Domain Driven Design Europe 2020 – Event Sourcing](https://event-driven.io/pl/relacja_z_doman_driven_design_europe_2020/): Ten wpis będzie z tych dłuższych. Zrób sobie więc kawkę, wstąp do toalety, zrób kanapki na drogę, usiądź wygodnie na kanapie, uzbrój się w cierpliwość i czytaj dalej – zapraszam! Człowiek latami szuka Złotego Graala,… - [Źródła otwartości](https://event-driven.io/pl/zrodla_otwartosci/): 6 lipca bieżącego roku Jarek Pałka napisał niewinną wiadomość na Twitterze, że chętnie da szansę wystąpienia na konferencji "nowej twarzy", napisał że chętnie udzieli mentoring i pomoże w poskładaniu tematu oraz… - [Mężczyzna w IT](https://event-driven.io/pl/mezczyzna_w_it/): Dlaczego mężczyźni nie mają cellulitu? O co chodzi ze świnką morską? Gąbka z kokardką na dzień kobiet. Przecież ja tak nie myślę, to przeżytek, neandertalczykiem nie jestem. Szanuję kobiety. Przepuszczam w drzwiach.… - [O tym, co gra na gitarze może dać programiście](https://event-driven.io/pl/o_tym_co_gra_na_gitarze_moze_dac_programiscie/): Pierwszy raz nie zostałem muzykiem, gdy wzięty przez Babcię do szkoły muzycznej, powiedziałem stanowczo, że nie zamierzam śpiewać i powtarzać zagranych na pianinie rzeczy.… - [Pogłoski o mojej śmierci są mocno przesadzone, czyli co u mnie słychać](https://event-driven.io/pl/pogloski_o_mojej_smierci_sa_mocno_przesadzone_czyli_co_u_mnie_slychac/): No cóż. Ekhm. No tak. W zasadzie to i dziwne i trochę straszne, że zaczynając wpisy na blogu chcę przepraszać. Róż na policzkach. Te sprawy. Lubię pisać, lubię gadać, ale rzadko piszę i coraz rzadziej gadam.… - [Metallica skończyła się na Kill ‘Em All, a ja idę w Open Source'y](https://event-driven.io/pl/metallica_skonczyla_sie_na_kill_em_all_a_ja_ide_w_open_sourcey/): Zapuść proszę sobie ten utwór w trakcie czytania. Wczujesz się lepiej w klimacik. Zapewniam. Niektóre zespoły po kilku płytach powinny zmieniać swoje nazwy. Czy młody Chris Martin polubiłby starszego siebie?… - [Old man yells at cloud, czyli rzecz o komunikacji](https://event-driven.io/pl/old_man_yells_at_cloud_czyli_rzecz_o_komunikacji/): No i koniec lata, zimno, mokro i w ogóle poniedziałek. Jeszcze 4 dni do weekendu, i 10 miesięcy do lata. Żyć się nie chce. Pokrzyczeć zawsze można. Choćby na chmury. Zawsze to człowiek się chociaż wygada.… - [Moja nierelacja z WROC#](https://event-driven.io/pl/moja_nierelacja_z_wrocsharp/): Nie bywam na konferencjach tak często jakbym chciał. Dlaczego? Myślę, że moim problemem jest nonkonformizm, przesadny indywidualizm. Będąc na konferencji trzeba się socjalizować.… - [Nauka uczenia (się)](https://event-driven.io/pl/nauka_uczenia_sie/): Człowiek uczy się całe życie. Słyszymy, powtarzamy ten truizm. Czasem jest to pochwała, najczęściej pocieszenie. Wiedza, mądrość, inteligencja, czy to synonimy? Na studiach uczymy się czy studiujemy?… - [Cierpienia niemłodego bloggera – czyli próbuję napisać tekst o wczytywaniu komponentów w Knockout.JS na podstawie konwencji nazewniczej. Wymyślając przy okazji najdłuższy wpis w historii tego bloga. Doh! -\_-](https://event-driven.io/pl/cierpienia_niemlodego_bloggera/): Życie bloggera to nie jest bułka z szynką. To nie prosta sprawa. Co prawda pomysły same wpadają do głowy. Idzie człowiek ulicą, drepcze tak sobie drepcze i nagle bęc, nagle bum! Albo koduje sobie taki, wymyśla… - [What really grind my gears – IIIIIIIIIIIIIIIIF!](https://event-driven.io/pl/what_really_grind_my_gears_if/): Jestem spokojnym człowiekiem, niespotykanie spokojnym. Ale… Jestem Oskar, z Polski. Miejsca urodzenia nie przeskoczę. Natura, historia, zwyczaje, pierogi, kierpce, Szopen wieczorową porą. I irytacja. Rosnąca irytacja.… - [Englishman in New York, czyli jak .NETowiec może uwić sobie gniazdko w świecie MSSQL](https://event-driven.io/pl/englishman_in_new_york_czyli_net_w_mssql/): Wieczór, herbata, ciepłe papcie, nie za twardy, nie za miękki narożnik, na którym wyciągasz swoje zmęczone nogi. Gdzieś w tle leniwie snuje się muzyczka plum plum plum… Cieplutko, mięciutko, strefa komfortu.… - [SQLowa ciekawostka – Uważaj na Exists kolego](https://event-driven.io/pl/sqlowa_ciekawostka_uwazaj_na_exists/): Tym razem, po serii nostalgiczno-branżowo-przemyśleniowych wpisów, będzie krótko i technicznie. Chciałbym się przed wami popisać swoją niewiedzą.… - [Borys najlepiej dryblował](https://event-driven.io/pl/borys_najlepiej_dryblowal/): Borys najlepiej dryblował, Cybor kręcił najlepsze rogale, było kilku kajtków, robiących 200 kapek. Moja piąta B, zawsze bo ciężkim meczu dokopywała piątej A. Od jakiegoś czasu graliśmy już tylko "na nowe".… - [Na temat branży](https://event-driven.io/pl/na_temat_branzy/): Naszym programistycznym światkiem wstrząsnął ten oto wpis: http://natemat.pl/105597,it-arystokracja. Artykuł jak artykuł, nieco grafomański, nieco tendencyjny, ale w gruncie rzeczy nic wielkiego.… - [Refleksyjnie plus pierwszy w historii Vlog – Podstawy programowania w Office 2013](https://event-driven.io/pl/refleksyjnie_plus_pierwszy_w_historii_vlog/): Heh. To już ponad 1,5 roku od poprzedniego wpisu. Gdzieś w między czasie uleciał trochu wolny czas, trochu zapał. Tak to już jest.… - [Prezent od Microsoft – Darmowa książka o programowaniu w Windows 8](https://event-driven.io/pl/darmowa_ksiazka_o_windows_8/): Microsoft konsekwentnie kontynuuje taktykę ściągania nie .NETowych programistów – udostępnił darmową książkę w ramach Microsoft Press: "Programming Windows 8 Apps with HTML, CSS, and JavaScript".… - [Serializacja dla .NET 4.5 oraz Windows Runtime przy pomocy Sharpserializer](https://event-driven.io/pl/serializacja_dla_net_45_oraz_windows/): Trochę mnie nie było, dawno już nie pisałem – ten post będzie dla mnie nietypowy – krótki. Mam nadzieję, że to będzie jego zaleta. W swoim projekcie-po-godzinach do serializacji danych używam biblioteki SharpSerializer.… - [Jak z kilku dllek zrobić jedną, czyli modularność przy pomocy ILMerge](https://event-driven.io/pl/jak_z_kilku_dllek_zrobic_jedna_illmerge/): Wstęp Pracuję aktualnie nad strukturą pewnego projektu. Ideą, która przyświeca przy jej tworzeniu jest to, żeby była jak najbardziej modularna – tak by składała się z niezależnych, niepowiązanych ze sobą podaplikacji.… - [WrocNet – Team Foundation Server to nie SVN – Materiały](https://event-driven.io/pl/wrocnet_team_foundation_server_to_nie_svn/): Przedwczoraj (środa 21.03) debiutowałem w roli "wykładowcy" na spotkaniu Wrocławskiej grupy .NET. Zaprezentowałem tam rozwinięcie moich wpisów związanych z połączeniem SCRUM z Team Foundation Server.… - [Multiplatforomowe aplikacje w .NET, Silverlight i Windows Phone Cz.3 – Konfiguracja komunikacji socketami](https://event-driven.io/pl/multiplatforomowe_aplikacje_w_net_03/): Wstęp W poprzednich dwóch wpisach, przedstawiłem ogólne zasady tworzenia aplikacji multiplatformowych, pokazałem jak można zapisywać i odczytywać dane z socketów. Oparłem się przy tym mocno na przykładzie Johna Papa.… - [Multiplatforomowe aplikacje w .NET, Silverlight i Windows Phone Cz.2 – Wstęp do komunikacji socketami](https://event-driven.io/pl/multiplatforomowe_aplikacje_w_net_02/): Wstęp W poprzednim wpisie przedstawiłem wstęp oraz kilka problemów, które napotykamy przy rozpoczęciu zabawy z aplikacji wieloplatformowych.… - [Multiplatforomowe aplikacje w .NET, Silverlight i Windows Phone Cz.1 – Współdzielenie klas](https://event-driven.io/pl/multiplatforomowe_aplikacje_w_net_01/): Wstęp W kilku najbliższych wpisach postaram się przybliżyć tematykę tworzenia aplikacji multiplatformowych. Środowisko .NET dostarcza nam rozwiązań, które pozwalają tworzyć zarówno aplikacje okienkowe (WinForms, WPF),… - [Scrum i Team Foundation Server cz.6](https://event-driven.io/pl/scrum_i_team_foundation_server_06/): W kilku ostatnich wpisach przedstawiłem czym jest metodyka Scrum, po co i jak ją stosować przy użyciu Team Foundation Server. W teorii moglibyśmy już rozpocząć projekt i z powodzeniem go prowadzić.… - [Scrum i Team Foundation Server cz.5 – Continuous Integration](https://event-driven.io/pl/scrum_i_team_foundation_server_05/): 1. Trochę teorii Każdy z nas w trakcie zawodowej kariery miał (nie)przyjemność pracować z systemami kontroli wersji. Codziennie w trakcie swojej pracy wrzucamy, pobieramy z nich pliki, rozwiązujemy konflikty.… - [Scrum i Team Foundation Server cz.4 – Tworzymy projekt](https://event-driven.io/pl/scrum_i_team_foundation_server_04/): W poprzednich wpisach opisałem ogólne zasady metodyki Scrum, przedstawiłem sposób instalacji i konfiguracji – TFS. W tym wpisie pokażę podstawowe zasady jak połączyć teorię z praktyką.… - [Scrum i Team Foundation Server cz.3 – Wystawiamy się na zewnątrz](https://event-driven.io/pl/scrum_i_team_foundation_server_03/): Tym razem wpis będzie poświęcony dodatkowej czynności, nie związanej bezpośrednio ze Scrum albo TFS. Pokażę prosty sposób w jaki można udostępnić swój serwer nie posiadając stałego łącza IP, łącząc się przez router.… - [Scrum i Team Foundation Server cz.2 – Instalacja TFS](https://event-driven.io/pl/scrum_i_team_foundation_server_02/): Tak jak zapowiedziałem w poprzednim wpisie, część druga mojej opowieści o Scrum i TFS będzie opisywała instalację oraz wstępną konfigurację Team Foundation Server.… - [Scrum i Team Foundation Server cz.1 - wprowadzenie do Scrum](https://event-driven.io/pl/scrum_i_team_foundation_server_01/): 1. Wstęp W kilku najbliższych postach postaram się przybliżyć ideę zarządzania projektem w metodyce Scrum przy pomocy Team Foundation Server (TFS). W tym poście opiszę zasady i cechy jakimi charakteryzuje się SCRUM.… - [Ciekawostki - Equals](https://event-driven.io/pl/ciekawostki_equals/): Dzisiaj będę się chwalił się swoją niewiedzą. Kilka dni temu kolega zadał mi pytanie, którym skutecznie mnie zagiął. Ponieważ uważam, że głupotą nie jest brak wiedzy co raczej udawanie, że się ją posiada, czym prędzej… - [Błąd "Cannot update a parent row a foreign key constraint fails" przy pobieraniu rekordów w NHibernate](https://event-driven.io/pl/blad_cannot_update_przy_pobieraniu/): Dzisiaj kolejny krótki wpis, ponownie dotyczący NHibernate'a. Jak pewnie zdążyliście zauważyć jest to coś co ostatnio sprawia mi najwięcej problemów.… - [Jak odblokować workspace w TFS](https://event-driven.io/pl/jak_odblokowac_workspace_w_tfs/): Dzisiaj kolejny przykład z życia wzięty, krótszy ale miejmy nadzieję, przydatny. Zmieniłem na swoim komputerze nazwę grupy roboczej, do której należę.… - [Wielokrotny join we FluentNHibernate](https://event-driven.io/pl/wielokrotny_join_we_fluentnhibernate/): Wczoraj w pracy natknąłem się na, na pierwszy rzut oka, banalny problem, który jak to często bywa po drugim rzucie okazał się trudniejszy niż zakładałem.… - [Inauguracja](https://event-driven.io/pl/inauguracja/): Witam! Jest to mój pierwszy wpis na blogu. Wypadało by przecież jakoś się przywitać i oficjalnie zainaugurować działalność. Zacznijmy od najważniejszego – o czym będę pisał, a w zasadzie o czym bym chciał pisać.… ## Feeds and discovery - [XML sitemap](https://event-driven.io/sitemap/sitemap-index.xml) - [English RSS feed](https://event-driven.io/rss.xml)