← All posts

Category

Architecture

14 posts

Dashboard showing the number of push notifications delivered over a month: 77.52k, illustrated by a daily histogram.

Push notifications: a distributed system in its own right

From template to device: how mobile push notifications actually work, their product and technical [...]

Visibly worn copy of the O'Reilly book "Distributed Systems with Node.js: Building Enterprise-Ready Backend Services" by Thomas Hunter II, resting on a dark background.

Production-ready: what an app lives after deployment

Our job doesn't stop at the commit. The pillars of an Enterprise-Ready application in production [...]

Enforcing a hexagonal architecture with code

Konsist, ArchUnit, eslint-plugin-boundaries: make a hexagonal architecture executable by automating [...]

Diagram of an optimistic update: a click moves the counter from 0 to 1 immediately, while the network request stays pending in the background.

The mishandled loading states that wreck your app's UX

Flicker, endless spinners: how to guarantee consistent loading states with spin-delay, optimistic [...]

Inversion of Control (IoC): the core concept and its use cases

A deep dive into Inversion of Control: its history, the Hollywood Principle, callbacks, framework [...]

The DataLoader pattern: solving N+1 in GraphQL

Discover the DataLoader pattern to solve the N+1 problem in GraphQL through batching and caching [...]

Understanding the N+1 problem with GraphQL

The N+1 problem explained in detail in the context of GraphQL: how a single initial query triggers [...]

Caching: invalidation and eviction, a cache's complexity

Understanding a cache's complexity: invalidation via TTL and eviction with the LRU, LFU and FIFO [...]

A caching story: where does a cache's speed come from?

How a cache speeds up your web apps: in-memory storage, data proximity (CDN), LRU/LFU algorithms [...]

Diagram of a private cache managed by the browser: two users query an API server that responds with Cache-Control: private, max-age=3600, each storing its own copy locally.

A caching story: speeding up a web app, simply

An intro to web caching: avoiding over-fetching with the HTTP Cache-Control header, private and [...]

Handling termination signals for graceful shutdown of containerized applications in production.

Running containerized apps in production: graceful shutdown

Why production containers need proper SIGTERM handling: graceful shutdown, the PID1 init problem [...]

Directed Acyclic Graphs (DAGs) and topological sort

Understanding DAGs: why cycles are a problem, how topological sort determines task execution order [...]

Dependency graphs: Nx, Rush, Bazel, docker-compose & CI/CD

Why dependency graphs sit at the heart of modern tooling: monorepo task orchestration, the Affected [...]

Implementing the Incremental/Affected build pattern with directed graphs in JavaScript.

Implementing the Incremental/Affected pattern

Build the Incremental/Affected pattern by hand: model a project as a directed graph, hash + cache [...]