Hands-On Labs · The Capstone · Part 2 of 5

Capstone Part 2 — The Landing Zone

Part 1 decided what moves. This part decides where it lands — and it happens before anything travels, because a landing zone built after the first workload arrives is not a landing zone, it’s a cleanup project. You’ll make six decisions for Brambleside Veterinary Group and write each one down with its reason: the boundaries you carve the cloud into, the region and DR region the board’s residency policy actually allows, an address plan that has to dodge three existing networks and the cloud console’s own default, how the two worlds are wired together while both are alive, what order identity moves in, and the guardrails that turn “we’ll be careful” into something a policy engine enforces. You need a spreadsheet and a text editor. Nothing else — no cloud account, no card.

☺ Explain it like I’m 10

You’re moving house in nine months. Before the first box goes anywhere, you decide which rooms exist and what goes in each one, whether the new house is even allowed to be in this country, what the street address is (and you check nobody else on the street already has that number — because two houses with the same number means the post never arrives), how the phone line between the old house and the new one works while you live in both, who gets which keys, and which house rules are locked in so nobody can break them on a busy day. Do all of that first and moving day is boring. Skip it and every single box arrives somewhere nobody agreed on.

🦫🐦Your hosts for this part: Benny the Beaver & Pip the Hummingbird — Benny builds the new place before anything moves, and Pip works out how the two worlds are actually wired together while both are still alive. 🐢 Timmy sits in the corner asking, about every single decision, who owns that lock now?
⚠ Where you’re starting, and what you’ll have when you’re done

Starting: Part 1’s disposition matrix — 16 systems assessed, 5 marked Retain or Retired, 11 that need somewhere to land — and one cloud committed to, with a sentence saying why. Leaving this page: a one-page landing-zone design doc a colleague could build from without asking you a question; an address-plan table where you can prove no two ranges overlap; and a shared-responsibility table that says, layer by layer, what Brambleside still owns after the move. Part 3 starts exactly here: it sequences the 11 systems into waves, and every wave lands in the zone you design today.

What this part assumes, and what it produces

☺ Like you’re 10: You already know what’s moving. Now you draw the new house — on paper, with a pencil, before anyone hires a van.

This part assumes two things from Part 1. First, that every system carries a decided R, so you know which ones need a network at all — a Repurchased system lands in someone else’s cloud and needs identity and a contract from you, not a subnet. Second, that you have committed to one cloud. Not evaluated three. Committed to one, in a sentence, because a landing zone is a shape you can only draw once you know whose vocabulary you’re drawing it in. If you skipped that, go and do it now: read your chosen track — Migrating to AWS, Migrating to Azure, or Migrating to Google Cloud — and write one sentence naming the deciding fact about this estate. There is a worked example of that sentence in the answer key.

It produces three artifacts, and they are all documents:

#ArtifactWhat it has to survive
1The landing-zone design doc — one page, eight short sections, template supplied belowBeing handed to someone who wasn’t in the room, who then builds it without calling you
2The address plan — every range you own or will own, in one tableSomebody checking, line by line, that no two entries overlap — including networks you don’t control yet
3The shared-responsibility table — layer by layer, for each service model in the estateAn auditor asking “who patches that?” and “who can delete the backups?” about any row on it
⚠ Nothing here needs a funded cloud account

Every step in this part is paper, spreadsheet, or a text file. If you happen to have a free-tier or read-only account you may sketch the network module in Terraform and run terraform validate — it parses and type-checks with no credentials, creates nothing, and costs nothing. (terraform plan usually wants credentials, so don’t be surprised when it asks.) Reading a provider’s landing-zone reference architecture is also free. Do not provision anything. The skill in this part is the reasoning, and the reasoning is what gets graded on the night the colo lease ends.

The eleven systems that need somewhere to land

Here is Part 1’s output, restated so this page stands on its own. If your Part 1 answers differ in a row or two, use yours — the method is what carries, not the specific R.

#SystemR (from Part 1)Lands whereWhat it needs from the landing zone
1PIMS-Core — appointments, notes, billingRepurchase (vendor’s hosted edition)The vendor’s cloud — not yoursSingle sign-on against your directory; a contractual residency clause; a documented path to the image archive
2ImageVault — 41 TB imaging archive, +900 GB/monthReplatform to object storage, tieredProduction, primary regionHot and archive tiers; a file-protocol read path for legacy callers; customer-managed keys; reads that never break
3LabBridge — polls the external reference labRehostProduction, dedicated egress subnetOne static public egress address and an IPsec tunnel to the lab
4BramblesideOnline — site, booking, repeat scriptsReplatform (MySQL 5.7 → managed MySQL 8)Production, public edge + data subnetsInternet-facing load balancer; managed database in a private subnet; TLS certificates
5RotaMaster — staff rota, Classic ASP, 2011Repurchase (SaaS rota product)The vendor’s cloudSSO; an export of fifteen years of rota history; a decommission date for the 2012 R2 VM
6ClaimsFeed — nightly insurance claims over SFTPReplatform off Oracle 12c SEProduction (non-clinical)Outbound SFTP from a known, stable address; managed database; a billing extract from PIMS-Core
7StockCtrl — consumables + controlled-drug registerRehost (vendor supports cloud hosting)Production, primary regionSeven-year register retention that nobody on the project can delete
8FileShare — the hot 60% of 6.2 TB / 1.1 M filesRehost to a managed file serviceProduction, data subnetSMB, domain-joined — which means the domain has to already be reachable
9BI-Reports — the 9 reports anyone still opensReplatformProduction (non-clinical)A read replica or extract — never a direct connection to a production clinical database
10VetLearn — internal CPD portalRepurchaseThe vendor’s cloudSSO only; no network footprint at all
11DevTest — the 7 environments that survivedRehostNon-productionSchedulable (off at night); no clinical data; no route to production

And the five that aren’t moving, which still shape the design: AD-DC01/DC02 (Retain — but read Decision 5 before you assume that means “leave them where they are”), PrintSrv (Retain, latency-bound to the dispensing printers in 22 clinics), BackupVault and the tape library (Retain, holding the seven-year finance retention), AshBook (Ashcombe’s booking app, already in a public cloud — integrate, don’t migrate), and Ashcombe PIMS (vendor-hosted, consolidate at contract renewal, not during the nine months).

The constraints that actually do the work

☺ Like you’re 10: These eight facts are the reason the answer isn’t just “make a cloud account.”

