RSSAmplifier

Blog

sahansera.dev RSS Feed

Field notes from a distributed systems engineer and technical lead at GitHub, on production systems, resilience, and the tools engineers build for each other.

sahansera.devRSS feed ↗56 posts

Latest posts

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.

Scaling an Agentic Coding SDK: What Concurrency Actually Costs

Running agent jobs in parallel is not free. Measuring the real memory, process and shared-state costs of concurrency in an agentic coding SDK.

Build a Safe Repository Maintenance Agent with GitHub Copilot and Microsoft Agent Framework in .NET

Giving an AI agent access to a repository takes only a few lines of code. Giving it useful access without silently approving every command…

Build a Safe Repository Maintenance Agent with GitHub Copilot and Microsoft Agent Framework in Python

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…

What I Learned Growing an Engineering Blog from 0 to 463,000 Pageviews

Seven years, 56 posts and 463,000 pageviews. Which articles actually earned the traffic, what the numbers hide, and what I would do differently.

Replacing a Critical Data Path Without a Flag Day

Shadow reads, a normalized comparison and a staged cutover: how to replace a data path in production without a single big-bang release.

When "no healthy upstream" isn't about the upstream you think

An Envoy error pointed at the upstream. The real cause was retries turning dependency latency into worker pool exhaustion behind the proxy.

The Acknowledgment Gap - How Event-Driven Systems Lose Messages Without Errors

Event-driven systems can drop messages while every component reports success. How acknowledgment boundaries hide loss, and where to put them.

How I Built an AI-Assisted Dependency Vulnerability Fixer

Most CVE fixes fail on packaging, not on code. What I learned building an agent that upgrades dependencies and proves the build still works.

Introducing gh-weekly-updates - Automate Your Weekly GitHub Impact Summaries

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…

Deploying GitHub Self-Hosted Runners on Your Home Kubernetes Cluster with ARC

If you followed my last post, Building a Home Lab Kubernetes Cluster with Old Hardware and k3s , you now have a proper x86 Kubernetes…

Building a Home Lab Kubernetes Cluster with Old Hardware and k3s

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…

How Does the Python Virtual Environment Work?

A Python virtual environment is mostly a directory and a path lookup. Here is what venv actually creates and how activation changes resolution.

HTTP Chunked Transfer Encoding Explained with curl

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.

Upgrading sahansera.dev to Gatsby 5

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…

Streaming APIs with FastAPI and Next.js - Part 2

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 APIs with FastAPI and Next.js - Part 1

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…

My plans for sahansera.dev in 2024

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…

Basics of Apache Kafka - An Overview

Topics, partitions, offsets, consumer groups and brokers: the Kafka concepts you need before designing anything on top of it.

Serverless Go with Azure Functions and GitHub Actions

In this article, we are going to learn how to host a serverless Go web service with Azure Functions leveraging custom handlers in Azure…

Deploying a .NET gRPC Server on Azure App Service

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…

Setting up a local Apache Kafka instance for testing

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…

Adding intelligence to React Apps with Azure Cognitive Services

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…

Tips for Junior Developers

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…

Building a gRPC Client in .NET

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…

Building a gRPC Client in Go

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…

Building a gRPC Server in .NET

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…

Building a gRPC Server in Go

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…

Introduction to gRPC

What gRPC is, how Protocol Buffers and HTTP/2 fit together, and when it beats REST or WebSockets for service-to-service calls.

Automating Raspberry Pi K3s provisioning with Ansible

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…

Go for .NET Developers

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…

A closer look at commands and args in Kubernetes Pods

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…

Building your own private Kubernetes cluster on a Raspberry PI 4 with K3S

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.

Tips and Tricks to Ace the Certified Kubernetes Application Developer

How I prepared for the Certified Kubernetes Application Developer exam, and the kubectl habits that save the most time under the clock.

Setting up Elastic Workplace Search with Docker

Recently I started looking into Elastic Enterprise Search’s Elastic Workplace Search offering. The configuration was not quite obvious when…

A closer look at commands and args in Docker containers

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…

ASP.NET Core Health Checks

Add health checks to an ASP.NET Core service, expose them on an endpoint, and choose which dependencies belong in a readiness signal.

Distributed Caching in ASP.NET Core with Redis

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.

Publishing Android Apps to Microsoft App Center from Azure DevOps

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…

Multi-stage builds for Ionic Apps with Azure Pipeline Templates

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…

Understanding WebSockets with ASP.NET

What RFC 6455 actually specifies, how the HTTP upgrade handshake works, and how SignalR builds on it in an ASP.NET Core app.

How to ramp up in a new codebase with NDepend

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…

Having Fun with Microsoft IoC Container for .NET Core

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.

Understanding .NET Generic Host Model

How the .NET Generic Host separates initialisation from execution, and what it configures for you in both a web app and a worker service.

D3.js Creating a Bar Chart from Ground Up

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…

D3.js Join Semantics - A Conceptual Look

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…

Securing Hangfire Dashboard in ASP.NET Core with a Custom Auth Policy

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…

Multi-stage Image Builds with Docker

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…

Deploying Multi-Container Services on Azure Service Fabric

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…

Setting up your Raspberry PI 4 - Headless mode

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…