Designing Systems Series

Software system design in practice: drawing boundaries, managing state, designing APIs and data contracts, handling overload, and distributed trade-offs.

34 min read

Designing A Key-Value Store

I’ve been asked once to design a key value store in an interview. It looks easy at first. Then it gets hard, fast. What makes it interesting is how ambiguous it is. I started us...

26 min read

Data as a Product is a Promise

Domaindriven design (DDD) has been around for quite a long time. In short, DDD focuses on domain to match domain requirements. One of the pillars of DDD is bounded context. A bo...

7 min read

Good APIs Age Slowly

I have noticed that APIs are a bit like abstractions in general. APIs that impress people quickly are very often the ones that cause the most trouble later. I do not mean this a...

7 min read

Compatibility Is a Feature

A system only reveals what it's made of when it starts changing. At first, they often look better than they are because the code is still new. The data is still fairly clean. Th...

9 min read

Message Brokers Are Modern Grids

While working on my book on , I keep noticing the same pattern. Some systems look simple while they belong to one team and become something else after everybody starts using the...

5 min read

You Cannot Fix What You Cannot See

I have been working on this data discovery tool for a while, and it keeps showing me how messy our systems really are. The idea behind it is simple. Crawl every database we have...

14 min read

Service Overload Strategies

Service overload happens a lot. If you haven't seen one, count yourself lucky. The first time I watched it take a system down, I realized how serious it’s to get the basics righ...

8 min read

You Know State Is NO Good

Every engineer learns this the hard way. You think the logic is solid, your tests are green, and your deployment goes smoothly. Looks all good, right? Then you have an outage. N...

17 min read

Why Over-Engineering Happens

If you’ve worked in software long enough, you’ve probably seen it: a CRUD app serving a handful of users, deployed on a Kubernetes cluster with half the CNCF landscape stitched...

8 min read

XA Transactions: A Simple Guide

In early days of computing, there was no need for distributed transactions, everything lived in one place. As number of applications increased, synchronization of the data becom...