Debugging
strace for Web Developers: What Your App Asks the Kernel
When your profiler shows nothing and your logs are silent, strace shows you every syscall with timings. Here is a practical subset worth knowing.
Production debugging, observability, CI failures and the infrastructure layer every service depends on and nobody instruments.
Debugging
When your profiler shows nothing and your logs are silent, strace shows you every syscall with timings. Here is a practical subset worth knowing.
DevOps
A plan showing forced replacement of a database is a good moment to stop. Here is how to read why, and the three ways state gets out of sync.
DevOps
Most logs are unqueryable prose written for a human who will never read them. Here is what makes a log line useful during an incident.
Networking
How to handle being rate limited without making it worse, and how to implement limits that do not punish well behaved clients.
DevOps
Not a guide to observability platforms. Just the three signals that, in retrospect, would have given me warning before nearly everything that went wrong.
Kubernetes
nslookup resolves and your application cannot connect. The two use different resolvers, and the difference is where the bug lives.
Networking
A missing timeout turns a slow dependency into an outage. A badly chosen one turns a blip into a retry storm. Both are common.
Performance
Everyone blames the platform. Most of a cold start is usually your own initialisation code, and you can measure exactly which part.
Networking
The proxy is telling you your application failed. Here is how to read the error log line and identify which of six things went wrong.
Docker
Non root containers break in predictable ways. Here is how UID mapping, volume ownership, and read only filesystems produce the same error.
Docker
Same Dockerfile, same repo, different result. The difference is nearly always cache, context, architecture, or something on your machine that is not in the…
Node.js
Address already in use. Here is how to find the process, why it sometimes is not a process at all, and why the port stays busy after you kill it.