Validation SOPs › Technical Validation
SOP 68 of 100 · Technical Validation
Technical Scalability Assessment SOP
- Difficulty
- Advanced
- Time
- 2-3 days of planning, 1-2 weeks of tests and fixes
- Cost
- $100-3000
- Best for
- Products with spiky or fast-growing traffic: live events, education, marketplaces, consumer apps and APIs
- Tools
- Grafana k6, Locust, Apache JMeter, Grafana, PgBouncer
- Measure
- Capacity gain per doubling, Breaking point, p95 response time at target load, Cloud cost per 1,000 active users, Error rate under load
A technical scalability assessment SOP shows what happens to your product, and to your cloud bill, when traffic grows 10 times, and it takes about two weeks of planning and load tests. You turn the growth plan into a target peak, simulate it, and keep pushing until the first part of the system gives way. Every system has a breaking point; the only question is whether you find it in a test or on your best sales day. You come out with the first three bottlenecks, the fix for each and a cost-per-user curve you can put in the financial model.
What is the technical scalability assessment SOP and when should you use it?
Scalability here means the system keeps its speed and error rate as load grows, and the cost of serving each user stays flat or falls. The assessment answers three questions: how much load the current design handles, what breaks first, and whether adding servers adds capacity in proportion.
Keep it apart from two neighbours. Technical performance testing checks speed at today's load and tunes slow pages. The scalability testing SOP in Business Model Validation checks whether operations, support and margins hold up as the company grows. This SOP sits between them: the technical ceiling and the cost curve.
Use it:
- Before a launch that creates a spike: a press feature, a Product Hunt day, a school term start, a ticket sale.
- When your growth plan promises 10x users in the next 12 to 18 months.
- When one customer can bring thousands of users at once, as in B2B deals with large companies or school districts.
- When investors ask whether the product survives the numbers in your deck.
What do you need before you start?
- A staging environment that mirrors production: same instance types, same database engine, realistic data volume.
- Traffic data or a growth plan: daily active users, peak hour share and the busiest user action.
- A load testing tool: Grafana k6 (scripts in JavaScript), Locust (Python) or Apache JMeter. The k6 documentation explains the test types used below.
- Monitoring on every component: CPU, memory, database connections, queue depth and error logs.
- A budget cap for the cloud resources the tests spin up, with alerts set.
How do you run it, step by step?
1. Turn the growth plan into a target peak
Use Little's Law (L = λW, from John Little): concurrent users equal the arrival rate multiplied by the time each one stays. If 2,000 users arrive per minute and each session lasts 5 minutes, you need to hold 10,000 at once. Set the target at your 18-month plan's peak, then add 50% headroom.
2. Script real user journeys
Load test the actions people take, in realistic proportions: 70% browse, 20% search, 10% check out, with pauses between steps. A test that hammers one cached home page tells you nothing about the database.
3. Run tests at 1x, 5x and 10x
Start with a smoke test to check the scripts, then an average-load test at today's peak, then steps at 5x and 10x. Hold each step for 15 to 30 minutes. Watch the four golden signals from Google's Site Reliability Engineering book: how long requests take, traffic, errors and saturation.
4. Push past the target to find the breaking point
Run a breakpoint test that keeps adding load until errors pass 5% or p95 response time passes 3 seconds. Note what failed first: database connections, memory, a third-party rate limit, a single worker. PostgreSQL ships with a default max_connections of 100, and that limit is a common first wall for small teams.
5. Double the servers and measure the gain
Add app servers and rerun the breakpoint test. Perfect scaling would double capacity. Neil Gunther's Universal Scalability Law explains why you get less: parts of the system that every request shares (a database, a lock, a single queue) create contention. A gain under 1.5x per doubling means the design, rather than the server count, sets your ceiling.
6. Fix the first bottleneck and repeat
Fix only the first thing that broke (connection pooling with PgBouncer, a cache, a queue, a read replica) and rerun. The second bottleneck appears only once the first is gone. Two or three rounds cover a young product.
7. Price the curve
Estimate the monthly cloud bill at 1x, 10x and the target peak, and divide by active users. Hand the cost per 1,000 active users to whoever owns the financial model.
Template you can copy
SCALABILITY ASSESSMENT SHEET
Target
Today's peak concurrent users: ____ 18-month peak: ____ +50% headroom: ____
Busiest user journey: ____________________
Test log (one row per run)
Run | Load (x of today) | Concurrent users | Duration | Servers |
p50 ms | p95 ms | Error % | CPU % | DB connections used/max |
First component to saturate | Notes
Breaking point
Load at which errors > 5% or p95 > 3 s: ____
Component that failed first: ____ Fix chosen: ____
Doubling check
Capacity with N servers: ____ with 2N servers: ____ Gain: ____x
Cost curve
Load | Monthly cloud cost | Active users | Cost per 1,000 users
1x | | |
10x | | |
Target peak | | |
Worked example: a live quiz app for classrooms
This is an illustrative case. A small team runs a quiz app where a teacher starts a game and 30 students join in the same minute. Today the busiest moment is 200 classrooms at 9:00 on Monday, or 6,000 students at once. The sales plan targets 2,000 classrooms within 18 months: 60,000 concurrent students, or 90,000 with headroom.
At 1x the system answers in 180 ms at p95. At 5x it slows to 850 ms. At 10x errors jump to 12% after four minutes: every app server opens its own database connections, and PostgreSQL hits its limit of 100. Adding two more app servers makes it worse, because they open even more connections. The doubling check shows a 1.2x gain, a clear sign of contention.
The team adds PgBouncer, caches quiz questions in Redis and writes student answers in one-second batches. The rerun at 10x gives 390 ms at p95 and 0.05% errors, and doubling servers now buys 1.8x. The breakpoint moves to roughly 140,000 students, above the target. Cloud cost per 1,000 student sessions drops from $0.90 at today's load to an estimated $0.55 at the target peak.
What should you measure, and when do you stop?
| Metric | Pass signal | Warning signal |
|---|---|---|
| Capacity gain per doubling | 1.7x or more when servers double | Under 1.5x: a shared component blocks growth |
| Breaking point | Above target peak plus 50% headroom | Below today's peak times 5 |
| p95 response time at target load | Under 1 second | Over 3 seconds, or climbing during a soak test |
| Cloud cost per 1,000 active users | Flat or falling as load grows | Rising with load |
| Error rate under load | Under 1% at target peak | Over 5% before target |
Stop when the target peak plus headroom passes all five rows, or when the next fix costs more than a quarter of engineering time and the target is still a year away. Write down the next bottleneck you expect and the load at which you'll revisit it.
Which mistakes should you avoid?
- Testing a cached home page. Real users search, write and pay. Script the journeys that hit the database.
- Load testing production without warning. You can take your own product down and trigger your provider's abuse alarms.
- Using an empty database. Queries that run fast on 1,000 rows crawl on 10 million. Load realistic data volume first.
- Fixing everything at once. Change one thing per run, or you won't know which change helped.
- Building for a million users on day one. Design for the 18-month target with headroom; the technical architecture review helps you keep the rest reversible.
How can AI speed this up?
Describe your user journeys and ask an AI assistant to write the k6 or Locust script, with realistic pauses and data. Paste the test results table and ask it to point out which metric saturated first and to suggest the cheapest fix. It is quick at reading long monitoring exports.
The human check: AI can't see your staging environment, so it guesses at causes. Confirm every suggested bottleneck in the monitoring graphs before you change code, and rerun the test after each fix. If you want a structured plan for the weeks around a launch spike, the F/MS startup playbook module walks through the sequence.
Where does this SOP fit in your validation plan?
This SOP comes late in the Technical Validation SOPs:
- Before it: a technical architecture review to fix the obvious single points of failure, and technical performance testing for today's speed.
- Alongside it: data architecture validation, since the database is the usual first wall.
- After it: feed the cost curve into your financial model and the business-side scalability testing SOP.
First-time founders building their first product can test the full path in four weeks with the F/MS startup course.
FAQ
What is the difference between performance testing and scalability testing?
Performance testing measures speed at a given load. Scalability assessment measures how speed, errors and cost change as load grows, and where the system breaks.
How many users should I load test for?
Your 18-month peak concurrent users plus 50% headroom. Use Little's Law to convert daily users into concurrent users.
Which load testing tool is best for a small startup?
Grafana k6 and Locust are free, scriptable and run from a laptop for small tests. Pick the one that matches your team's language: JavaScript for k6, Python for Locust.
How much does a scalability test cost?
The tools are free. The cost is cloud time for staging and load generators, from about $100 for a small app to a few thousand dollars for large tests. Set a budget alert before you start.