A free tier is not a trial
A trial that expires is a deadline. A free tier that never expires lets you prototype on your own schedule and upgrade when traffic justifies it.
Platform updates and engineering notes from the team building Zephiel. 34 posts, published since 2015.
A trial that expires is a deadline. A free tier that never expires lets you prototype on your own schedule and upgrade when traffic justifies it.
Normalising upstream failures is unglamorous work. It is also the single thing developers thank us for most.
Sliding windows, token buckets, and why we settled on a hybrid that absorbs a 10x burst without letting a runaway loop drain your quota.
Median latency is a marketing number. The tail is what pages your on-call. Here is every percentile we measure and how we collect it.
Three years after per-store billing, the API it was built for is our fastest growing listing. What we learned building for retailers.
From four providers and a gateway that mostly worked, to here. The things that turned out to matter were not the things we expected.
We have published every bad month since 2015. The commercial damage we feared has not once materialised.
Nine years, four serious proposals to move part of the workload elsewhere, and one that we actually went through with.
Fourteen months, no maintenance window, no breaking change, and one incident that lasted ninety seconds. The strategy was refusing to do it all at once.
Every modern HTTP client retries automatically. Several of them retry badly, and the result looks exactly like an attack.
Two thirds of provider conversations this quarter involved a language model. Most of them should not have. Here is how we are deciding what to list.
We measure providers on how fast a human answers a technical question. It predicts more about the integration than latency does.
RFC 9114 landed in June. QUIC fixes the head-of-line blocking that HTTP/2 pushed down a layer rather than solving.
Multi-storefront retailers kept asking for something our pricing model could not express. So we changed the model.
We are not a Java shop, which turned out to be almost irrelevant. Ten days of dependency archaeology and what we changed afterwards.
Delivery is the easy part. Ordering, duplicates, and the customer endpoint that is down for six hours are the actual work.
We have never put an expiry on a free tier. Here is what that actually costs us and why the number is smaller than people assume.
Every write endpoint now requires one. It is a small imposition that eliminates an entire category of support ticket.
March rearranged our traffic. What broke was not capacity — it was every assumption we had encoded about when load arrives.
Every major browser drops them next year. We are following, with a twelve-month notice period and a list of exactly who is affected.
You do not need error budgets and a reliability org to reason about latency. You need to know what you are spending and where.
The average key in our system had not been rotated since it was created. We made rotation the default rather than a chore.
An honest list. The normalisation layer, the pricing page, the region, and the year we spent building for a customer who did not exist.
RFC 8446 was published this month after four years and twenty-eight drafts. One round trip instead of two, and a much shorter list of things that can go wrong.
GDPR enforcement begins this Friday. Everything we committed to last year has shipped. Here is the short version of what you now have.
A wall of green squares is a marketing asset, not a status page. We rebuilt ours to make degradation visible.
Enforcement starts in May 2018. Here is what it actually requires of an API platform, and the four things we are changing now.
Multiplexing removed a class of head-of-line blocking we had been working around for two years. It also broke our connection pooling assumptions.
We ran the whole platform from a single region on purpose. Here is what broke, what did not, and why we are finally moving.
Charging differently for each endpoint makes your bill unpredictable and quietly teaches developers to write worse code.
Let's Encrypt left beta last month. We have moved every endpoint, including the ones nobody would have bothered with before.
The good ones had documentation you could read without logging in. That correlation held better than anything else we measured.
Boring, ubiquitous, and debuggable with tools every developer already has. The alternatives are more interesting and that is the problem.
We counted what it actually cost to add a sixth API to a product last year. The integration was the cheap part.