The Blind Spot in Deploy Change Verification — Campaign Cache Incident Retrospective

The deploy was two days old, and the metrics had been calm the whole time. The moment we turned off the cache refresh batch, ad serving stopped. A retrospective on the missing verification of what a deploy actually changed.

November 27, 2024 · 3 min read

Envoy — When Static Reverse Proxies Meet Cloud-Native

Manual reload, static upstreams, weak L7 observability — four limits a static reverse proxy hits in a cloud-native environment, and the four mechanisms Envoy uses to address them.

July 10, 2024 · 5 min read

VPC for Backend Engineers

Isolation, routing, connectivity, security — VPC’s four axes pulled into one place, framed around the decisions backend engineers actually face.

June 17, 2024 · 10 min read

Three Type Systems and Runtimes — JVM, CPython, and the Go Compiler

Java pairs static strong typing with JVM bytecode and adaptive JIT optimization. Python combines dynamic typing with an interpreter and declarative type hints. Go ships static structural typing and a single compiler. The type-system decision drives the runtime mechanism.

June 16, 2024 · 6 min read

Three Concurrency Models — GIL, Virtual Thread, and Goroutine

CPython’s GIL serializes multithreaded execution and pushes work onto multiprocessing or asyncio. Java pinned threads 1:1 to the OS until virtual threads (Java 21) reopened the thread-per-request model. Go shipped with an M:N scheduler from day one. The model you start from decides whether your service goes thread-per-request, reactive, or multiprocess.

June 15, 2024 · 6 min read

Web Server, WAS, Reverse Proxy — Three Different Problems

These three tools often sit in the same place but solve different problems. A look at how static content, dynamic content, and traffic mediation get split among them.

June 15, 2024 · 4 min read

Three Garbage Collectors — How Java, Python, and Go Reclaim Memory

All three languages use a garbage collector, but the priorities differ. Java leans on generational + region GCs (G1, ZGC), Python combines reference counting with a cyclic detector, and Go runs a single concurrent tri-color mark-and-sweep. What each GC gave up is what shapes its operational profile.

June 14, 2024 · 6 min read

Everything Is Pass by Value — Memory Transfer in Go, Java, and Python

Calling a function with an object is often described as pass by reference, but in memory all three languages copy values. Java copies a reference value, Python binds a new name to the same object (call by sharing), and Go copies a struct header — escape analysis decides where the values live.

June 13, 2024 · 7 min read

TLS in Practice: Session Resumption, mTLS, and Automated Issuance

Three practical topics for operating TLS on top of the basic handshake. Session resumption and 0-RTT cut the repeated cost, mTLS authenticates the client too, and ACME automates certificate issuance and renewal.

April 12, 2024 · 6 min read

Kubernetes Fundamentals

Container orchestration basics and what backend developers need to know: core objects, networking, scaling with HPA, and operational essentials.

April 10, 2024 · 7 min read