...
...
June 15, 2026

Why Building for Scale Beats Building for Billions

Paul Graham's latest essay on earning billions overlooks what actually matters for engineering teams. The real challenge isn't building for massive scale, it's building systems that can scale at all.

software architecturescalingperformancestartup engineeringsystem design
V
VooStack Team
June 15, 2026
6 min read

Paul Graham's essay on how to earn a billion dollars, as Hacker News reported, argues that the path to massive wealth runs through building something for everyone rather than something expensive for a few people. His math is simple: sell a $10 product to 100 million people instead of a $1000 product to 1 million people.

But Graham's advice misses the real engineering challenge. The bottleneck isn't market size or pricing strategy. It's that most teams can't build systems that handle 100 users reliably, let alone 100 million.

We've seen this pattern repeatedly at AgileStack. Companies burn months chasing theoretical scale problems while their actual systems fall over under basic load. They architect for Netflix when they should be solving for 10,000 concurrent users.

The Scale Problem Nobody Talks About

Graham's billion-dollar thesis assumes you can build software that works for everyone. That's where engineering reality diverges from venture capital theory.

Building for 100 million users isn't just "building for 1000 users but bigger." It's a fundamentally different engineering problem. Your database layer breaks. Your API rate limiting becomes critical infrastructure. Your monitoring shifts from "is it up?" to "which of our 47 services is degrading performance?"

Last year, we worked with a startup that built their MVP assuming they'd need to handle millions of users from day one. They spent eight months on a microservices architecture with Kubernetes, Redis clustering, and database sharding. When they finally shipped, they had 200 beta users and the system was too complex to debug basic issues.

Meanwhile, their competitor shipped a Rails monolith in six weeks, got to 10,000 paying customers, then rewrote the bottlenecks.

Why Most Teams Can't Scale Past 10,000 Users

The real barrier isn't technology. It's that scaling requires different thinking at every order of magnitude.

At 1,000 users, you can get away with a basic CRUD app and a single Postgres instance. Performance problems are obvious and usually solved by adding an index.

At 10,000 users, you need proper caching, database connection pooling, and basic monitoring. You're starting to care about response times under load.

At 100,000 users, you need CDNs, read replicas, background job processing, and real observability. Your deployment process matters. Database migrations require planning.

At 1,000,000 users, you're doing database sharding, service decomposition, and capacity planning. You need SRE practices and chaos engineering.

Most engineering teams never make it past the 10,000 user threshold because they don't understand these transitions. They either over-engineer from day one or under-engineer until the system collapses.

The Real Billion Dollar Engineering Advice

If you want to build something that could theoretically serve 100 million people, focus on these principles:

Build for Your Current Scale Plus One Order of Magnitude

If you have 1,000 users, architect for 10,000. Not 100,000. Not a billion.

This means using proven, boring technology. Postgres, not DynamoDB. Rails or Django, not a custom framework. Redis for caching, not Memcached clusters.

When Stripe was processing millions of payments, they were still using Ruby on Rails. Instagram was serving 100 million users with Django and Postgres. The technology doesn't limit scale as much as engineering discipline does.

Make Performance Visible Early

Set up proper monitoring from day one. Not because you need it, but because you need to understand your system's behavior before it breaks.

We recommend New Relic or DataDog for application monitoring, plus basic infrastructure monitoring with something like Prometheus. Track response times, error rates, and database query performance.

The goal isn't to optimize everything. It's to know where your bottlenecks are when they become real problems.

Plan Your Database Layer Carefully

This is where most teams die. They start with a normalized schema that works fine for thousands of records, then realize at 10 million records that their joins are killing performance.

Denormalize early for read-heavy workloads. Use database indexes aggressively. Plan your sharding strategy before you need it, even if you don't implement it.

And please, use foreign keys and constraints. The database is not just a dumb data store. It's your consistency layer.

Design APIs for Caching

HTTP caching isn't just about performance. It's about scaling without infrastructure costs. If your API responses can be cached for even 60 seconds, you've eliminated 90% of your scaling problems.

This means thinking about cache invalidation from the beginning. It means designing endpoints that return consistent data for the same input. It means using ETags and proper HTTP headers.

What Graham Gets Right About Product Market

Graham's essay does nail one thing: building for a large market is better than building for a small one. But from an engineering perspective, this isn't about pricing.

It's about building products that can grow without complete rewrites. Netflix didn't start by building a system that could handle 200 million subscribers. They started with DVD shipping software and evolved it.

The companies that successfully scale to Graham's billion-dollar threshold do it by solving small problems really well, then expanding the definition of the problem.

Slack started as an internal tool for a game development company. Stripe started as seven lines of code to accept payments. Neither started by trying to serve everyone.

Why This Matters for Your Team

Most engineering teams won't build billion-dollar companies. That's fine. But the principles that enable massive scale also make your software more reliable at small scale.

Building systems that can handle 10x your current load means building systems that handle your current load reliably. Good monitoring helps you debug issues whether you have 100 users or 100,000.

Proper caching makes your app faster for 1,000 users and cheaper to operate at 100,000 users. Database design that supports growth also supports complex queries today.

The Real Takeaway

Paul Graham's billion-dollar advice isn't wrong about markets and pricing. But it skips the hard part: actually building software that works.

Instead of optimizing for theoretical billions, optimize for reliable growth. Build systems that can scale one order of magnitude at a time. Focus on boring, proven technology until you have real scaling problems.

And remember: the biggest scaling challenge isn't technical. It's organizational. Most companies can't coordinate 100 engineers effectively, let alone build products for 100 million users.

Start by shipping something that works for 1,000 people. Then figure out 10,000. The billion-dollar question isn't about market size. It's about whether your team can execute consistently as you grow.


Building something in this space? AgileStack helps teams ship enterprise-grade software without the consulting-firm overhead. Book a 30-minute call and tell us what you're working on.

Topics
software architecturescalingperformancestartup engineeringsystem design
Authored by
V

VooStack Team

Engineering, VooStack

The VooStack engineering team — a veteran-owned, SDVOSB-certified software house building Flutter, .NET, and cloud-native products end to end, from San Antonio, TX and Oklahoma City, OK.

Share

Share this article