Skip to content
DevOpsSociety

A Technician Unplugged Every Fiber Path in 13 Minutes: Lessons From Google Cloud's us-central1 Outage

A technician unplugged every fiber path on the affected us-central1 routers in 13 minutes. What the Google Cloud outage teaches about staging changes across failure domains.

Published your local timeupdated

A Technician Unplugged Every Fiber Path in 13 Minutes: Lessons From Google Cloud's us-central1 Outage

Your service ran in two zones for exactly this reason. Then, on 1 September 2026, both zones lost the network together, and the cause had nothing to do with power, weather or software. A maintenance procedure that should have touched one router at a time touched all of them in one sitting. Google Cloud's us-central1 outage is a useful case study because the technology held up fine. The change process didn't, and your change process has the same weak spots.

Here's what Google says happened, why one procedural slip crossed a zone boundary, and what to change in your own change management this week.

What happened in us-central1

According to Google's incident report, the disruption ran from 07:41 to 11:52 US/Pacific on 1 September, a little over four hours. It hit two zones in the Iowa region, us-central1-b and us-central1-f. Google lists 15 affected products, and the list reads like a production stack: Compute Engine, GKE, Cloud SQL, Spanner, AlloyDB, Bigtable, BigQuery, Dataflow, Cloud Run, App Engine, Filestore, Apigee, Looker, VPC and Hybrid Connectivity.

The trigger was physical. Technicians were replacing optical transceivers on data-center routers as part of a scheduled capacity upgrade, and the plan was to do one router at a time over several days. A procedural error meant the technician received the full list of transceiver replacements across every router, with no instruction to sequence the work. So they worked through the list. Within 13 minutes, every fiber path across the affected devices had been unplugged.

Two more things went wrong. A standing rule said to stop if light was still detected on a fiber after unplugging it, which is the signal that the link is live and carrying traffic. That rule wasn't followed. And the maintenance workflow lacked the human and software verification steps that should have caught an unintended disruption while it was happening.

Google's automation then took roughly 19 minutes to move regional traffic away from the damaged zones. The remediation list is specific: finish moving network upgrade workflows onto a fully sequenced, automated orchestration system; complete work-stop alerting for any action that disconnects a live fiber; and cut the traffic-shift time to around five minutes.

That write-up deserves credit. Google named the procedural error, admitted a safety rule was skipped, and put a number on the detection gap. That candour is what makes the incident worth studying.

Two data-center halls linked by fiber bundles, with cables to both halls disconnected at the same time

One work order reached two zones

Multi-zone design rests on an assumption you rarely write down: whatever breaks zone B won't break zone F at the same moment. Power, cooling and physical separation mostly deliver that. But zones are also joined by things that aren't physical: shared control planes, shared config pipelines, shared on-call rotations, and shared maintenance plans.

This time the shared thing was a work order. One list, handed to one person, covering devices that served both zones. Once that list existed without sequencing, the zones had a common failure mode, and it was the change process.

Your stack has the same coupling, probably in more places than you'd guess. A Terraform apply that targets every zone's node pool in one plan. A Helm upgrade that rolls the DaemonSet across the whole cluster. An Ansible playbook with serial unset. A DNS or firewall change pushed globally because the tool makes global the default. Each of these turns "we run in three zones" into "we run in three zones until someone changes something". The AWS architecture guide on failure domains and multi-account design covers laying out the physical side properly. This incident is about the other half: the humans and pipelines that reach into every zone at once.

My position: if one change can touch more than one zone without a gate between them, you don't have zonal independence during that change. Plan your capacity and your SLOs as if you don't.

A safety check that relies on memory will eventually be skipped

"Stop if you see light on the fiber" is a good rule. It's cheap, it directly detects the dangerous condition, and it was already written down. It still failed, because it depended on a person remembering to do it, under time pressure, while working through a list that looked routine.

That's the gap between a runbook step and an interlock. A runbook step says "check X before doing Y". An interlock makes Y impossible, or at least loud, until X is true. Google's own remediation moves in that direction: work-stop alerting fires when a live fiber is disconnected, whether or not anyone remembered to check.

Most teams have runbook steps pretending to be controls: "confirm the replica is caught up before promoting", "drain the node before patching". If a tired engineer can skip it, it's advice, not a control.

Blast radius was set by change scope

The plan was one router at a time. That sequencing was the real safety mechanism, more than any redundancy in the hardware. One router out of service is a capacity dent the network absorbs. All of them out in 13 minutes is an outage. The hardware was the same in both cases, and only the batch size differed.