ConstraintThe factWhat it forces in this design
ResidencyBoard policy: client and clinical data stays in-country — DR region includedRegion choice is a legal decision, not a latency one, and it has to be enforced by policy rather than promised in a slide
Downtime tolerancePIMS-Core ≤ 4 h, Sundays 02:00–06:00 only, never a Monday. BramblesideOnline ≤ 2 h. ClaimsFeed may miss one night. ImageVault reads must never break.Tiering — and note that ImageVault has no window at all, so its read path has to survive the move rather than be cut over
CardsPayments redirect to the processor’s hosted page; no cardholder data touches Brambleside systemsKeep it that way. The cheapest correct answer is the one that pulls nothing new into scope
RetentionControlled-drug register 7 years; finance backups 7 yearsAn append-only archive that outlives the project, in a boundary the migration team cannot delete from
NetworkClinics 10.20.0.0/16 · colo 10.30.0.0/16 · Ashcombe 10.0.0.0/16Ashcombe’s range is also the default VPC/VNet CIDR of every cloud console. Decision 3 is where that bill comes due
TransferColo circuit is 500 Mbps but contractually shared; ~150 Mbps sustainable without burst chargesConnectivity is not the bulk-transfer plan. The 41 TB is Part 4’s problem, and it does not travel over this link
The clockColo contract ends 31 March. Blackouts: mid-March vaccination campaign, 20 Dec – 3 JanAnything with a lead time you don’t control becomes a month-one item — see Decision 4
The teamSix people, one leaves at month 3, two are also on clinic support rotaThe topology has to be operable by four. Elegance you can’t staff is a liability, not a design
◆ Key idea

A landing zone is not “the cloud account we made.” It is the set of decisions that are expensive to change later — boundaries, addresses, identity, region, keys — made deliberately, once, and written down. Everything else in the cloud is cheap to change. That is the entire reason this part comes before any wave: you are front-loading exactly the decisions that get more expensive with every workload that lands on top of them.

Decision 1 — The boundaries: accounts, subscriptions or projects

☺ Like you’re 10: Rooms, not one enormous hall. But also not forty rooms when there are only four of you to clean them.

Every cloud gives you a top-level container that isolates things from each other — an account on AWS, a subscription on Azure, a project on Google Cloud — and a way to group those containers so a rule set once applies to all of them (Organizations OUs, management groups, folders). The design question is not “how many should we have?” It is: what is each boundary isolating, and from what? A boundary earns its place if it isolates a blast radius, a bill, or a regulatory obligation. If it isolates none of those, it is overhead a four-person team will pay for every week.

Two failure modes bracket the answer, and Brambleside can walk into either. One giant boundary holding everything means a mistake in DevTest can reach clinical data, and the finance director cannot be told what PIMS-Core costs. Twenty boundaries mean six people — five from month 3 — maintaining twenty sets of policies, twenty sets of network peerings, and twenty places for a guardrail to be quietly missing. For an estate of eleven systems and a team of six, the honest answer is a small number, named for what it isolates:

BoundaryWhat it isolatesWhat lands hereWho can change it
Platform / shared servicesThe plumbing everything depends on, from the workloads that depend on itNetwork hub, hybrid connectivity, DNS resolvers, the cloud domain controllers, key managementTwo named platform engineers; changes reviewed
Production — clinicalClinical and client data from everything elseImageVault, StockCtrl, FileShare, LabBridgeChange-controlled; no standing write access
Production — non-clinicalPublic-facing and back-office risk from clinical dataBramblesideOnline, ClaimsFeed, BI-ReportsChange-controlled
Non-productionExperiments from anything real — and a runaway bill from the production billDevTest (7 environments)Developers, freely, inside a budget
Security / log archiveEvidence from the people who might need to alter itAudit logs, flow logs, the backup vault, the 7-year retentionNobody on the migration team. Write-only from elsewhere

Five boundaries. Notice what the fifth one is for: the migration team has broad rights everywhere else, because they have to, and that is precisely why the record of what they did has to live somewhere they cannot reach. That is not distrust — it is the same reason a shop’s till roll isn’t stored in the till.

Notice also what is absent. PIMS-Core is the most important system in the estate and it has no boundary, because Part 1 marked it Repurchase: it lands in the vendor’s cloud. RotaMaster and VetLearn likewise. Roughly a third of this estate never touches your landing zone — which is a saving, and a trap, and Decision 6 and the shared-responsibility table are where you pay attention to it.

⚠ Watch out

Do not create a boundary per clinic. There are 22 clinics and they are not isolation domains — they are a cost dimension, and cost dimensions are what tags are for (Decision 6). Splitting infrastructure along an org chart is one of the most common and most expensive landing-zone mistakes: the org chart changes, the network doesn’t, and you spend the next two years peering apart something that never needed separating. See anti-patterns.

Decision 2 — Region, DR region, and the numbers per tier

☺ Like you’re 10: Which country the new house is in isn’t a preference. And the spare house has to be in the same country too.

The board’s policy is one sentence long and it decides most of this: client and clinical data stays in-country, DR region included. So before anything else, go and check a fact most learners assume rather than verify: does your chosen cloud actually have two regions in this country? Many countries have one. Several have none. That single lookup rewrites the DR design, and it is the first thing to put in the doc — with the date you checked it, because provider region maps move.

There are three honest outcomes, and each has a different design:

◆ Key idea: a cutover window is not an RTO

Brambleside’s “PIMS-Core ≤ 4 hours, Sunday 02:00–06:00” is a planned downtime tolerance — an agreed window for work you scheduled. RTO is how long an unplanned outage may last before it hurts, at 11 a.m. on a Monday with a waiting room full of animals. They are different numbers with different owners, and a design that uses one for both will be wrong in one direction or the other. Write both columns. Provisions has the RTO/RPO definitions; Part 3 uses the window column and Part 4 lives inside it.

Now tier the estate. Four tiers is enough; more than four and nobody remembers which is which.

TierSystemsPlanned cutover windowRTO (unplanned)RPODR pattern
1 — Clinical criticalPIMS-Core (vendor SaaS), ImageVault read path4 h, Sun 02:00–06:00, never a Monday · ImageVault: none4 h15 minWarm standby, or — for the SaaS — the vendor’s contracted RTO/RPO, written into your doc
2 — Business criticalBramblesideOnline, StockCtrl, LabBridge2 h (Online) · 4 h (others)8 h1 hPilot light
3 — Important, deferrableClaimsFeed, FileShare, BI-Reports, VetLearnClaimsFeed may miss one night48 h24 hBackup and restore
4 — No DRDevTestAnyBest effortRebuild from codeNone — and say so explicitly, so nobody pays for it by accident

