Build for 10x, Not 100x
Design for roughly an order of magnitude beyond today's load, and revisit at each step, because architectures for imagined scale cost real velocity.
Scaling is a classic place where architects over-invest. A startup with 2,000 users designs for 20 million, adopts a distributed stack, and spends a year on infrastructure before finding product fit. A widely used rule of thumb says to design for about ten times your current load, and expect to rework the architecture before you reach a hundred.
Why an order of magnitude
Systems change character as they grow. The techniques that work at 100 requests per second differ from those at 1,000 and again at 10,000. A design that anticipates 100x must commit to hard problems you do not yet have: sharding, multi-region consistency, partition tolerance. You will pay in complexity today for assumptions that will probably be wrong.
Ten times is far enough to avoid constant emergency work and close enough that you can reason about it using real measurements. By the time you approach it, you will have new data about traffic shape, hot keys and growth rate.
Start from numbers
Before choosing technology, quantify. Suppose the product has 50,000 daily active users, each making about 40 requests per day:
requests per day = 50,000 x 40 = 2,000,000
average per second = 2,000,000 / 86,400 = about 23 req/s
peak (5x average) = about 115 req/s
10x target = about 1,150 req/s
A single well-tuned relational database and a handful of stateless application servers handle 1,150 requests per second comfortably for many workloads. Seeing the figure makes it clear that a sharded multi-region design is not yet required.
What to design for now
Building for 10x does not mean ignoring the future. It means choosing the cheapest options that do not block growth:
| Concern | 10x approach | 100x approach (defer) | |---|---|---| | Compute | Stateless services behind a load balancer | Dynamic cluster autoscaling across regions | | Database | One primary, read replicas, good indexes | Sharding, cross-shard transactions | | Caching | Cache the few hot reads | Multi-tier distributed caching | | Async work | A queue for slow tasks | Streaming platform with partitioned consumers | | Deployment | Single region, multiple zones | Active-active multi-region |
The right-hand column is not wrong; it is premature.
Keep the doors open
You can avoid painting yourself into a corner without paying for scale you lack:
- Keep services stateless. Session state in a shared store lets you add servers without redesign.
- Choose partitionable identifiers. Using tenant or user ID as a natural key makes future sharding feasible, even if you never shard.
- Separate reads from writes in code. A clear boundary makes adding a replica or cache straightforward.
- Put slow work behind queues early. Moving email or report generation off the request path is cheap now and painful later.
- Avoid global locks and cross-entity transactions where a simpler design avoids them.
These are inexpensive habits that preserve the path to 100x.
Know your triggers
Instead of guessing when to scale, define leading indicators and thresholds:
- Database CPU sustained above 60 percent at peak
- Replication lag exceeding a few seconds
- p99 latency crossing the service target for a week
- Storage projected to hit capacity within six months
When a trigger fires, it funds the work. This turns scaling from anxiety into a scheduled engineering activity, backed by evidence.
When 100x is justified
There are exceptions. If you are launching to an existing audience of millions, such as a partner integration or a marketing event, load may jump overnight. Regulated or safety critical systems may require capacity guarantees. In those cases the numbers justify the investment, and load testing should confirm it. The principle is still to size to a measured or contractually known target, not to a hope.
Also remember that scale has dimensions beyond traffic: data volume, number of tenants, team size and feature count. A system can handle load easily yet become unmaintainable at 50 engineers. Match the architecture to whichever dimension is growing fastest.
Key takeaways
- Design for about 10x current load and plan to revisit before 100x.
- Do a back-of-envelope calculation; real numbers often show you are far from needing complex scaling.
- Use cheap enabling habits: stateless services, partitionable keys, queues for slow work.
- Define metric triggers that tell you when to invest in the next level.
- Justify exceptions with known demand, not optimism.