Architecture
Największy tag na blogu. Wszystkie teksty są po angielsku, wiele z nich to wydania Architecture Weekly. Część jest praktyczna: wzorzec outbox, rozproszone blokady, wnętrze Kafki czy pula połączeń w PostgreSQL. Inne pomagają podejmować decyzje: jak podzielić kod, monolit czy mikroserwisy, dług techniczny jako kompromis i co mierzyć, zanim zbudujesz funkcjonalność. Na początek zajrzyj do przewodników, które grupują wiele z nich tematycznie.
108 artykułów
![Sharing is (not always) caring. PgBouncer pooling modes in practice]()
Sharing is (not always) caring. PgBouncer pooling modes in practice
The sad thing about programming is that eventually we reach production; the closer we get, the nastier things get. Some people start asking…
![Open Source, a relic, a charity or still the thing?]()
Open Source, a relic, a charity or still the thing?
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.…
![We all wanted to be Netflix, who do we want to be next?]()
We all wanted to be Netflix, who do we want to be next?
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…
![Avoid Duke Nukem Forever Mode]()
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 1…
![Fractal Architecture, Cognitive Load, Vertical Slices and other terms that do(n't) fit your head]()
Fractal Architecture, Cognitive Load, Vertical Slices and other terms that do(n't) fit your head
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…
![Vertical slices, their ownership and external dependencies]()
Vertical slices, their ownership and external 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…
![Addition by subtraction in Software Design]()
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. The…
![You can fork a package, but can you own it?]()
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 1…
![On mashing up modelling techniques for fun and profit]()
On mashing up modelling techniques for fun and profit
Many people believe there should be one, and only one, way to model software. I think differently, I like to mix different techniques. For…
![Don't overestimate domain expertise]()
Don't overestimate domain expertise
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…
![Vibing, Harness and OODA loop]()
Vibing, Harness and OODA loop
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…
![The one where Oskar explains Example Mapping]()
The one where Oskar explains 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…
![Interactive Rubber Ducking with GenAI]()
Interactive Rubber Ducking with GenAI
You may already know that I’m a GenAI sceptic. And a general sceptic. Do you know that scepticism comes from the Greek σκέπτομαι (skeptomai…
![The End of Coding? Wrong Question]()
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. It…
![Parse, Don't Guess]()
Parse, Don't 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…
![How I cheated on transactions. Or how to make tradeoffs based on my Cloudflare D1 support]()
How I cheated on transactions. Or how to make tradeoffs based on my Cloudflare D1 support
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…
![Architecture Weekly is 5 years old! 🎉]()
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…
![On Messaging and Distributed Systems with Ian Cooper]()
On Messaging and Distributed Systems with Ian Cooper
Welcome to the new week! New week, new video. Last week, you got my talk about event-driven modelling anti-patterns. A significant portion…
![New Recording on Event modelling anti-patterns from DDDEU]()
New Recording on Event modelling anti-patterns from DDDEU
Welcome to the new week! I’m always saying that with Event-Driven Architecture, the modelling effort pays back. That goes both ways: the…
![Sneaky Code Bites Back]()
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…
![PostgreSQL partitioning, logical replication and other Q&A about PostgreSQL Superpowers]()
PostgreSQL partitioning, logical replication and other Q&A about PostgreSQL Superpowers
Welcome to the new week! Last Tuesday, I did a new version of the “PostgreSQL Superpowers” webinar, thanks to the invitation from the good…
![Just use SQL they say... Or how accidental complexity piles on]()
Just use SQL they say... Or how accidental complexity piles on
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…
![My thoughts on Vertical Slices, CQRS, Semantic Diffusion and other fancy words]()
My thoughts on Vertical Slices, CQRS, Semantic Diffusion and other fancy words
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…
![Compilers Aren't Just for Programming Languages]()
Compilers Aren't Just for Programming Languages
Welcome to the new week! What does this streaming pipeline have to do with a programming language compiler? At first glance? Nothing! This…
![Requiem for a 10x Engineer Dream]()
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…
![Why Open Source Isn't Always Fair. Dual licenses explained]()
Why Open Source Isn't Always Fair. Dual licenses explained
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…
![Workflow Engine design proposal, tell me your thoughts]()
Workflow Engine design proposal, tell me your thoughts
Welcome to the new week! As you may know, I’m building Emmett - a library/framework aiming to make building business-focused apps smoother…
![The Order of Things: Why You Can't Have Both Speed and Ordering in Distributed Systems]()
The Order of Things: Why You Can't Have Both Speed and Ordering in Distributed Systems
Picture this scenario: An online retailer runs a flash sale with 500 units of a hot product. Within minutes, they’ve processed 742 orders…
![Dealing with Eventual Consistency, and Causal Consistency using Predictable Identifiers]()
Dealing with Eventual Consistency, and Causal Consistency using Predictable Identifiers
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]()
Predictable Identifiers: Enabling True Module Autonomy in Distributed Systems
In distributed systems, we face a fundamental tension between module communication and module autonomy. Our modules need to exchange…
![Start Alone, Then Together: Why Software Modelling Needs Solitary Brainstorming]()
Start Alone, Then Together: Why Software Modelling Needs Solitary Brainstorming
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…
![Secondary Indexes and the Specialized Storage Dilemma]()
Secondary Indexes and the Specialized Storage Dilemma
In 2016, the Kafka team faced a problem that illustrates a fundamental challenge in distributed systems design. Users kept asking: “How do I…
![Do we still need the QA role?]()
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…
![Killer metrics, or why you should know upfront when to remove the new feature]()
Killer metrics, or why you should know upfront when to remove the new feature
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…
![Residuality Theory: A Rebellious Take on Building Systems That Actually Survive]()
Residuality Theory: A Rebellious Take on Building Systems That Actually Survive
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…
![The Underestimated Power of Hot Spots and Notes in EventStorming]()
The Underestimated Power of Hot Spots and Notes in EventStorming
I’ve been facilitating the EventStorming sessions for years now, and something keeps catching my attention. While teams naturally focus on…
![Hints on getting to speak at conferences]()
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…
![Why We Should Learn Multiple Programming Languages]()
Why We Should Learn Multiple Programming Languages
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…
![Business Won't Let Me and other lies we tell to ourselves]()
Business Won't Let Me and other lies we tell to ourselves
“Business won’t let us implement proper telemetry.” “We can’t write tests because there’s no time.” “The manager won’t approve refactoring…
![PostgreSQL JSONB - Powerful Storage for Semi-Structured Data]()
PostgreSQL JSONB - Powerful Storage for Semi-Structured Data
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…
![Monolith-First - are you sure?]()
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…
![What we don't know that we don't know]()
What we don't know that we don't 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…
![We are no superhumans]()
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…
![TypeScript Migrates to Go: What's Really Behind That 10x Performance Claim?]()
TypeScript Migrates to Go: What's Really Behind That 10x Performance Claim?
Welcome to the new week! Almost two weeks ago, Microsoft announced they’re porting the TypeScript compiler from JavaScript to Go, promising…
![Whole Architecture Weekly content is free now!]()
Whole Architecture Weekly content is free now!
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…
![Practical Introduction to Event Sourcing with Emmett]()
Practical Introduction to Event Sourcing with Emmett
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…
![So you want to break down monolith? Read that first.]()
So you want to break down monolith? Read that first.
I’ve been involved in several projects that tried to break down a legacy monolith. Some were successful, but most were not. Even those…
![How does Kafka know what was the last message it processed? Deep dive into Offset Tracking]()
How does Kafka know what was the last message it processed? Deep dive into Offset Tracking
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…
![Documenting Event-Driven Architecture with EventCatalog and David Boyne]()
Documenting Event-Driven Architecture with EventCatalog and David Boyne
Welcome to the new week! “How to document systems build with Event-Driven Architecture?” and “How to keep our understanding about evolving…
![Defining Your Paranoia Level: Navigating Change Without the Overkill]()
Defining Your Paranoia Level: Navigating Change Without the Overkill
Welcome to the new week! The biggest challenge in understanding new technology or practices isn’t the time needed to learn them. A much…
![React Query: A solution for Frontend State Management challenges? With Tomasz Ducin]()
React Query: A solution for Frontend State Management challenges? With Tomasz Ducin
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…
![Understanding Kafka's Consumer Protocol: A Deep Dive into How Consumers Talk to Brokers]()
Understanding Kafka's Consumer Protocol: A Deep Dive into How Consumers Talk to Brokers
Last week, we explored how Kafka consumers work in consumer groups and how rebalancing ensures partition distribution. That sparked an…
![Kafka Consumers: Under the Hood of Message Processing]()
Kafka Consumers: Under the Hood of Message Processing
Last week, we discussed how Kafka producers work and how Kafka stores data. We discussed details like fsync, crash resiliency and why it’s…
![How Kafka Producer Works internally]()
How Kafka Producer Works internally
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…
![Thoughts on Platforms, Core Teams, DORA Report and all that jazz]()
Thoughts on Platforms, Core Teams, DORA Report and all that jazz
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…
![Locks, Queues and business workflows processing]()
Locks, Queues and business workflows processing
Last week, we discussed Distributed Locking. Today, we’ll continue with locking but doing it differently: with a full backflip. We’ll…
![Distributed Locking: A Practical Guide]()
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? Lucky you…
![On getting the meaningful discussions, and why that's important]()
On getting the meaningful discussions, and why that's important
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…
![The Write-Ahead Log: A Foundation for Reliability in Databases and Distributed systems]()
The Write-Ahead Log: A Foundation for Reliability in Databases and Distributed systems
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…
![Applying Observability: From Strategy to Practice with Hazel Weakly]()
Applying Observability: From Strategy to Practice with Hazel Weakly
Have you considered applying observability but struggled to match the strategy with the tooling? Or maybe you were lost on how to do it? I…
![Deduplication in Distributed Systems: Myths, Realities, and Practical Solutions]()
Deduplication in Distributed Systems: Myths, Realities, and Practical Solutions
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…
![Ordering, Grouping and Consistency in Messaging systems]()
Ordering, Grouping and Consistency in Messaging systems
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…
![Building your own Ledger Database]()
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…
![Tech Debt doesn't exist, but trade-offs do]()
Tech Debt doesn't exist, but trade-offs do
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…
![Frontent Architecture, Backend Architecture or just Architecture? With Tomasz Ducin]()
Frontent Architecture, Backend Architecture or just Architecture? With Tomasz Ducin
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…
![Don't Oversell Ideas: Trunk-Based Development Edition]()
Don't Oversell Ideas: Trunk-Based Development Edition
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…
![Why to measure and make our system observable? How to reason on chaotic world]()
Why to measure and make our system observable? How to reason on chaotic world
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…
![Webinar #23 - Gojko Adzic on designing product development experiments with Lizard Optimization]()
Webinar #23 - Gojko Adzic on designing product development experiments with Lizard Optimization
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…
![Webinar #22 - On Performance Testing with Jarosław Pałka]()
Webinar #22 - On Performance Testing with Jarosław Pałka
We touched upon performance in the last few editions with: intro to benchmarking in Talk is cheap, show me the numbers! Benchmarking and…
![Making your system observability predictable]()
Making your system observability predictable
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…
![When Logs and metrics are not enough: Discovering Modern Observability]()
When Logs and metrics are not enough: Discovering Modern Observability
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…
![Show me the money! Practically navigating the Cloud Costs Complexity]()
Show me the money! Practically navigating the Cloud Costs Complexity
In my last article, I explored how Amazon S3’s new conditional writes feature can be used to implement a strongly consistent event store. I…
![Using S3 but not the way you expected. S3 as strongly consistent event store]()
Using S3 but not the way you expected. S3 as strongly consistent event store
Welcome to the new week! Hype is strong in our industry, but the most powerful news usually comes surprisingly silent. That’s what happened…
![My Architecture Drivers]()
My 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…
![Webinar #21 - Michael Drogalis: Building the product on your own terms]()
Webinar #21 - Michael Drogalis: Building the product on your own terms
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…
![Architecture Weekly #192 - Talk is cheap, show me the numbers! Benchmarking and beyond!]()
Architecture Weekly #192 - Talk is cheap, show me the numbers! Benchmarking and beyond!
Boy, it’s the fourth episode of the refreshed format, time flies! We started by learning the importance of connection pooling, discussing…
![Is It Production Ready?]()
Is It Production Ready?
Welcome to the new week! Why is connection pooling important? How can queuing, backpressure, and single-writer patterns help? If you don’t…
![Architecture Weekly #190 - Queuing, Backpressure, Single Writer and other useful patterns for managing concurrency]()
Architecture Weekly #190 - Queuing, Backpressure, Single Writer and other useful patterns for managing concurrency
Welcome to the new week! In the last edition, we explored why connection pooling is crucial for using databases efficiently. Now, let’s take…
![Mastering Database Connection Pooling]()
Mastering Database Connection Pooling
Welcome to the new week! Efficiently managing database connections is crucial for any application that handles multiple requests. Without…
![Not all issues are complex, some are complicated. Here's how to deal with them]()
Not all issues are complex, some are complicated. Here's how to deal with them
Cynefin’s framework states that we have four types of decision-making contexts (or domains): clear, complicated, complex, and chaotic. They…
![What Dune can tell us about setting our goals]()
What Dune can tell us about setting our 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…
![How to deal with privacy and GDPR in Event-Driven systems]()
How to deal with privacy and GDPR in Event-Driven systems
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…
![GDPR for busy developers]()
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…
![In the defence of Object-Relational Mappers]()
In the defence of Object-Relational Mappers
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…
![Internal and external events, or how to design event-driven API]()
Internal and external events, or how to design event-driven API
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…
![How to design software architecture pragmatically]()
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…
![Is the Strategy Pattern an ultimate solution for low coupling?]()
Is the 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…
![How to scale out Marten]()
How to scale out Marten
If you are already a reader, you probably know already that I’m not so fond of the Will it scale? question. I believe that, too often, it’s…
![Vertical Slices in practice]()
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…
![Follow the money to get a better design]()
Follow the money to get a better design
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…
![Removability over Maintainability]()
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…
![Don't let Event-Driven Architecture buzzwords fool you]()
Don't 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…
![Testing asynchronous processes with a little help from .NET Channels]()
Testing asynchronous processes with a little help from .NET 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…
![How to get all messages through Postgres logical replication]()
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…
![How events can help in making the state-based approach efficient]()
How events can help in making the 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…
![How Postgres sequences issues can impact your messaging guarantees]()
How Postgres sequences issues can impact your messaging guarantees
Big picture descriptions and overall explanations are great. They help us to understand the foundations of new ideas and then find the place…
![Writing and testing business logic in F#]()
Writing and testing business logic in F#
My road to functional programming was pretty long. I started with structural programming in C++ and then rebranded into an Object-Oriented…
![Push-based Outbox Pattern with Postgres Logical Replication]()
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…
![What do the British writer and his fence have to do with Software Architecture?]()
What do the British writer and his fence have to do with 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…
![Why are we afraid of our decisions?]()
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…
![Event-driven distributed processes by example]()
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…
![Immutable Value Objects are simpler and more useful than you think!]()
Immutable Value Objects are simpler and more useful than you think!
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…
![How to quickly scale a legacy monolith?]()
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…
![How to slice the codebase effectively?]()
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…
![Will it scale... down?]()
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…
![Generic does not mean Simple]()
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…
![Outbox, Inbox patterns and delivery guarantees explained]()
Outbox, Inbox patterns and delivery guarantees explained
Yesterday I was asked by Cezary about the transactional outbox pattern sample implementation. My answer was: https://twitter.com/oskar_at…
![Architect Manifesto]()
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…











































































































