The anatomy of an SDK, in Go

A walkthrough of the surface an SDK exposes, in seven parts, with idiomatic Go for every piece: the client constructor with functional options, resource groupings that mirror the caller’s mental model, typed requests and responses, typed errors with request IDs and errors.As, first-class pagination via iter.Seq2, streaming and retries and instrumentation, and the docs/samples/changelog trio that finishes the surface. Companion to the SDK fundamentals post.

August 7, 2026 · 8 min · Omar Crosby

What makes a good SDK

An eight-point rubric for judging whether an SDK is any good, each criterion paired with a real currently-shipping SDK that gets it right — Stripe (idiomatic hand-crafted per language, typed errors with request IDs, exceptional docs), AWS SDK for Go v2 (boring auth via the credential-provider chain, paginators as a distinct type), Anthropic and OpenAI (sensible retry defaults, streaming), Stainless-generated SDKs (types from a single spec), GitHub Octokit (honest versioning). Followed by the two-sided value proposition — what building on those axes actually buys for the vendor and the caller.

August 7, 2026 · 15 min · Omar Crosby

Capability-first SDK design, and where new work belongs

The question is almost never ‘how do we add this method to the SDK?’ — it’s ‘where should this capability live?’ A companion to the SDK fundamentals post, covering capability-first SDK design (with the caller-sketch discipline as the practice), the five-way routing framework for new capability requests (pure SDK / additive API change / new endpoint / new API service / push down for generation), signals for extending an existing API vs. creating a new one (with Stripe Terminal and AWS Lambda as named examples), and the version-coordination process when a capability requires changes on both sides.

August 7, 2026 · 17 min · Omar Crosby

What an SDK actually is, and when to build one

An SDK is not just a client library — it’s the smallest thing a platform can ship that turns ‘read our docs and call our API’ into ‘install this and get to work.’ First in a four-post series on SDK design: this one covers the fundamentals — what SDKs are, where they came from, how they differ from libraries and frameworks and protocols, why they’re becoming the product itself, and a concrete decision framework for when to build one. Companion posts cover the anatomy of an SDK’s surface in Go, the rubric for what makes one good with named exemplars, and the design-process question of routing new capabilities between the SDK and the API.

August 7, 2026 · 16 min · Omar Crosby