When Three Kubernetes Pods Try to Run One Database Migration
Three replicas raced the same Prisma migration. A PostgreSQL advisory lock coordinator fixes it when your platform cannot run a pre-deploy Job.
Field notes from a distributed systems engineer and technical lead at GitHub, on production systems, resilience, and the tools engineers build for each other.
Three replicas raced the same Prisma migration. A PostgreSQL advisory lock coordinator fixes it when your platform cannot run a pre-deploy Job.
Running agent jobs in parallel is not free. Measuring the real memory, process and shared-state costs of concurrency in an agentic coding SDK.
Giving an AI agent access to a repository takes only a few lines of code. Giving it useful access without silently approving every command…
In the .NET tutorial , we built a repository agent that could inspect a checkout, propose a one-line repair, run its tests, and report the…
Seven years, 56 posts and 463,000 pageviews. Which articles actually earned the traffic, what the numbers hide, and what I would do differently.
Shadow reads, a normalized comparison and a staged cutover: how to replace a data path in production without a single big-bang release.
An Envoy error pointed at the upstream. The real cause was retries turning dependency latency into worker pool exhaustion behind the proxy.
Event-driven systems can drop messages while every component reports success. How acknowledgment boundaries hide loss, and where to put them.
Most CVE fixes fail on packaging, not on code. What I learned building an agent that upgrades dependencies and proves the build still works.
If you’re anything like me, you’ve probably spent a Friday afternoon trying to remember everything you did that week. Maybe it’s for a…
If you followed my last post, Building a Home Lab Kubernetes Cluster with Old Hardware and k3s , you now have a proper x86 Kubernetes…
If you’ve read my previous post about building a Raspberry Pi k3s cluster, you know I’m a huge fan of home labs. There’s something uniquely…
A Python virtual environment is mostly a directory and a path lookup. Here is what venv actually creates and how activation changes resolution.
See how HTTP/1.1 frames streaming responses into chunks, inspect the raw bytes with curl, and understand what changes in HTTP/2 and HTTP/3.
The time is now 1:45 AM and I’m finally done upgrading my blog to Gatsby V5. It’s been one heck of a ride, but it was worth it. This blog…
In Part 1 , we explored how to stream data into a React component using modern browser APIs. Now it’s time to build the other half: the…
Streaming data in the browser is one of those things that feels magical the first time you see it: data appears live - no need to wait for…
Reflecting Back on 2023 It’s no secret that my blogging took a backseat this year - becoming a first-time dad has been a joyful, yet the…
Topics, partitions, offsets, consumer groups and brokers: the Kafka concepts you need before designing anything on top of it.
In this article, we are going to learn how to host a serverless Go web service with Azure Functions leveraging custom handlers in Azure…
In this article we are going to be deploying a gRPC web service written in .NET to an Azure App Service. We will then interact with it and…
I recently started digging into Apache Kafka for a project I’m working on at work. The more I started looking into it I realized I need to…
Hi everyone 👋 This blog post is based on a conference talk I delivered at the React Global Summit 2022 on the 21 April 2022. React Global…
Hi everyone 👋 this blog post kind of different from my usual ones since this is based on a recent talk I delivered at the Adelaide Jnr…
Introduction In this article, we will take a look at how to create a simple gRPC client with .NET and communicate with a server. This is the…
Introduction In this article, we will take a look at how to create a simple gRPC client with Go. We will be using this client to interact…
Introduction In this article, we will look at how to build a simple web service with gRPC in .NET. We will keep our changes to minimal and…
Intro In this article, we will create a simple web service with gRPC in Go. We won’t use any third-party tools and only create a single…
What gRPC is, how Protocol Buffers and HTTP/2 fit together, and when it beats REST or WebSockets for service-to-service calls.
In this article, we will be looking at how we can automate most of the steps involved in installing a Raspberry Pi+K3s cluster by using…
This blog post kind of different from my usual ones since this is based on a recent talk I delivered at the Adelaide .NET User Group on the…
In my previous blog post, we looked at how commands and args work in Docker. If you missed that one, the link is down below. A closer look…
Build a two-node Kubernetes cluster on Raspberry Pi 4s with k3s, from flashing the SD card through cgroups, static IPs and joining the agent.
How I prepared for the Certified Kubernetes Application Developer exam, and the kubectl habits that save the most time under the clock.
Recently I started looking into Elastic Enterprise Search’s Elastic Workplace Search offering. The configuration was not quite obvious when…
Today we will be looking at how we can make use of commands and args in Docker to run our own processes when we spin up containers. This…
Add health checks to an ASP.NET Core service, expose them on an endpoint, and choose which dependencies belong in a readiness signal.
Move a cache out of process memory and into Redis with IDistributedCache, so an ASP.NET Core app keeps its cache when you scale horizontally.
In my previous article, we looked at how we can set up multi-stage builds for an Android app with Azure DevOps. In this article, we will be…
In this article, we will create an Azure Pipeline for an Ionic app using the new Azure pipelines YAML templates. We will also cover signing…
What RFC 6455 actually specifies, how the HTTP upgrade handshake works, and how SignalR builds on it in an ASP.NET Core app.
Reading code is good. But, visualising code is even better. I recently wrapped up a gig where we had to perform a .NET Core upgrade (from…
Wire up Microsoft's built-in dependency injection container from an empty console app, then read the DI extension source to see how it resolves.
How the .NET Generic Host separates initialisation from execution, and what it configures for you in both a web app and a worker service.
Creating a bar chart is not that difficult, or is it? Today, we are going to dissect the basic elements of a bar chart and create it from…
It’s really easy to get started with D3 when you go through their excellent documentation . However, the goal of this post is to give you a…
This blog post assumes that you have a basic understanding of Hangfire. If not, you can follow their excellent guide on how to get started…
What and Why Behind Multistage Builds In a Dockerfile, each statement adds up a new layer to the image. It could be counterproductive if you…
To give you a bit of context on what we will be looking at today, we will have one goal - to deploy a microservices application to Azure…
When I first got my Raspberry PI 4 ( RPI for the rest of the article), I was so excited to get started. However, there was one problem. How…