This is the most transferable lesson. For most production changes, how much you change before you check is the variable that decides whether a mistake is an incident or a non-event. And batch size is often decided by accident: by what fits in a ticket, by whatever the tool defaults to, or by a list that got handed over whole.

Step in the failure chain

What should have stopped it

Why it didn't

Work order issued with every router on it

Sequencing built into the plan, one device per step

Procedural error; no instruction to sequence

First fiber pulled while still carrying light

Standing rule to halt if light is detected

Relied on a human; not followed

Further paths pulled on other routers

Verification between devices (human and software)

Those steps were missing from the workflow

Both zones lose network

Automated detection and traffic shift

Worked, but took about 19 minutes

Read down the middle column. Every control existed as intent. None of them was built into the thing doing the work.

Top row: a staged change takes down only the first rack. Bottom row: an unstaged change takes down every rack

What to change in your own change management on Monday

You can't change how Google sequences router maintenance. You can change how your own infrastructure changes move across zones. Five changes, roughly in order of payoff:

  1. Make zone the unit of rollout. Any change touching infrastructure in more than one zone should go zone by zone, with a soak period and a health check between each. That covers node pools, network policy, load balancer config, OS patching and database parameter groups. If your tooling can't express that, fix the tooling before the next big change window.

  2. Turn runbook checks into pipeline gates. Take your three most-used runbooks and find every "confirm", "verify" or "check". For each one, ask whether the pipeline could evaluate it and refuse to continue. Most of them can.

  3. Make the unsafe action hard, not just discouraged. Default serial to 1 in Ansible. Set maxUnavailable on DaemonSets and a PodDisruptionBudget on every stateful workload. Require an explicit, reviewed flag to target all zones at once, and alert whenever it's used.

  4. Watch for unintended impact during the change, not after it. Google's fix here is work-stop alerting. Your equivalent is an automatic halt when error rate or latency in the zone you just touched moves past a threshold, wired to stop the rollout rather than page someone who then has to stop it by hand.

  5. Test that zonal actually means independent. Once a quarter, pick a change your team makes routinely and trace every zone it touches. Then run a game day where one zone is degraded mid-change and see whether the pipeline halts or keeps going.

A rollout policy that encodes the first four points doesn't need to be clever. Something like this, expressed in whatever your deployment tool supports:

# Change policy for any infrastructure change spanning zones
rollout:
  unit: zone                      # never batch across zones
  order: [us-central1-a, us-central1-b, us-central1-f]
  soak_minutes: 30                # time for slow failures to surface
  pre_checks:
    - peer_zones_healthy: true    # refuse to start if another zone is already degraded
  halt_on:
    - zone_error_rate_increase_pct: 2
    - zone_p99_latency_increase_pct: 25
  all_zones_override:
    allowed: false                # flipping this needs a second approver and fires an alert

The peer_zones_healthy pre-check is the one teams skip, and it's the one that matters here. Taking one zone down on purpose is fine only if the others are fully up. Starting a zonal change while a peer zone is already struggling is how a planned action lines up with an unplanned one.

Another outage from the same month

The us-central1 outage wasn't September's only big cloud incident. On 16 September 2026, Salesforce had a disruption lasting roughly three and a half hours that affected logins and APIs, in the middle of its Dreamforce conference. Salesforce has not published a full root-cause analysis, so there's nothing to learn about its change process yet, and we won't guess. More incident analysis lives in the DevOpsSociety cloud section.

A decision rule to take away

Before approving any change, ask one question: if the person or pipeline making this change makes a mistake at step one, how many zones can it reach before something forces a stop? If the answer is "all of them", the change isn't ready, however good the runbook is. Google's own fix is to sequence the work automatically and alert on the unsafe action. Yours should be too.

Written by

DevOpsSociety Editorial Team

Editorial Team

The DevOpsSociety Editorial Team covers DevOps, cloud infrastructure, Kubernetes, AI infrastructure, platform engineering, cybersecurity, FinOps, and modern engineering practices. We publish practical insights, technical guides, architecture analysis, and research for engineers and technology leaders.

More from DevOpsSociety
The Infrastructure Briefing

Get the infrastructure briefing.

Practical DevOps, cloud, AI infrastructure and engineering insights, delivered weekly. Read by engineers and engineering leaders.

No spam. Unsubscribe anytime.