Imagine a popular restaurant that keeps cramming more tables into one dining room. Eventually the kitchen, the single host stand, and the one overworked manager all become bottlenecks — and one spilled tray ruins everyone's night. The smarter move is to open identical branches: same menu, same layout, same staffing, each serving its own crowd.
The Deployment Stamps pattern is that idea for software. Instead of growing one massive shared system, you stamp out complete, independent copies and route each group of customers to one of them.
The problem
A single shared deployment that serves everyone runs into hard ceilings. There's a limit to how far you can scale one database, one cache, or one regional footprint before contention and quotas bite.
Worse, everything shares fate. One noisy tenant hammering the system degrades every other customer. A bad release rolls out to your entire user base at once. A regional outage takes down all your traffic. And big enterprise customers often demand data residency or isolation guarantees that a single mixed system simply can't offer.
Step through a normal Tuesday below: 32 companies share one stack, and one of them starts a giant import. Predict who feels it before you look, then watch what buying a bigger database does, and doesn't, fix.
How it works
You define a stamp — sometimes called a scale unit — as a complete, self-contained slice of the whole application: its compute, its database, its cache, its queues, all of it. Crucially, a stamp is described as infrastructure-as-code so you can provision an identical new one with a single repeatable run.
Each stamp serves a bounded set of tenants (or a region's traffic). When you outgrow capacity, you don't make an existing stamp bigger — you deploy another stamp. A thin traffic-routing layer sits in front and maps each incoming request to its home stamp, typically by tenant ID or geography.
Step through a release below. Version 2 hides a bad database migration, and it goes to Stamp 1 first. Predict how many of the 32 tenants it reaches; then flip the switch to ship the very same release to one big deployment and count again.
The router is the one shared thing — keep it dumb. The routing layer should do almost nothing but look up tenant → stamp and forward the request. Put business logic, sessions, or shared state in it and you've recreated the single bottleneck the pattern exists to eliminate.
You run 6 stamps with 50 tenants each. A release with a broken config ships to Stamp 1 first and breaks it. How many tenants are affected, and what's the right next move?
Why isolation pays off
Because stamps share nothing, your blast radius shrinks to one stamp. You can roll a risky release out to a single low-traffic stamp first, watch it, and only then ripple it across the fleet in waves — a far safer story than a big-bang deploy. It matters most for the changes you can't canary inside one shared system, like a database migration: with one shared database, there's no way to run it for some tenants first.
Isolation also unlocks placement flexibility. A demanding enterprise customer can get their own dedicated stamp in a specific region for compliance, while thousands of small customers share a multi-tenant stamp. It's a natural fit alongside microservices: each stamp can itself be a full mesh of services, just replicated as a unit.
The price is that stamps are islands. A report that spans all tenants now has to ask every stamp and merge the answers, and moving a tenant from a crowded stamp to an emptier one means copying its data while it's live. Decide up front how you'll place tenants — fill a stamp to a fixed size, then open the next — so you rarely have to move them.
Watch for hidden shared dependencies. Stamps only contain failures if they really share nothing. If every stamp quietly calls the same global user database, the same cache cluster, or the same third-party account with one rate limit, that dependency is a single blast radius again: when it fails, every stamp fails with it. List what the stamps share, keep that list short, and make each item as boring and robust as the router.
When to use it
Reach for deployment stamps when you're a multi-tenant SaaS bumping into single-system scale limits, when you need tenant isolation or data residency, or when you want to cap the blast radius of deploys and failures across a large customer base.
Skip it when you're small. Running many copies multiplies your operational surface — every stamp needs monitoring, patching, and capacity planning — so it's only worth it once you have robust automation and enough scale to justify the overhead. For a young product on one modest database, plain scaling is simpler and cheaper.
Your 8 stamps are all healthy, yet every tenant is locked out at once: the one login database that all stamps call has gone down. What went wrong?