Open to Work: Senior Backend & Distributed Systems Engineer (Go / Python) View LinkedIn →

System Design

Technical Journal // System Design
Aug '26

Designing a Usage-Based Billing Pipeline for SaaS

A deep technical guide to designing a robust, provider-agnostic billing pipeline for usage-based SaaS. Covers subscription state machines, idempotent event processing, automated dunning logic, credit notes, and metered invoice generation with full SQL schemas, Mermaid diagrams, and Go snippets.

Jul '26

API Design for Backend Systems

A practical, opinionated guide to designing backend APIs. Covers request and response schema, offset and keyset pagination, BFF, server-driven UI, caching, versioning, naming, the new HTTP QUERY verb, WebSocket vs SSE, API security (auth headers, server-to-server auth, webhook receivers), and bulk data load APIs. Built around Relay, the same AI proxy system from the multi-tenant SaaS post, with REST and JSON as the running example and Go code throughout.

Jul '26

Designing a Distributed Rate Limiter with Redis

A full system design of a production rate limiter. Covers every major algorithm (token bucket, sliding window, leaky bucket, fixed window), their tradeoffs, how they break in a distributed system, how Redis fixes them, and how Stripe, Cloudflare, and API gateways actually deploy this in production.

Jul '26

How Multi-Tenant SaaS Actually Works

A complete system design of Relay, a multi-tenant AI API gateway. Covers multi-tenant database architecture (silo vs pool vs bridge), API key authentication, provider routing with failover, dual-layer rate limiting, token-based billing, response caching, row-level security, tenant provisioning, and observability. Full Postgres schemas, mermaid diagrams, and Go snippets included.

Apr '26

10 years of lorbic.com architecture

Reviewing the technical evolution of this blog over a decade: from managed platforms and dynamic backends to a custom, zero-dependency Hugo architecture.

Feb '26

Python Background Workers: Architecture, Queues, and Retry Strategies

Learn how to build production-ready Python background workers that scale under load. Covers worker pools, queue architecture, retry strategies, idempotency, and graceful shutdown.

Jan '26

OLTP vs OLAP - Why You Need Two Databases

"The database that runs your app cannot be the database that analyzes your app". It's a hard lesson learned at scale. Early on, Postgres does it all. But as you hit massive scale, your analytics queries start killing your login APIs. This post breaks down the physics of Row-oriented (Couchbase) vs Column-oriented (ClickHouse) databases, and how to bridge them using Change Data Capture (CDC) for a robust, lag-free architecture.