Why load test?

When it pays for itself — and when it's premature.

5 mineasy

Load testing means deliberately hammering your API to find out what happens when traffic spikes. Most teams discover their bottleneck on launch day from a screaming Slack channel. This course is the alternative: find it on Tuesday afternoon, with coffee, and fix it.

What load testing answers

  • How many concurrent users can my API handle? 50? 5000? You should be able to answer this with a number.
  • Where does it break? DB CPU, connection pool, app CPU, memory, downstream service?
  • What does the user experience look like under load? p95 = 200ms? 2s? 20s? The difference matters.
  • Does my change make things WORSE? Run before + after; the numbers tell you.

The five test types

Test types over time

VUs │ │ ──── Stress (find the break point) ──── 500├────────────────────────────/ │ / │ / 200├──────────────────────/────── Load (expected steady state) ── │ /───────────────────────────────────── │ / 10│──── Smoke ────────/ Soak (hours, find leaks) │ ────────── │ ───────► time ──────────
Each test asks a different question. Pick based on what you need to learn.
  • Smoke — 10 VUs for 1 min. "Does this basically work?" Run on every PR.
  • Load — expected production traffic for 5-10 min. "Does it hold up at planned scale?"
  • Stress — ramp until it breaks. "Where's the cliff?"
  • Spike — sudden 10x surge. "Does a marketing email crash us?"
  • Soak — moderate load for hours. "Do we leak memory / connections over time?"

When NOT to load test

Load testing has a cost: time to write, infrastructure to run, signal to interpret. Skip it if:

  • You have <100 daily active users. Your DB isn't the bottleneck — feature velocity is. Build first.
  • You haven't shipped anything. "What if a million users come?" is a great problem to have later. Don't pre-optimise.
  • The endpoint is rarely called. A quarterly-reporting endpoint doesn't need to handle 1000 rps. Test the hot paths, ignore the cold ones.
The right time is one of: (a) you're about to launch / get featured / get press, (b) you just shipped a major change to a hot path, (c) you noticed slowness in production and want to repro locally, (d) you're capacity-planning for next quarter.

What we'll build together

  • A k6 suite in tests/k6/ with one script per scenario type.
  • Thresholds that fail the build on regression.
  • A workflow that runs k6 on every PR via GitHub Actions.
  • One real measured optimisation against your own API.

The mindset shift

Most performance work is vibes-based: "feels faster", "should be quicker". Load testing is the discipline of replacing vibes with numbers. You make a change, you run the test, the number went down — or it didn't. The graph is brutal honest. That's the whole point.

Quick check

A 2-person team is 3 weeks from launching. They've never load-tested. Should they?

What's next

Next lesson — Install k6. One binary, no Node, no deps. We'll have you running a test by the end of the next 3 minutes.

Spot a typo? Have an idea?

Help us improve this lesson. One click opens a GitHub issue with the lesson URL pre-filled — suggest clearer wording, report a bug, or request more depth. The course keeps improving thanks to learners like you.

Suggest an improvement on GitHub