Topic
Software Architecture
Pragmatic modelling and architecture guidance: understand the problem, expose assumptions, draw useful boundaries, and keep ownership explicit.
Recommended reading order
Read these in order to move from the foundations to practical trade-offs and production concerns.

The one where Oskar explains Example Mapping
2026-03-30One 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…
Parse, Don't Guess
2026-03-03Last 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…
On mashing up modelling techniques for fun and profit
2026-05-18Many people believe there should be one, and only one, way to model software. I think differently, I like to mix different techniques. For instance, I believe there’s a…
Vertical slices, their ownership and external dependencies
2026-08-10A 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? If I’ve split…
Addition by subtraction in Software Design
2026-07-06I 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 picture tells more than words…
More articles

Sharing is (not always) caring. PgBouncer pooling modes in practice.
2026-10-12The 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…
Open Source, a relic, a charity or still the thing?
2026-10-05A 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…
We all wanted to be Netflix, who do we want to be next?
2026-09-14I 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. Before I get…
Avoid Duke Nukem Forever Mode
2026-09-07How 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…
Fractal Architecture, Cognitive Load, Vertical Slices and other terms that do(n't) fit your head
2026-08-17I 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…
You can fork a package, but can you own it?
2026-06-08Fork 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. I’ve always said that…
Don't overestimate domain expertise
2026-05-11I 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
2026-04-26Hey, 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. If I could do so much during…
Interactive Rubber Ducking with GenAI
2026-03-16You 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…
The End of Coding? Wrong Question
2026-03-09Be 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’s intriguing that now they…
How I cheated on transactions. Or how to make tradeoffs based on my Cloudflare D1 support
2026-02-16We’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…
Architecture Weekly is 5 years old! 🎉
2025-12-29Welcome 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…
On Messaging and Distributed Systems with Ian Cooper
2025-10-13Welcome 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…
New Recording on Event modelling anti-patterns from DDDEU
2025-10-06Welcome 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…
Sneaky Code Bites Back
2025-09-22Welcome 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…
PostgreSQL partitioning, logical replication and other Q&A about PostgreSQL Superpowers
2025-09-15Welcome 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. It’s…
Just use SQL they say... Or how accidental complexity piles on
2025-09-08Welcome 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. In TypeScript, this…
My thoughts on Vertical Slices, CQRS, Semantic Diffusion and other fancy words
2025-08-25Welcome 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. I’ve…
Compilers Aren't Just for Programming Languages
2025-08-18Welcome 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…
Requiem for a 10x Engineer Dream
2025-08-11Welcome 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…
Why Open Source Isn't Always Fair. Dual licenses explained
2025-08-04Welcome 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…
Workflow Engine design proposal, tell me your thoughts
2025-07-28Welcome 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
2025-07-14Picture 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 -24…
Dealing with Eventual Consistency, and Causal Consistency using Predictable Identifiers
2025-07-07Users want to attach files and keep working. Systems need time to upload, store those files and link it to the specific process or entity. You have two choices: block the…
Predictable Identifiers: Enabling True Module Autonomy in Distributed Systems
2025-06-30In distributed systems, we face a fundamental tension between module communication and module autonomy. Our modules need to exchange information and coordinate actions…
Start Alone, Then Together: Why Software Modelling Needs Solitary Brainstorming
2025-06-23Watch 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…
Secondary Indexes and the Specialized Storage Dilemma
2025-06-16In 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…
Do we still need the QA role?
2025-06-09Welcome 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…
Killer metrics, or why you should know upfront when to remove the new feature
2025-06-02Welcome 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…
Residuality Theory: A Rebellious Take on Building Systems That Actually Survive
2025-05-26I 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…
The Underestimated Power of Hot Spots and Notes in EventStorming
2025-05-19I’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…
Hints on getting to speak at conferences
2025-05-12Occasionally, 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…
Why We Should Learn Multiple Programming Languages
2025-05-05In 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…
Business Won't Let Me and other lies we tell to ourselves
2025-04-28“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…
PostgreSQL JSONB - Powerful Storage for Semi-Structured Data
2025-04-21Object-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…
Monolith-First - are you sure?
2025-04-14Welcome 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…
What we don't know that we don't know
2025-04-07Welcome 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…
We are no superhumans
2025-03-31Welcome 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…
TypeScript Migrates to Go: What's Really Behind That 10x Performance Claim?
2025-03-24Welcome 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…
Whole Architecture Weekly content is free now!
2025-03-17Hi, 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…
Practical Introduction to Event Sourcing with Emmett
2025-03-10Titles 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…
So you want to break down monolith? Read that first.
2025-03-03I’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…
How does Kafka know what was the last message it processed? Deep dive into Offset Tracking
2025-02-24Let’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…
Documenting Event-Driven Architecture with EventCatalog and David Boyne
2025-02-17Welcome 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…
Defining Your Paranoia Level: Navigating Change Without the Overkill
2025-02-10Welcome 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…
React Query: A solution for Frontend State Management challenges? With Tomasz Ducin
2025-02-03Welcome 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…
Understanding Kafka's Consumer Protocol: A Deep Dive into How Consumers Talk to Brokers
2025-01-27Last week, we explored how Kafka consumers work in consumer groups and how rebalancing ensures partition distribution. That sparked an interesting question about how…
Kafka Consumers: Under the Hood of Message Processing
2025-01-20Last 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…
How Kafka Producer Works internally
2025-01-13Imagine 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…
Thoughts on Platforms, Core Teams, DORA Report and all that jazz
2025-01-06All 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…
Locks, Queues and business workflows processing
2024-12-30Last 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…
Distributed Locking: A Practical Guide
2024-12-23Was your data ever mysteriously overwritten? No? Think again. Have you noticed conflicting updates to the same data? Still nope? Lucky you! I had cases when my data…
On getting the meaningful discussions, and why that's important
2024-12-16Welcome 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…
The Write-Ahead Log: A Foundation for Reliability in Databases and Distributed systems
2024-12-07I 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. And I had random…
Applying Observability: From Strategy to Practice with Hazel Weakly
2024-12-02Have you considered applying observability but struggled to match the strategy with the tooling? Or maybe you were lost on how to do it? I had a great discussion with…
Deduplication in Distributed Systems: Myths, Realities, and Practical Solutions
2024-11-25Last 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…
Ordering, Grouping and Consistency in Messaging systems
2024-11-18We 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…
Building your own Ledger Database
2024-11-11Building 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? One member asked…
Tech Debt doesn't exist, but trade-offs do
2024-11-04Welcome 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…
Frontent Architecture, Backend Architecture or just Architecture? With Tomasz Ducin
2024-10-28Welcome 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…
Don't Oversell Ideas: Trunk-Based Development Edition
2024-10-21Welcome 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.”. Just like in the…
Why to measure and make our system observable? How to reason on chaotic world
2024-10-14Welcome 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…
Webinar #23 - Gojko Adzic on designing product development experiments with Lizard Optimization
2024-10-07Welcome 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…
Webinar #22 - On Performance Testing with Jarosław Pałka
2024-09-30We 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 your system observability predictable
2024-09-23Welcome 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…
When Logs and metrics are not enough: Discovering Modern Observability
2024-09-16It’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…
Show me the money! Practically navigating the Cloud Costs Complexity
2024-09-09In my last article, I explored how Amazon S3’s new conditional writes feature can be used to implement a strongly consistent event store. I think that this feature opens…
Using S3 but not the way you expected. S3 as strongly consistent event store
2024-09-02Welcome 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…
Webinar #21 - Michael Drogalis: Building the product on your own terms
2024-08-28Did 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…
Architecture Weekly #192 - Talk is cheap, show me the numbers! Benchmarking and beyond!
2024-08-26Boy, 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…
Is It Production Ready?
2024-08-19Welcome to the new week! Why is connection pooling important? How can queuing, backpressure, and single-writer patterns help? If you don’t know the answer, then go go go…
Architecture Weekly #190 - Queuing, Backpressure, Single Writer and other useful patterns for managing concurrency
2024-08-12Welcome to the new week! In the last edition, we explored why connection pooling is crucial for using databases efficiently. Now, let’s take a step further and perform a…
Mastering Database Connection Pooling
2024-08-05Welcome to the new week! Efficiently managing database connections is crucial for any application that handles multiple requests. Without proper connection management…
Event-driven distributed processes by example
2022-07-13Some time ago, I wrote the general rules on processing the event-driven services. check my article Saga and Process Manager - distributed processes in practice. It…