The row that teaches is Tier 1. PIMS-Core is a Repurchase, so you do not build its DR — but you absolutely still own its numbers. Go and read the vendor’s service description, find the RTO and RPO they actually commit to (as opposed to the uptime percentage they advertise), and copy them into your table with the contract clause reference. If the vendor’s committed RPO is worse than 15 minutes, that is not a vendor problem you discovered — it is a Brambleside risk you accepted, and it belongs in the doc with a name against it. Repurchase moves the work. It does not move the accountability.

ImageVault is the other one worth staring at. Its tolerance is zero: reads must never break. That does not mean it needs the most expensive DR — it means it cannot have a cutover in the usual sense. Its read path has to be made to work from both sides and then quietly re-pointed, which is why Part 3 seeds it in month 2 while PIMS-Core doesn’t flip until Wave 4. Decision 2 is where you first notice that; Part 3 is where it becomes a schedule.

Decision 3 — The address plan, and the trap in the console

☺ Like you’re 10: Two houses with the same street number means the post goes to the wrong one, forever, and nobody can tell why.

This is the decision that is cheapest to get right today and most expensive to get wrong ever. Overlapping private address ranges cannot be routed between. Not “work badly” — cannot be routed. And you don’t find out on the day you allocate them; you find out months later, on the day you try to connect two things that were designed separately, at which point one side has to be renumbered while it is running.

Brambleside’s starting position:

NetworkRangeCan it be renumbered during the migration?
22 clinics10.20.0.0/16No — you cannot renumber a network while you are moving out of it
Colo (contract ends 31 March)10.30.0.0/16No — and it disappears anyway, so don’t spend anything on it
Ashcombe (never integrated)10.0.0.0/16Eventually yes, but not in these nine months. Accepted debt, with a trigger
The cloud console’s default network10.0.0.0/16It is created for you, in every new boundary, whether you ask or not

There it is. The default VPC / default VNet / default network that appears the moment a new account, subscription or project is created uses the same range Ashcombe already occupies. Nobody plans this collision — it arrives by default, in a boundary somebody created in a hurry, and it sits there harmlessly until the day you try to peer Ashcombe in and discover that a network you never designed is holding the address space.

The fix is two rules, and both belong in the doc:

  1. Delete the default network in every boundary, on day one, as the first action after the boundary exists. If you leave it, someone will use it — not maliciously, just because it is there and their VM needed a subnet on a Friday.
  2. Every range comes from one allocation table, and nothing is created outside it. One person owns that table. Addresses are free until they overlap, so reserve generously — reserving a range you never use costs nothing; needing a range you gave away costs a renumbering project.

Here is a worked allocation. Reserve one clean supernet for the entire cloud estate, then carve it:

RangePurposeOverlaps with
10.40.0.0/14Reserved supernet — the whole cloud estate, present and future (covers 10.40.x10.43.x)Nothing: clinics are 10.20, colo 10.30, Ashcombe 10.0
10.40.0.0/16Production — primary region
10.41.0.0/16Production — DR region (must differ from primary: during a failover test both are live)
10.42.0.0/16Non-production
10.43.0.0/16Platform / shared services — hub, resolvers, domain controllers

Then inside the primary production /16, a subnet plan that a colleague can implement without ringing you. Two availability zones, three tiers, and — the part people skip — explicitly reserved space that is not handed out:

SubnetRangeAddressesHolds
App tier, AZ-a10.40.0.0/204,096Application servers: StockCtrl, BI-Reports, BramblesideOnline app tier
App tier, AZ-b10.40.16.0/204,096The same, in the second zone
Edge / public, AZ-a10.40.32.0/221,024Load balancers only. Nothing else is allowed a public-facing subnet
Edge / public, AZ-b10.40.36.0/221,024The same, second zone
Data tier, AZ-a10.40.40.0/212,048Managed databases, the managed file service (FileShare)
Data tier, AZ-b10.40.48.0/212,048The same, second zone
Egress / NAT10.40.56.0/221,024LabBridge lives here, alone — see Decision 4
Private service endpoints10.40.60.0/24256Private links to managed services, so their traffic never crosses the internet
Spare10.40.61.0/2410.40.63.255768Unallocated — for the thing you haven’t thought of yet
Reserved10.40.64.0/1816,384A third availability zone, if you ever add one. Do not allocate.
Reserved10.40.128.0/1732,768Growth, acquisitions, the next Ashcombe. Do not allocate.
One reserved supernet · nothing overlaps · no defaults 🏰 Fort Rusty 22 clinics 10.20.0.0/16 Colo 10.30.0.0/16 lease ends 31 March Ashcombe 10.0.0.0/16 not routed — yet VPN — day one circuit — later ☁️ Cloudville — reserved 10.40.0.0/14 Platform / shared services 10.43.0.0/16 Production — primary 10.40.0.0/16 Non-production 10.42.0.0/16 DR — second region 10.41.0.0/16 🔒 Security / log archive — 7-year retention write-only from everywhere else · no network of its own · migration team cannot delete ✗ default 10.0.0.0/16 network deleted in every boundary, on day one — because it collides with Ashcombe, and nobody would ever have chosen it on purpose 10.20 · 10.30 · 10.0 on the left. 10.40 – 10.43 on the right. Check every pair; write the check down. Reserved-but-unallocated space is not waste — it is the only cheap moment to buy it.
⚠ The overlap check has to be written down, not remembered

Put a column in your address table headed “checked against” and list, for every row, the networks you compared it with — including Ashcombe, including the vendor’s hosted PIMS if it ever offers private connectivity, and including any range a future acquisition might bring. “I’m fairly sure it doesn’t overlap” is how the collision gets in. A table someone can audit in ninety seconds is how it stays out.

One consequence worth stating plainly: because the cloud lives in 10.40.0.0/14, Ashcombe’s 10.0.0.0/16 does not collide with it, and AshBook can be integrated later without a renumbering project. That is not luck — it is the payoff for spending twenty minutes on this table instead of accepting the default. Ashcombe’s range is still accepted debt (it collides with every future default network anyone accidentally creates), so record it as such, with the trigger that forces the fix: “renumber Ashcombe before it is connected to the hub, or before the next acquisition, whichever comes first.”

