New: Debug encrypted microservice traffic with Speedscale's eBPF collector Read the announcement

5 Questions to Ask Before the Next Cloud Outage

5 Questions to Ask Before the Next Cloud Outage


On October 20, a power failure in one of Google Cloud’s three London zones disrupted Revolut, Lloyds, HSBC and others for hours. One zone failed, errors spread region-wide, and Google warned customers they might not be able to create new workloads to fail over to.

Most teams find out how resilient they are during an outage, not before one. These five questions let you find out first.

1. Know your blast radius

You can’t protect what you can’t see. Before you test anything, you need an honest picture of what your system depends on.

Whiteboard of a simple architecture diagram next to a wall of tangled sticky notes showing the real dependencies, with a team asking what their services depend on

Question 1: What do our services really depend on?

Your architecture diagram shows the dependencies you chose. It rarely shows the ones you inherited: the auth provider your API gateway calls, the managed queue a library writes to, the payment processor’s own cloud region. Outages hide in those transitive dependencies.

Question 2: Which of those dependencies are single points of failure?

Once you have the list, ask where each one runs. A vendor hosted in one zone, a database without a replica in another, a config service every pod calls at startup: any of these can take you down even when your own services are spread across zones.

In London, one zone failed and the whole region saw errors.

How to answer it

Diagrams go stale. Network traffic doesn’t. Capturing real API traffic between your services shows every upstream and downstream call your application makes, including third-party APIs, managed databases and identity providers that never made it onto a whiteboard.

From that traffic you can build a dependency map based on observed behavior instead of memory. Then flag every call that leads to a single zone, region or vendor. That list is your blast radius.

2. Prove your failover works

Most teams have designed for resilience. Far fewer have tested it. A failover that has never run is a hypothesis.

Team in a pre-production room simulating a zone failure with production traffic replay and service mocks while a failover plan reads "hope" and "ask on Slack"

Question 3: When did we last simulate losing a zone, and with what traffic?

If the answer is “never” or “at last year’s game day,” you’re not alone. And if the test used a handful of synthetic requests, it proved less than you think. Hand-written scripts cover the paths someone thought to write. Real outages break the paths nobody thought of.

In London, Google’s first update took two and a half hours and offered no workaround.

Question 4: What happens when a dependency is slow, not down?

A dependency that fails fast is easy to handle. One that hangs for 30 seconds is not. Slow responses exhaust thread pools, pile up connections and trigger retries that make everything worse. Many “outages” are really cascading slowdowns.

How to answer it

Replay recorded production traffic into a pre-production environment. You exercise the real mix of requests, edge cases included, without touching production.

Pair that with service mocks built from the same recorded traffic. Now any dependency can return errors, time out or respond slowly on demand. Remove a zone, degrade a database, slow down the auth provider, and watch what your system does.

Because it’s all simulated, you can rehearse “this zone just disappeared” as often as you like, without coordinating with other teams or waiting for the next real incident.

3. Plan for the comeback

The outage isn’t over when the status page turns green. Recovery is its own stress test, and teams almost never rehearse it.

Four-phase outage lifecycle: normal traffic, zone outage, recovery surge (highlighted), steady state, with a note to replay captured traffic at 2x, 5x and 10x

Most teams plan for the outage itself. The surge after it is where a second failure often starts.

Question 5: Can our systems handle the surge when everything recovers at once?

Ops team scrambling as retries, queue backlogs and an autoscaler racing to catch up hit all at once after a zone comes back

When a zone comes back, it doesn’t return to normal traffic. Clients retry everything they queued. Message backlogs flush downstream all at once. Autoscalers that scaled down during the outage race to catch up. The result can be a second outage, caused by the recovery from the first.

Meanwhile your surviving zones may have been carrying far more load than they were sized for. If new capacity can’t be created during the incident, whatever you pre-provisioned is all you have.

In London, Revolut was still degraded after Google closed the incident.

How to answer it

Recovery traffic doesn’t look like normal traffic, so don’t test with normal traffic. Replay captured production traffic at two, five or ten times its usual volume to reproduce the spike. Watch whether autoscaling keeps up, connection pools hold and rate limits protect downstream services.

Then make it routine. Build these replay tests into your CI/CD pipeline so every release is checked against a recovery surge before it ships, not after the next outage shows it can’t handle one.

Don’t wait for the next outage to test you

The tools to answer all five questions exist: capture real traffic, replay it, mock what you can’t control, and scale it up. Here’s the checklist to bring to your next team meeting:

  • ☐ What do our services really depend on, including transitive dependencies?
  • ☐ Which of those dependencies are single points of failure?
  • ☐ When did we last simulate losing a zone, and with realistic traffic?
  • ☐ What happens when a dependency is slow, not down?
  • ☐ Can we handle the surge when everything recovers at once?

You don’t need to answer all five this week. Pick one and test it this quarter, before the next outage tests it for you.

Stop writing API mocks by hand

proxymock records real traffic from your running app and replays it as mocks — HTTP, gRPC, Postgres, Kafka, and more. Install in 30 seconds, no account required.