Latest Posts

gRPC vs REST Is the Wrong Question

I’ve seen the same argument over and over on Twitter, LinkedIn, Reddit, etc. Where should you use JSON/HTTP APIs and where should you use gRPC? The same exact advice is almost always given: use HTTP/JSON for public or browser-facing APIs, and gRPC for microservices and infrastructure such as etcd and containerd. The reasons for this advice are valid: HTTP/JSON is trivial to set up, inspect in DevTools, cache, proxy, and hit from a browser. gRPC and Protobuf do give you schemas, generated... Click to read more →

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 →

 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 →