Latest Posts

Joining Buf

I’ve started working at Buf Technologies! This will come as no surprise to those who have been following me for a while. I’ve been writing about schema-first development, have made tools to enable protobuf-driven development (FauxRPC and protoc-gen-connect-openapi), and I’ve been a big fan and user of the ConnectRPC stack for a long time. I joined Buf to work in developer relations. This is a change from what I have been doing. I’ve usually been making in-house tooling and API services, and... Click to read more →

Let’s Talk About Streaming Data on the Web

“Streaming data” on the web might mean consuming a response as bytes arrive, receiving server events, using a long-lived bidirectional channel, or sharing one connection between independent streams. These workloads have different requirements, but we often reduce the choice to HTTP requests or WebSockets. I want to look at the available options and then experiment with WebTransport. I came at this from gRPC: could WebTransport make client and bidirectional streaming practical in a browser? That... Click to read more →

The Gravity of Ashburn, Virginia

Where is the center of the internet? There is no single correct answer. You could measure submarine cables, network interconnection, cloud capacity, traffic, or the number of people online, and each would produce a different map. But one result from my 2026 Internet Map caught me completely off guard. When I ranked American metro areas by the amount of publicly routed IPv4 address space geolocated to them, the top result was not New York, Chicago, or Silicon Valley. It was Ashburn, Virginia, a... Click to read more →

The CPU Cost of Protobuf Varints in Go

When you define an integer field in a Protocol Buffers schema, int64 is a common default. Varint encoding compresses small numbers into a byte or two, keeping network payloads lean. However, that compression comes at the cost of CPU cycles. To read or write a varint, the CPU must process the value byte by byte, checking continuation bits and shifting payloads. When a field sits in a high-throughput backend service, CPU efficiency often matters far more than saving a few wire bytes. Protobuf also... Click to read more →

It’s Time for ConnectRPC to Adopt HTTP QUERY

HTTP QUERY is now standardized in RFC 10008. For backend engineers working with schema-first APIs, this provides a clean solution for a problem we have been working around for years: cacheable requests that require complex, structured input. That matters for a protocol like ConnectRPC. Connect already tries to map RPCs onto ordinary HTTP instead of fighting the grain of the web. It supports HTTP GET for side-effect-free unary RPCs, which is great for caching, but GET forces structured request... Click to read more →

 Featured Posts

Building a Live BGP Map

Right now, thousands of routers are arguing about how to reach each other. That’s expected. It’s how the Internet works. This website wouldn’t load without it. BGP (Border Gateway Protocol) continuously announces and withdraws prefixes, adjusting how traffic moves globally. Most people see URLs and apps; routers see prefixes and AS paths. I made a map that lets us listen in on this conversation, but in a relaxing, aesthetically pleasing way. In my last post, I mentioned a websocket-based... Click to read more →

Visualizing the Internet (2026)

For the past few years, I’ve been trying to make the physical reality of the Internet visible with my Internet Infrastructure Map. This map shows the network of undersea fiber-optic cables along with peering bandwidth, grouped by city. I update the map annually, but I don’t want to just pull the latest data and call it a day. In this post I discuss how the map evolved this year and what I did to make it happen, but you can skip to the good part by viewing it here: map.kmcd.dev. For the 2026... Click to read more →

Series: HTTP From Scratch

Introduction Welcome to the first installment of our “HTTP from Scratch” blog series! In this series, we’ll embark on a journey through the evolution of the Hypertext Transfer Protocol (HTTP), the backbone of the World Wide Web. By building simple implementations of each major HTTP version in Go, we’ll gain a deep understanding of how this essential protocol has shaped the internet we use every day and how it has evolved to what we have now. Be warned that none of the code will be the most... Click to read more →