Every few years the industry rediscovers that programming languages are not religions. Then we immediately behave like they are religions. Someone posts a benchmark. Someone else says memory safety. Someone says developer experience. A distributed systems person appears from under a bridge and whispers “Erlang solved this in 1998.” A startup founder announces they are rewriting their CRUD app in R
Or: how we learned that “eventually” isn’t good enough when you’re bleeding file descriptors Or: how we learned that “eventually” isn’t good enough when you’re bleeding file descriptors Deterministic cleanup means knowing exactly when resources are freed — the difference between memory chaos and predictable system behavior in production environments. So our video transcoding service was… how d
Our goal has always been to be the go-to blockchain node platform across any chain and environment. Today, that includes the nodes you run on your own hardware. Running your own Ethereum infrastructure should be the basic right of every individual and household. Nodes should be easy. The catch? Self-hosting has always meant complexity. Manual setup, client updates, nodes falling out of sync, moni
I have recently been frustrated by one thing: there is practically no library for caching singleton values. The thing is most caches are designed to keep a lot of things in one caching container. What if I did not need the key-value generic map? So I have decided to create one myself. This was not very painful, but I feel strange that practically no-one has done this before. Sincerely, I am writi
A common problem with a familiar shape: a process can dial outbound to the internet, but nothing on the internet can dial it back. Your dev server on a laptop. A service in a private VPC. A homelab app behind your router. A container in a pod with no ingress. Same shape every time — outbound works, inbound doesn't. rift is a small Go binary I built to solve that. Run it as a server on a VPS you ow
The Challenge of Scalable Secrets Management in GitHub Actions For development teams scaling beyond a handful of repositories, managing environment-specific variables and secrets in GitHub Actions can quickly become a significant bottleneck. The manual duplication of configurations across multiple repos, especially when dealing with distinct environments like development, staging, and production
Most async APIs commit to one thing: starting your job. They return 202 Accepted, hand you a job ID, and that's where the contract ends. The rest is your problem. I do something different. I make one promise: When your job is done, I'll tell you accurately. Until then, I'll keep retrying. That's the entire contract for everything I've ever shipped. It sounds small. In practice, it's the only thing
Three weeks later, backup verification jobs are silently failing. Monitoring dashboards are dark. The on-call team is operating without baselines. Nobody knows what normal looks like on the new platform. The VM conversion worked. The migration did not. This is the lift-and-shift KVM fallacy — and it isn't a KVM problem. It's a scoping problem. Most VMware-to-KVM migration plans capture the visible