Decision 4 — How the two worlds are wired, and LabBridge’s one address

☺ Like you’re 10: While you live in both houses you need a phone line between them. And one of your friends will only ring one specific number — so that number has to move with you, and you have to tell them weeks ahead.

Two shapes of link, and you will use both, in this order. A site-to-site VPN — an encrypted tunnel over the ordinary internet — goes up in week one. It is cheap, it has no lead time, and it is enough for management traffic, directory replication and the trickle of application chatter during the hybrid period. Build it with two tunnels to two gateways, not one; a single tunnel is a single point of failure you designed in on purpose. A dedicated circuit (AWS Direct Connect, Azure ExpressRoute, Google Cloud Interconnect) is ordered in month one, because the lead time is weeks to months and it is not yours to compress, and it carries the steady-state hybrid traffic and the parallel-run period once it lands. Architecture Patterns covers the trade-off in general; the Brambleside-specific part is the sequencing.

⚠ Do not order a circuit to move the 41 TB

It is the reflex, and it is wrong here. The colo link is 500 Mbps but contractually shared, with ~150 Mbps sustainable; a dedicated circuit changes that number but takes months to arrive and starts a contract that outlives the colo. The imaging archive does not travel over any wirePart 4 does the arithmetic and puts it on an appliance. Order the circuit for the steady state, not for the move, and let Part 4’s numbers make that argument for you rather than a hunch.

The clinic path — the thing that disappears with the colo

Today, 22 clinics reach PIMS-Core by routing to the colo. After 31 March there is no colo. So somewhere in Wave 0 there has to be a new path from every clinic to the cloud — per-clinic internet plus a VPN or SD-WAN edge, or a re-homed hub — and it has to be built and tested before the last thing leaves the colo, not after. This is a genuinely easy item to miss, because it is not on the inventory: it isn’t a system, it’s a route. Write it into the doc as a named deliverable with an owner, or Part 3 will discover it in month 8.

LabBridge: one allow-listed IP, and the lead time you don’t control

LabBridge polls the external reference lab over IPsec, and the lab allow-lists exactly one fixed public IP address. In a cloud, outbound traffic from a VM normally leaves through a NAT gateway using a provider-assigned address which is not guaranteed to be stable. So there are two halves to this answer, and only one of them is technical:

  1. The technical half. Allocate a static, reserved public address (an Elastic IP, a Standard static Public IP, a reserved external IP — the names differ, the concept doesn’t), attach it to the NAT gateway or gateway endpoint that LabBridge egresses through, and put LabBridge in its own egress subnet (10.40.56.0/22 in the plan above) so you know precisely what else shares that address — ideally, nothing. Then check your account’s default quota for reserved public addresses, because a quota increase is itself a request with a turnaround time.
  2. The half that isn’t yours. The lab has to add the new address to their allow-list, and external labs run change control on a schedule measured in weeks, sometimes with a named window. Raise that change request in month 1. Ask for both addresses to be allow-listed simultaneously for an overlap period, so the new tunnel can be stood up and tested in parallel with the old one while the old one still works. Then cut over, watch a full nightly cycle succeed, and only then ask them to remove the old one — after the colo is gone, not before.
◆ Lesson to steal

Sort every item in the landing zone by whose calendar it sits on. Anything on somebody else’s calendar — the lab’s change board, the circuit provider’s provisioning queue, the PIMS vendor’s SSO onboarding team, a quota increase, a board sign-off on residency — goes into month 1 regardless of when it is technically needed. Things on your own calendar can be re-sequenced when you are late. Things on other people’s calendars cannot, and they are exactly the items that turn a nine-month plan into a ten-month plan in month eight.

DNS, which is a platform service and not an app problem

PIMS-Core references ImageVault by UNC path — which is to say, by a name that has to resolve identically on both sides of the link, for the entire hybrid period, or a vet in a consulting room gets an error instead of an X-ray. Hybrid name resolution therefore belongs in the platform boundary, built once: inbound and outbound resolvers (or conditional forwarders) so on-premises clients can resolve cloud names and cloud workloads can resolve on-premises names, with the forwarding rules written down. Solve it as plumbing, in Wave 0. Solve it per-application and you will solve it eleven times, differently, and debug it at 04:00.

Decision 5 — Identity: extend the domain first, federate second

☺ Like you’re 10: Don’t change the locks and move the furniture on the same day. If a key stops working you won’t know which change broke it.

Everything in this estate authenticates against AD-DC01/DC02: PIMS-Core, FileShare, StockCtrl, PrintSrv, every domain-joined Windows server. Part 1 marked AD Retain, and Part 2 is where you discover that Retain has an address. Retaining the domain means the directory survives unchanged — same forest, same accounts, same group memberships, nobody re-learns a password. It does not mean the domain controllers stay in a building whose lease expires on 31 March, or in a server room whose HVAC has failed twice this year.

So the order is:

  1. Extend the domain into the cloud. Stand up two domain controllers in the platform boundary, one per availability zone, joined to the existing forest, replicating over the VPN. Now the same domain exists on both sides. Every server that moves can domain-join locally instead of authenticating across a WAN link that is about to be switched off — which matters enormously for FileShare, whose managed file service has to be domain-joined before a single one of its 1.1 million files is useful.
  2. Keep one controller near the printers. PrintSrv is Retain and latency-bound to the dispensing-label printers in 22 clinics, so clinic-side authentication has to survive a WAN blip. A domain controller at the flagship covers that. The colo controllers are the ones that go.
  3. Then federate console access. Point the cloud’s identity service (IAM Identity Center, Microsoft Entra ID, Cloud Identity) at the directory, so humans reach the cloud console with their existing account and MFA, and no long-lived access keys exist for any person. Machines get roles, never keys — the same least-privilege habit Provisions describes, applied to identities that don’t have hands.
  4. Write down break-glass. Two emergency accounts, MFA, credentials sealed and stored physically, not federated — because the day federation breaks is precisely the day you need to log in and fix federation. Name who may open them, and what gets logged when they do.
  5. Retire the on-prem footprint last, and only after 31 March. AD is the last thing to leave Fort Rusty. But “Retain” has an expiry date, and writing that date down is Part 2’s job, not a problem to rediscover in Part 5.

Doing it in the other order — federate first, extend later — is the classic mistake, and its cost is diagnostic rather than technical: when a login fails during a wave, you cannot tell whether the app moved badly or the identity plumbing changed underneath it, because you changed both. Extend first and identity becomes the one thing that is the same on both sides of every cutover. That is what makes it a control variable instead of another suspect.

