Log · June 2, 2026 · build

Notes from building a public API

Internal and external primitives are not the same object. Shipping a public API forces you to decide what your product actually is.

A few things shipping a public API at a startup taught me that internal services never did:

  • The object model is the product. Once external developers depend on your resources, renaming a field is a breaking change, not a refactor. You're forced to decide what your nouns really are.
  • Internal primitives leak. The shapes that were convenient for our own services were almost never the shapes an outside developer wanted. The public API is a second, more honest design pass.
  • Docs and SDKs are part of the API. An endpoint nobody can figure out how to call doesn't exist. The surface area includes the examples.
  • Backwards compatibility is a feature you sell. Stability is the thing that lets someone build on you at all.

The throughline: a public API makes you commit. Internally you can be vague and patch it later. Externally, the contract is the product.