Putting servers in several regions does not define what the service can survive. Regional resilience depends on which failures are independent, where authority lives and what capacity remains after a loss. I would start with explicit failure scenarios and derive the topology, rather than treating a multi-region diagram as an availability guarantee.
Name the failure and the promise
A region can become unreachable to some users while remaining reachable to others. Its compute can be healthy while a shared identity service or global deployment makes the application unusable. A database can remain available for reads while losing the ability to accept safe writes. I would describe these as separate scenarios with separate expected outcomes. The promise might be continued writes after any one regional loss, bounded data loss during manual promotion or read-only degradation during a partition. Each promise implies different placement, replication and operating procedures.
AWS's fault-isolation documentation describes regions as isolation boundaries in its infrastructure model. That is a useful starting point, not proof that an application's dependencies are independent. A shared account policy, encryption-key service, DNS change or bad release can correlate failures across otherwise separated infrastructure. I would draw the dependency graph as well as the deployment map and identify components used by every region. The architecture is only as independent as the paths required to serve and recover the promised operations.
References: [1] AWS Fault Isolation Boundaries: Regions
Synchronous replication spends distance on the write path
A write that requires acknowledgements from another region must wait for communication across that distance as part of its protocol. Faster application servers cannot remove the network's contribution. The precise latency depends on leader placement, quorum choice, batching and the database's implementation. Spanner documents synchronous replication and the roles of replicas in reads and writes. I would use the actual product's topology and measured inter-region behaviour when setting latency expectations, rather than applying a generic local-database benchmark to a geographically distributed deployment.
Different operations can have different locality needs. A stale read may be served near the user under a documented staleness bound, while a strong read may need additional coordination. A write-heavy workflow may benefit from locating its application near the relevant authority even if some users are distant. The product decision is whether the consistency and failure-survival guarantees justify the extra latency for each operation. I would avoid promising every user local latency and globally current state without identifying the mechanism and assumptions that make the particular access path possible.
References: [2] Google Cloud Spanner replication
Failover capacity must exist before the failure
Suppose three equal regions each normally run at sixty percent of their usable capacity and traffic can be redistributed evenly. Total demand is 1.8 regions of capacity. Losing one region leaves two, so each would run at ninety percent under the simplified model. With only two equal regions at sixty percent, losing one leaves demand equal to 120 percent of the survivor's capacity. Those calculations ignore cache coldness, retry amplification and differences in workload mix, so they are optimistic planning examples rather than predictions of stable operation.
Autoscaling may help, but it relies on available quotas, control planes, images and regional capacity during the incident. I would distinguish capacity already running from capacity expected to appear after a request. Failover tests should include cold caches, connection establishment and the surge created by retried requests. A routing system can move traffic faster than the destination can absorb it. Gradual admission, load shedding and prioritisation may therefore be part of the regional failure contract, especially when the service cannot afford enough idle headroom to preserve every operation at its normal quality level.
References: [1] AWS Fault Isolation Boundaries: Regions
Traffic movement is not the whole cutover
DNS or load-balancer changes do not instantly move every existing connection. Clients cache answers, keep sockets open and apply their own retry policies. Background workers and scheduled jobs may use different endpoints from interactive traffic. I would list every path that creates work and define how it discovers current authority. The failover procedure also needs to handle requests whose outcomes were ambiguous at the moment of movement. Stable operation identifiers and reconciliation can prevent a new region from treating every retried request as entirely new business intent.
Failback deserves equal attention. After the failed region returns, it may contain stale state, old configuration and queued work from before the incident. Sending traffic back immediately can reintroduce the original inconsistency or duplicate effects. The region should rejoin through the system's supported synchronisation and authority protocol, with validation before exposure. A useful counterargument is that a simpler single-region system with strong backups may be easier to operate correctly. That can be true when the required recovery objective allows it. Regional complexity is justified by a concrete promise, not by the appearance of the diagram.
References: [1] AWS Fault Isolation Boundaries: Regions[2] Google Cloud Spanner replication
Exercise the model at the boundaries
A meaningful exercise removes a region's relevant dependencies and checks the promised behaviour, including database authority, traffic routing and capacity. Another partitions regions without killing their processes, because partial reachability exposes different risks from clean shutdown. Test a shared bad configuration and unavailable control-plane credentials to reveal correlations the map hides. Record which operations continue, which degrade and which stop safely, then compare that evidence with the stated contract. A successful health check in the surviving region is not enough to prove useful service.
I would leave the exercise with an updated failure model: assumptions confirmed, dependencies discovered, measured recovery times and capacity limits. The goal is not to claim immunity from every possible regional event. It is to make a specific set of failures predictable and survivable within a defined consistency, latency and data-loss budget. Multi-region architecture becomes valuable when those budgets drive placement and procedures. Without them, geographical duplication can add cost and coordination paths while leaving the application's most important shared failure untouched.
References: [1] AWS Fault Isolation Boundaries: Regions[2] Google Cloud Spanner replication
Sources and further reading
- AWS Fault Isolation Boundaries: Regions
Primary infrastructure guidance describes regional isolation boundaries. Application dependencies, capacity arithmetic and failure exercises are independent illustrative analysis.
- Google Cloud Spanner replication
Primary documentation explains synchronous replication and replica roles. The five-voter placement example is explicitly generic and is not a claim about a particular Spanner configuration.