⚠ Repurchased systems still need an identity owner

PIMS-Core, RotaMaster and VetLearn all land in vendor clouds, and each needs SSO wired to your directory — SAML or OIDC, group mappings agreed, a joiner/leaver process that actually removes access when a nurse leaves. Every one of those is a conversation with a vendor’s onboarding team, which is somebody else’s calendar, which is a month-1 item. And note what you are buying: three fewer servers, three more integrations to own. That trade is usually worth it. It is never free.

Decision 6 — Four guardrails minimum, and two this estate makes non-optional

☺ Like you’re 10: A fence at the top of the cliff, not an ambulance at the bottom — and a fence somebody actually built, not one we agreed would be nice.

A guardrail is a rule the platform enforces, so nobody has to remember it on a busy Tuesday. Provisions splits them into preventive (refuses the bad thing) and detective (spots it and shouts). Mature setups run both. Brambleside needs at least these, and each one needs an owner and a way to prove it is on:

#GuardrailTypeWhy this estate needs itHow you know it’s on
1Tagging standard with a cost-centre key. Required on every resource: cost-centre, system (the Part 1 name), environment, data-class, owner (a person, not a team alias)Preventive — deny creation without themThe board’s condition is a run-rate no worse than $42,000/month. You cannot defend a bill you cannot break down, and Part 5 is built entirely on being able toTry to create an untagged resource in non-production. It fails
2Budget alerts with named human recipients — per boundary, thresholds at 50 / 80 / 100% of forecast, plus an anomaly alertDetectiveThe failure mode is not a slow drift, it is 11 DevTest VMs nobody switched off since 2019 reappearing in a new place. An alert addressed to “the cloud team” is addressed to nobodyTwo named people can each show you the last alert email they received
3Encryption and key ownership — at rest everywhere, TLS in transit, customer-managed keys for clinical and client data, key administrator ≠ data administrator, and key-deletion protection onPreventiveDeleting a key is the fastest way to destroy seven years of controlled-drug records. The interesting decision was never “is encryption on” — it is who holds the key and who can destroy itThe key policy names two different roles, and a deletion attempt enters a mandatory waiting period
4One logging destination everything writes to — control-plane audit, network flow, application logs, into the append-only archive boundary, retained seven yearsPreventive + detectiveRetention obligations outlive the project. And a compromised production credential must not be able to delete either the evidence or the backupsNobody on the migration team holds a delete permission on that store. Test it: try, and fail
5Region lock — resource creation refused outside the approved in-country region(s)PreventiveThis is what turns the board’s residency policy from a promise in a slide into a thing that cannot be violated by an engineer in a hurry at 17:55Attempt to create anything in a foreign region. It is refused, and the attempt is logged
6No default networks; CIDRs come from the allocation tablePreventiveDecision 3’s whole argument, made permanent. Otherwise the collision walks back in the next time somebody creates a boundary in a hurryEvery boundary’s default network is absent, and a network created outside the table is refused

Six is not a lot. The discipline is not the count — it is that every row has a name in the owner column and a testable “how you know”. A guardrail you have never tried to violate is a belief, not a control.

🦫 Benny’s workshop · 10 min

Take guardrail 4 and write the exact sentence you would say to an auditor who asks: “Show me that the person who ran the migration cannot alter the record of what they did.” One sentence, naming the boundary, the permission that is absent, and the test you ran to prove it. If you can’t write that sentence, the guardrail isn’t finished — and this is a five-minute problem now that becomes a six-week problem in an audit.

The line you still own: shared responsibility, written out

☺ Like you’re 10: The landlord fixes the roof. You still lock your own front door — and you still own everything inside.

Every one of Part 1’s R’s moves the line in the shared responsibility model to a different place, which means Brambleside ends the migration owning a different set of jobs than it started with — not fewer jobs, differently shaped ones. This table is the one that stops a team from cheerfully assuming somebody else is patching something. Fill it in for your chosen cloud; the shape is identical across all three.

LayerFort Rusty todayRehost (IaaS) — StockCtrl, FileShare, LabBridge, DevTestReplatform (PaaS) — ImageVault, Online, ClaimsFeed, BI-ReportsRepurchase (SaaS) — PIMS-Core, RotaMaster, VetLearn
Building, power, coolingBrambleside (and the HVAC has failed twice)ProviderProviderProvider / vendor
Hypervisor & hardwareBramblesideProviderProviderVendor
Guest OS patchingBramblesideBramblesideProviderVendor
Database engine patchingBramblesideBramblesideProvider (you still choose the version and the window)Vendor
Application code & configBramblesideBramblesideBramblesideVendor (you own the configuration you set)
Data content & classificationBramblesideBramblesideBramblesideBrambleside
Identity, access, joiners/leaversBramblesideBramblesideBramblesideBrambleside
Network config & firewall rulesBramblesideBramblesideBramblesideVendor (you own the allow-lists you request)
Encryption keysBramblesideBrambleside (customer-managed)Brambleside (customer-managed)Vendor — so read the contract and record it
Backup policy & restore testingBramblesideBramblesideBrambleside (the provider takes backups; you decide retention and you test restores)Brambleside — you must still verify the vendor’s restores
Region choice / residencyBramblesideBramblesideBramblesideBrambleside — via a contract clause, not a setting
RTO / RPO evidence for the boardBramblesideBramblesideBramblesideBrambleside — using the vendor’s committed numbers
◆ The whole idea

Read the bottom half of that table across. Six rows never change column no matter which R you chose: your data, your identities, your configuration, your residency, your restore testing, your evidence. Migration reshapes almost everything above them and nothing below. That is the sentence to put in front of a steering committee that thinks Repurchase means the problem went away — and it is the reason PIMS-Core, the system that leaves your infrastructure entirely, still has more rows in your doc than DevTest does.

The artifact: your one-page landing-zone design doc

☺ Like you’re 10: All six decisions, on one page, so somebody else could build it while you’re on holiday.

Fill this in. Keep it to one page — the discipline of a page is what forces a decision instead of a discussion. Every blank is a decision somebody has to make eventually; leaving it blank now just means making it at 04:00 later, badly.

# Brambleside Veterinary Group — landing zone, v1
Owner: __________   Date: __________   Review date: __________
Cloud: __________   Why (one sentence, naming the deciding fact about THIS estate): __________

