Turn spike results into action

If you skipped the optional milestones (multiple endpoints or authentication), you still have everything you need: use the measurements and recovery category from Document spike results and measure recovery (and your Grafana Cloud k6 timelines from earlier milestones).

Knowing your recovery time is useful, but only if it leads to a decision. The response pattern you documented in the previous milestone maps directly to specific architectural strategies. A recovery time of 5 seconds calls for a different plan than a recovery time that never arrived.

Note

The tables below summarize follow-up actions by recovery category. Use the category you recorded in the previous milestone and read that section first. The time buckets (30 seconds, 3 minutes) are starting points from that milestone; tune them for your SLOs and traffic patterns.

Pick your recovery category

Use the category you recorded when you measured recovery time.

Recovery categoryWhat it usually meansYour first priority
Fast recovery (under 30 seconds)Metrics returned to baseline quickly after the burst.Find where burst capacity starts to break down (higher multiplier, more endpoints).
Slow recovery (30 seconds to 3 minutes)The system stayed up but needed time to drain backlog or refill pools.Connection pools, autoscaling timing, and queue depth.
No recoveryLatency or errors did not return to baseline before the test ended.Resource leaks, downstream failure, and whether you need load shedding.

Follow-up actions by recovery category

The following three sections expand each row of the table above. Read the one that matches the category you recorded.

Fast recovery (under 30 seconds)

Your system handled the spike well at this multiplier. The main question is where degradation begins.

ActionWhat to do
Raise the loadDouble the spike target (for example, from 100 to 200 VUs) and run again. Keep increasing until recovery time starts to grow.
Split by endpointCreate separate spike tests for endpoints with different profiles (database-heavy routes, uploads, third-party calls). Burst capacity varies by route.
Record the ceilingNote the highest multiplier where recovery stayed under 30 seconds. Treat that as the current burst boundary for this endpoint and share it with your team.

Slow recovery (30 seconds to 3 minutes)

The system remained operational but recovered gradually. That pattern often points to contention that clears over time. Here are three examples of resource contention that could produce slow recovery — many other causes are possible, so treat this as a starting point rather than a definitive list.

InvestigationWhat to look for
Connection poolsWhether database or HTTP client pools were sized for bursts or only steady load, and whether the spike exhausted them.
Autoscaling timingCompare your recovery window to how long new capacity takes to become ready. If instances need 90 seconds but recovery took 2 minutes, the autoscaler may be too slow. Tighter scale-up triggers or pre-warming can help.
Queue depthWhether request, message, or work queues grew during the spike and how long they took to return toward empty.

No recovery

Latency or error rates did not return to baseline during the observation period. Treat this as the highest-severity outcome: a real spike could cause a lasting outage. Here are three examples of areas you may want to investigate if your system is not recovering — again, these are common starting points, not an exhaustive list.

InvestigationWhat to look for
Resource leaksConnections, threads, or memory that are not released after the burst. Compare infra metrics before versus after the spike.
Cascading failuresWhether errors cluster on a specific downstream dependency that never stabilized.
Load sheddingWhether accepting every request during the burst made things worse. Rate limits or circuit breakers that shed excess load early can protect the core path.

Compare recovery to SLOs and alerting

Connect numbers from the spike run to how your team defines good and bad.

QuestionWhy it matters
Is recovery time acceptable for your SLO and error budget?A multi-minute degraded window can burn a large share of budget depending on traffic during that window.
Should recovery be its own objective?Some teams track mean time to recovery (MTTR) separately from availability. Your spike run is a controlled data point for that.
Did alerts fire during the test?If rules did not fire when you deliberately caused elevated latency, they may not fire in a real incident either.

Plan when to run spike tests again

Repeat spike tests after major changes so results stay current.

When to runWhy
After major deploymentsChanges to request paths, queries, or infra can shift burst behavior quickly.
Monthly or quarterlyDependency updates, data growth, and drift still change systems without a big release.
Before anticipated trafficLaunches, campaigns, or seasonal peaks warrant a rehearsal with a multiplier grounded in projections.

In the next milestone, you review what you’ve accomplished and explore next steps.

More to explore (optional)

At this point in your path, you can explore the following topics:

Correlate results in Grafana

Grafana dashboards for k6 results

Kubernetes monitoring in Grafana Cloud

Create an availability SLO


page 9 of 10