Back to the Journal

The Netflix approach to shipping software

Great engineering isn't about avoiding mistakes. It's about making them small, visible, and cheap to undo. What a streaming company taught the rest of us about launching anything.

Open Netflix tonight and the version you see may not be the one your neighbor sees. A row in a different spot, a button that behaves a little differently, a layout that feels subtly new. That isn’t a glitch, and it isn’t indecision. It’s a company that decided, on purpose, never to bet everything on a single moment.

The reputation Netflix earned among engineers didn’t come from writing flawless code. It came from an assumption baked into how they ship: mistakes are going to happen, so build systems where a mistake stays small, shows up fast, and costs almost nothing to undo. That idea turns out to be useful far outside the data center, which is why we keep reaching for it whenever we launch anything at all.

Deploying and releasing are two different verbs

Most people treat them as one event. Push the code, users get the thing, done. The teams who ship calmly pull those two apart and never glue them back together.

Deploying is getting new code onto the production servers. Releasing is letting people actually use it. Once you separate the two, a feature can sit fully deployed and live for a week before a single customer lays eyes on it, tested against real infrastructure the whole time, just waiting. Switching it on becomes a config change instead of a white-knuckle redeploy, and switching it back off is exactly as quick.

Feature flags do the separating

The mechanism underneath that trick is unglamorous: a conditional. Finished or not, code hides behind a switch that decides who gets to see it. Employees only. Beta users. Customers in one country. Everyone.

if (flags.enabled('new-checkout', user)) {
  return renderNewCheckout();
}
return renderLegacyCheckout();

That handful of lines is doing more than it looks like. The new checkout is deployed, real, and running in production, but it’s invisible until the flag says otherwise. You can validate an assumption, run a real A/B test, gather actual feedback, and kill a feature that’s misbehaving, all without touching the deploy pipeline again. The software is already there. What you’re controlling is the experience.

Start with a canary

Picture rolling a new checkout out to millions of people. Would you rather find the critical bug after a hundred of them hit it, or after ten million did?

This is why the careful teams start tiny. A new version reaches internal staff first, or a single server region, or two percent of traffic. If the numbers stay healthy, the slice widens, and keeps widening, until everyone’s on it. The industry calls this a canary deployment, after the birds that miners carried underground to detect danger before it reached the people. The question underneath it isn’t “will this work.” It’s “how quickly will we know if it doesn’t.”

Build the exit before you need it

A cousin to the canary is the blue-green deployment. Rather than overwriting the running application, you keep two near-identical production environments side by side. One serves everyone while the new version goes up on the other. You verify the new one, redirect traffic to it gradually, and if anything looks wrong, you send traffic straight back to the environment that was working sixty seconds ago. Recovery stops being an afternoon and becomes a breath.

The best rollback is the one you planned before anything went wrong.

There’s a mindset hiding in that sentence, and it’s the opposite of bravado. Planning your retreat isn’t pessimism about the launch. It’s what lets you launch aggressively in the first place, because the cost of being wrong got small enough to stop being scary.

Break it on purpose

Netflix also helped popularize chaos engineering, which sounds unhinged until you sit with it. They intentionally break their own systems in production, terminating servers and severing connections on a normal Tuesday, to find the weak joints before a real outage does. Hoping your systems behave under stress is not a strategy. Rehearsing the stress, on your schedule, with everyone watching, is. Confidence like that doesn’t come from dodging failure. It comes from having practiced it so many times it got boring.

None of this is really about Netflix

Almost no business will ever ship at that scale, and it doesn’t matter. The transferable part has nothing to do with streaming video to two hundred countries. It’s that durable organizations don’t depend on perfect execution. They build a process where recovery is fast, learning never stops, and risk stays a size you can hold in one hand.

We think about this every time we put a website live, hand over a rebrand, or turn on a campaign. Ship a slice before the whole thing. Watch what actually happens instead of what you hoped would. Keep a door open behind you. The launches we’re proudest of are almost never the dramatic ones. They’re the quiet ones, where a client wakes up to something better and the people using it never felt the floor move underneath them.