## 1. Boundaries
| Boundary | What it isolates | What lands here | Who may change it |
|---|---|---|---|
|  |  |  |  |
Default network deleted in every boundary? Y / N — evidence: __________

## 2. Region & resilience
Primary region: __________   In-country? Y / N   Verified on (date): __________
DR region:      __________   In-country? Y / N   If no second in-country region exists, the accepted risk is: __________
Signed off by: __________ (board / DPO)

| Tier | Systems | Planned cutover window | RTO | RPO | DR pattern | Owner |
|---|---|---|---|---|---|---|
|  |  |  |  |  |  |  |

For every Repurchased system, the VENDOR's committed RTO / RPO and the contract clause it comes from:
| System | Vendor RTO | Vendor RPO | Clause ref | Acceptable? Who accepted it |
|---|---|---|---|---|

## 3. Address plan
| Range | Purpose | Region | Allocated by | Checked against (list every network) |
|---|---|---|---|---|
|  |  |  |  |  |
Reserved-but-unallocated (do not hand out): __________
Known overlaps accepted as debt, with the trigger that forces the fix: __________

## 4. Connectivity
Day one:  __________            Later: __________  (ordered on ______, lead time ______)
Clinic path after the colo exits, owner and date: __________
LabBridge static egress address: __________
  Lab change request raised on: ______   Both addresses allow-listed from ______ to ______
  Old address removed only after: __________
Hybrid DNS design (resolvers / forwarders, who owns them): __________

## 5. Identity
Domain: ______  Cloud DCs: ______ (how many, which zones)  On-prem DC retained at: ______
Console federation: ______   MFA enforced: Y / N
Break-glass accounts: ______ (how many, who may open them, what is logged)
Machine identity: roles / keys — and if keys, why: __________
SSO owner for each Repurchased system: __________

## 6. Guardrails
| # | Guardrail | Preventive / detective | Enforced by | Owner | How we know it is on (the test) |
|---|---|---|---|---|---|
|  |  |  |  |  |  |

## 7. Shared responsibility
| Layer | Brambleside owns | Provider / vendor owns | Evidence we keep, and where |
|---|---|---|---|
|  |  |  |  |

## 8. Open questions and accepted risk
| # | Item | Owner | Decide by | Consequence if we don't |
|---|---|---|---|---|
|  |  |  |  |  |

Give yourself 90 minutes for the first pass and do not polish. A filled-in page with three arguable answers beats a beautiful half page, because Part 3 can schedule around an arguable answer and can do nothing at all with a blank.

Show a worked landing zone for Brambleside

This is a model answer, not the model answer. It commits to Azure, because this estate is Windows Server, SQL Server and Active Directory nearly all the way down and the existing licensing may carry across under the vendor’s hybrid licensing terms — that possibility, not any price, is the deciding fact worth writing in the one sentence. Pick AWS or Google Cloud and the shape below is identical; only the nouns change, and the translation table at the end maps every one of them.

  1. The one sentence. “We are going to Azure because 9 of the 11 moving systems are Windows or SQL Server workloads authenticating to Active Directory, our PIMS vendor’s hosted edition runs there, and the identity path from our existing forest is the shortest of the three — the deciding factor is the estate we already have, not the platform we admire most.”
  2. Boundaries — five subscriptions under three management groups. Platform (hub VNet, VPN and ExpressRoute gateways, DNS Private Resolver, two domain controllers, Key Vault), Prod-Clinical (ImageVault, StockCtrl, FileShare, LabBridge), Prod-NonClinical (BramblesideOnline, ClaimsFeed, BI-Reports), NonProd (DevTest), Security (immutable log and backup archive, seven-year retention, no delete permission for anyone on the migration team). Management groups: Platform, Production (holds both prod subscriptions so one policy set covers them), Sandbox. Five boundaries, four people can run it, every one of them isolates a blast radius, a bill or an obligation.
  3. Region and DR. Primary: the in-country region, verified on the date in the doc. DR: the second in-country region if one exists. If it does not — which is the common case — then: zone-redundant deployment within the single region, geo-redundant backup restricted to in-country storage, and a board-signed statement that whole-region loss is accepted risk with a documented manual recovery path. The thing that is not acceptable is a DR region outside the country with the residency policy left unamended. Tiers exactly as the table above: Tier 1 warm standby / vendor-contracted, Tier 2 pilot light, Tier 3 backup-and-restore, Tier 4 none, stated explicitly so nobody pays for it by accident.
  4. PIMS-Core’s numbers. Read the vendor’s service description, copy their committed RTO and RPO into the tier table with the clause reference, and get a named person to accept them. If their RPO is worse than 15 minutes, that is now a recorded Brambleside risk with an owner — not a vendor problem you noticed and moved on from.
  5. Address plan. Supernet 10.40.0.0/14. 10.40.0.0/16 prod primary, 10.41.0.0/16 DR, 10.42.0.0/16 non-prod, 10.43.0.0/16 platform hub. Subnets in the primary /16 exactly as the table above, including the reserved 10.40.64.0/18 and 10.40.128.0/17 that are deliberately not handed out. Checked against: clinics 10.20.0.0/16, colo 10.30.0.0/16, Ashcombe 10.0.0.0/16, and the console default 10.0.0.0/16 — which is deleted in all five subscriptions on day one and blocked by policy thereafter. Accepted debt: Ashcombe stays on 10.0.0.0/16, trigger to fix = before it is peered to the hub, or before the next acquisition, whichever comes first.
  6. Connectivity. Week 1: site-to-site VPN, two tunnels, BGP, to the hub. Month 1: ExpressRoute ordered — for steady state, explicitly not for the 41 TB, which goes by appliance in Part 4. Month 1–2: design and build the per-clinic path that replaces the colo hub, owner named, tested before anything else leaves the colo. Hybrid DNS: Private Resolver inbound and outbound endpoints in the platform subscription, conditional forwarders both ways, so the ImageVault UNC path resolves identically from a consulting room and from a cloud VM throughout.
  7. LabBridge. One Standard static Public IP, attached to a NAT gateway serving only the egress subnet 10.40.56.0/22, which contains only LabBridge. Quota for static public addresses checked in week 1. Change request to the reference lab raised in month 1, asking for both the old and new addresses to be allow-listed concurrently for a 60-day overlap. Cut over, watch three consecutive nightly cycles succeed, then request removal of the old address — after the colo exit, never before.
  8. Identity, in this order. (1) Two domain controllers in the platform subscription, one per zone, joined to the existing forest, replicating over the VPN. (2) One controller retained at the flagship for clinic-side and PrintSrv authentication. (3) Entra ID federated to the forest for console access, MFA enforced, zero long-lived keys for humans; managed identities for machines. (4) Two break-glass accounts, MFA, sealed credentials, not federated, opening logged and alerted. (5) Colo controllers decommissioned last, after 31 March, with the date written down today. SSO onboarding requests to the PIMS, rota and CPD vendors raised in month 1 — three separate vendor calendars.
  9. Guardrails. All six from the table, as Azure Policy with deny effects where the type column says preventive: required tags (cost-centre, system, environment, data-class, owner) denied on create if missing; budgets per subscription at 50/80/100% plus anomaly alerts to two named people; customer-managed keys in Key Vault with purge protection on and a key administrator who is not the data administrator; diagnostic settings forced to the Security subscription’s immutable storage with a seven-year policy; allowed-locations policy pinned to the in-country region; and no default networks, with address space constrained to the allocation table. Each row has an owner and a test that has actually been run.
  10. Shared responsibility. The table above, filled in, with one extra column: where the evidence lives. The six rows that never move — data, identity, configuration, residency, restore testing, board evidence — highlighted, because that is the half of the page a steering committee needs to read.
  11. Open questions carried forward. Does a second in-country region exist (decide by month 1)? What is the vendor’s contractual residency clause for hosted PIMS (month 1)? Who owns the clinic-path redesign (week 2)? Which two people receive budget alerts (week 2)? When does Ashcombe get renumbered (after 31 March, before the next acquisition)?

