Validation SOPs › Technical Validation

SOP 68 of 100 · Technical Validation

Technical Scalability Assessment SOP

In short: Turn your growth plan into a target peak load, test the system at 1x, 5x and 10x of today, and push past the target until something breaks. You pass when the system handles the target peak with p95 response times under 1 second and errors under 1%, doubling servers buys at least 1.7x capacity, and cost per user falls as you grow.
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?

MetricPass signalWarning signal
Capacity gain per doubling1.7x or more when servers doubleUnder 1.5x: a shared component blocks growth
Breaking pointAbove target peak plus 50% headroomBelow today's peak times 5
p95 response time at target loadUnder 1 secondOver 3 seconds, or climbing during a soak test
Cloud cost per 1,000 active usersFlat or falling as load growsRising with load
Error rate under loadUnder 1% at target peakOver 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:

  1. Before it: a technical architecture review to fix the obvious single points of failure, and technical performance testing for today's speed.
  2. Alongside it: data architecture validation, since the database is the usual first wall.
  3. 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.