The translation table. If you chose differently, read down your own column:

Landing-zone pieceAWSAzureGoogle Cloud
The boundaryAccountSubscriptionProject
Grouping boundariesOrganizations OUManagement groupFolder
Blueprint / acceleratorControl Tower + Landing Zone AcceleratorAzure landing zone acceleratorLanding zones + Resource Manager
The networkVPCVirtual network (VNet)VPC network
Hub routingTransit GatewayVirtual WAN or hub VNet peeringNetwork Connectivity Center / Shared VPC
Site-to-site VPNSite-to-Site VPNVPN GatewayCloud VPN
Dedicated circuitDirect ConnectExpressRouteCloud Interconnect
Static egress addressElastic IP on a NAT gatewayStandard static Public IP on NAT gatewayReserved external IP on Cloud NAT
Hybrid DNSRoute 53 Resolver endpointsAzure DNS Private ResolverCloud DNS forwarding / peering zones
Policy guardrailsService control policies + Config rulesAzure PolicyOrganization Policy
Console federationIAM Identity CenterMicrosoft Entra IDCloud Identity
Key managementKMSKey Vault / Managed HSMCloud KMS
Immutable log archiveCloudTrail → S3 with Object LockAzure Monitor → immutable blob storageCloud Logging → log buckets with retention lock
BudgetsAWS BudgetsCost Management budgetsCloud Billing budgets

Service names and defaults move. Verify yours in the provider’s own documentation before you build anything — the reasoning above is what this lab is teaching; the nouns are just this year’s spelling of it.

🎬 At the Migration Academy
🦊

Foxy: The console already made us a network. It’s right there, it works, it’s free. Why are we deleting it and drawing tables?

👺

Gizmo: Exactly! Ten-dot-zero-dot-zero-dot-zero. Lovely round number. Everyone uses it. What are the odds it clashes with anything?

🐿️

Nutty: One in one, Gizmo. It’s on my inventory. Ashcombe has been sitting on 10.0.0.0/16 since 2023 — the acquisition nobody integrated.

🦫

Benny: And you can’t route between two networks with the same addresses. Not slowly — not at all. Today it costs twenty minutes and a spreadsheet. In month seven it costs renumbering a live clinic.

🐦

Pip: Meanwhile, the reference lab only rings one number. So I reserve a fixed address, park LabBridge alone behind it, and post the change request to the lab this month — their change board meets when it meets, not when we’re ready.

🦊

Foxy: Can’t we chase them in March if we’re running late?

🐦

Pip: You can chase your own calendar. You cannot chase somebody else’s. That’s the whole reason it goes in month one.

🐢

Timmy: And before anyone celebrates — PIMS-Core moving to the vendor’s cloud doesn’t hand them our homework. Residency, identity, restore testing, the evidence for the board: still ours. Write the clause reference in the doc or it isn’t true.

👺

Gizmo: Six decisions, a table of numbers and nobody has moved a single server. Worst moving day ever.

🦫

Benny: Best one, Gizmo. Everything we decide today is boring exactly once. Everything we skip is exciting at four in the morning.

Milestones

☺ Like you’re 10: Tick a box when the answer is actually written down somewhere, not when you’ve thought about it.

Work these in order — several depend on the one before. Progress saves in this browser.

0 / 10 milestones complete
1Commit to one cloud in a single sentence
Name the deciding fact about this estate — not the platform you like most. Write it at the top of the doc.
Done when: the sentence names a Brambleside fact (an OS, a directory, a vendor, a licence position) rather than a general merit.
Concept: AWS · Azure · Google Cloud
2Choose the boundaries, and say what each one isolates
Fill section 1 of the template. For every boundary write the blast radius, bill or obligation it separates — and who may change it.
Done when: no boundary’s “isolates” cell is empty or says “tidiness”, and four people could operate the result.
3Verify whether a second in-country region exists
Look it up in your provider’s region list. Record the answer and the date you checked, then pick the DR design that fact allows.
Done when: primary and DR are both named, both satisfy the residency policy, and any accepted risk has a person’s name against it.
4Write the tier table — cutover windows and RTO/RPO in separate columns
Four tiers, all 11 systems placed. Then add the vendor-committed RTO/RPO rows for every Repurchased system, with clause references.
Done when: the window column and the RTO column contain different numbers where they should, and Tier 4 says “no DR” out loud.
5Allocate the cloud supernet and prove no overlap
Reserve one supernet, split it per boundary and region, then fill the “checked against” column for every row: clinics, colo, Ashcombe, the console default.
Done when: someone else can audit the table in ninety seconds and find no pair that overlaps.
6Write the subnet plan for the primary region, including reserved space
App, edge, data, egress and private-endpoint subnets across two zones — plus the ranges you deliberately do not hand out.
Done when: the plan has at least one row marked “reserved — do not allocate”, and you can say what it is being kept for.
7Answer LabBridge in writing, with dates
Static address, dedicated egress subnet, quota checked — then the lab change request, the overlap period, and the date the old address is removed.
Done when: the change request has a month-1 date on it and the removal of the old address is scheduled after the colo exit.
8Write the identity order, the break-glass rule, and AD’s expiry date
Extend the domain, keep one controller near the printers, then federate. Name the break-glass accounts and who may open them. Date the colo controllers’ decommission.
Done when: the doc says why extending comes before federating, and “Retain” for AD has a date attached to it.
9Write the guardrails with an owner and a test each
Tagging, budgets, keys, one log destination, region lock, no default networks. For each: preventive or detective, who owns it, and the test that proves it is on.
Done when: every row has a name in the owner column and a “how we know” you could actually run.
10Fill the shared-responsibility table and hand the page to someone else
One column per service model in your estate, plus a column saying where the evidence lives. Then give the whole doc to a colleague and answer nothing.
Done when: they can describe the design back to you without asking a question — that is the actual pass condition for this part.

Done when

☺ Like you’re 10: Four things you can check with your own eyes, not four things you feel good about.

Part 2 is finished — objectively, checkably — when all four of these are true:

  1. No two CIDRs overlap. Every range in the address table has a “checked against” cell naming clinics, colo, Ashcombe and the console default, and a reader can verify every pair in ninety seconds without asking you anything.
  2. The residency policy is satisfied by both regions — or, if a second in-country region does not exist, the alternative design is written down and the residual risk carries a named person who accepted it.
  3. LabBridge has a documented answer with dates — a static address, a dedicated egress subnet, a change request raised in month 1, an overlap period, and a removal date that falls after the colo exit.
  4. Someone who wasn’t in the room could build it from your page. Hand them the doc, say nothing, and see whether they come back with questions. Questions are the finding; go and fill in the blank they found.
⚠ Two honest caveats before you carry this forward

First: every constraint, address and deadline in this exercise is invented for the lab. Brambleside Veterinary Group does not exist. The method is the transferable part; the numbers are scenery. Second: provider defaults, service names and region maps change — the default network CIDR, the quota on reserved public addresses, which countries have two regions. Verify each one against the provider’s current documentation on the day you design a real landing zone, and put the date you checked in the doc. That date is not bureaucracy; it is what tells the next person how much to trust the page.

🐢 Timmy’s checkpoint

1. Why is deleting the default network in every new boundary a landing-zone decision rather than housekeeping — and which specific Brambleside fact makes it urgent? 2. PIMS-Core has a 4-hour Sunday downtime tolerance. Why can’t that number also serve as its RTO? 3. LabBridge’s single allow-listed IP needs two things done about it. Name both, and say which one sits on a calendar you don’t control. 4. Part 1 marked AD “Retain”. Why does Part 2 still put domain controllers in the cloud, and what specifically goes wrong if you federate identity before extending the domain? 5. PIMS-Core becomes a vendor SaaS and leaves your infrastructure entirely. Name three responsibilities that stay with Brambleside anyway.

Check your answers
  1. Because the default network is created with a fixed CIDR — 10.0.0.0/16 on every major cloud — and address space is the one landing-zone decision that cannot be changed cheaply later. The Brambleside fact that makes it urgent is that Ashcombe, acquired in 2023 and never integrated, already occupies 10.0.0.0/16. Leave the default in place and someone will eventually put a workload on it; the day you try to route Ashcombe and the cloud together, one side has to be renumbered while it is running. Deleting the default on day one, and constraining all CIDRs to a single allocation table by policy, costs twenty minutes now.
  2. Because they measure different events. The 4-hour Sunday window is planned downtime — an agreed slot for work you scheduled, at the quietest hour of the quietest day, chosen deliberately to avoid Monday. RTO is how long an unplanned outage may last before it hurts, and unplanned outages happen at 11 a.m. on a Monday with a full waiting room. Using one number for both either over-engineers the cutover or under-engineers the DR design. Write both columns; Part 3 schedules against the window and the DR pattern is bought against the RTO.
  3. (a) The technical half: allocate a static, reserved public address, attach it to the NAT gateway serving a dedicated egress subnet that contains LabBridge and nothing else, and check the account quota for reserved addresses. (b) The half that isn’t yours: the reference lab has to add that address to their allow-list, and external labs run change control on their own schedule — weeks, sometimes with a fixed window. That second one is on somebody else’s calendar, which is why it is raised in month 1 and why you ask for both addresses to be allow-listed concurrently, so the new tunnel can run in parallel with the old before you commit. The old address is removed only after several successful nightly cycles, and after the colo exit — never before.
  4. Because “Retain” describes the directory, not the buildings. The forest, the accounts and the group memberships survive unchanged — nobody re-learns a password — but the colo lease ends on 31 March and the flagship server room’s HVAC has failed twice this year, so the controllers themselves have to live somewhere durable. Two cloud controllers (one per zone) plus one retained at the flagship for PrintSrv and clinic-side authentication is the shape. Federating first is the classic error, and its cost is diagnostic: when a login fails mid-wave you cannot tell whether the workload moved badly or the identity plumbing changed underneath it, because you changed both at once. Extend first and identity becomes the one variable that is identical on both sides of every cutover.
  5. Any three of: the data itself and its classification; identity and access, including a joiner/leaver process that actually removes a departed nurse’s account; residency — now enforced by a contract clause rather than a region setting, which means somebody has to read and record the clause; restore testing — the vendor takes backups, but only you can prove a restore works and only you carry the consequence if it doesn’t; the RTO/RPO evidence the board asked for, which you must now source from the vendor’s commitments; and the SSO integration and its configuration. The general rule: Repurchase moves the work and adds a vendor-management obligation. It never moves the accountability.

Part 2 gave you a destination: five boundaries that each isolate something real, a region pair the residency policy actually permits, an address plan that dodges three existing networks and the console’s own default, a connectivity answer with the lead-time items already in month 1, an identity order that keeps one variable still during every cutover, and six guardrails with owners and tests. Continue to Capstone Part 3 — The Wave Plan, which sequences the 11 systems into waves that land here, against a nine-month calendar with two blackout windows and a hard stop. Or step back to Part 1 if a row in the tier table made you want to revisit an R, or to Move Brambleside — Start Here for how the five parts fit together. For the theory behind today: Architecture Patterns (the foundation and the bridge), Security, Cost & Resilience (shared responsibility, residency, guardrails, DR, networking) and Best Practices (land in a secure, well-designed home).