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

Capstone Part 1 — Discovery & the Disposition Matrix

This is the first of five parts that plan and run one whole migration: getting Brambleside Veterinary Group — 22 clinics, one emergency hospital, 16 systems, and a colo contract that expires in nine months — out of Fort Rusty and into Cloudville. Part 1 is the part everybody wants to skip, and it is the part that decides whether the other four are calm or frightening. You will count the estate, draw what depends on what, decide what doesn’t move before you argue about anything else, and then give all 16 systems exactly one of the 7 R’s — each with a one-sentence reason and, crucially, the one fact that would flip it. Nothing here needs a cloud account. It needs a spreadsheet and about two focused hours.

☺ Explain it like I’m 10

Imagine a family with nine months to move out of a big old house. Before anyone touches a box, someone walks every room with a notepad and writes down two things for each object: what is it plugged into? and do we even want it? The bin bags and the “leave it in the garage for now” pile get filled first, because those things cost nothing to move — you don’t move them. Only then do you decide, for everything that’s left, whether to carry it as-is, buy a new one, or tweak it to fit. That notepad is the disposition matrix, and this page is you filling it in.

🐿️🦉Your hosts for this part: Nutty the Squirrel & Professor Owl — Nutty takes inventory and maps what secretly depends on what, and Owl chooses each app’s R and writes down why. It is exactly the division of labour they’ve had since the staff room: you can’t move what you haven’t counted, and you can’t count your way to a decision.
⚠ Where you’re starting, and what you’ll have when you’re done

Starting: nothing but the raw estate below — an inventory somebody typed up, a list of constraints, and a deadline. No decisions have been made. No R has been assigned. Nobody has drawn the dependency map yet, and nobody has checked whether anything on the list is still in use. Leaving this page: a dependency edge list for all 16 systems; a criticality-and-tolerance pass that says how long each one may be down and when; a 16-row disposition matrix where every row carries an R, a one-sentence rationale, and the single fact that would change the answer; a written, costed verdict on the Relocate temptation; and a rationalization tally showing how much smaller the estate got before a single box moved. Part 2 picks up from that matrix and designs the place all of it lands in.

What this part assumes, and what it produces

☺ Like you’re 10: A spreadsheet, a pen, and two hours. Nothing that costs money.

Tools you need: a spreadsheet and a text editor. That is the whole list. This is a planning-and-decision lab, and disposition is genuinely done in a spreadsheet — in real programmes it is done in a spreadsheet even when a six-figure discovery tool is also running, because the tool produces data and the spreadsheet is where the argument happens. You do not need a cloud account, a credit card, or any provisioned infrastructure for any part of this capstone.

Tools you may reach for, but must not depend on: if you happen to have a free-tier or read-only look at AWS Application Discovery Service, Azure Migrate, or Google Cloud Migration Center, open one and look at the shape of its inventory and dependency output — the column headings alone are instructive, because they are the columns a real assessment produces. See The Tools Landscape for what each one does. Nothing below requires them.

Theory this part is built on — skim any of these you haven’t read, or keep them open in a tab:

ReadFor
The 7 R’s (primary)What each R means, what it costs, and the decision criteria per app
The Journey — Process & FrameworksStop 1 — Assess: discovery, dependency mapping, portfolio assessment
What & Why We MoveTCO and the business case — the language the board reads your matrix in
Cloud-to-Cloud, Hybrid & RepatriationThe two Ashcombe rows, which are already in somebody else’s cloud
Anti-Patterns & Pitfalls“Migrating the junk” and “skipping discovery” — the two traps this page exists to prevent

What you produce: three artifacts, in this order — a dependency edge list, a 16-row disposition matrix, and a rationalization tally. Part 2 cannot start without the matrix, and Part 3’s wave plan is checked directly against the edge list, so these are not throwaway exercises.

⚠ Every number on this page is invented

Brambleside Veterinary Group does not exist. Its sizes, rates, utilisation figures and currency amounts were made up to make the exercise bite, and they are internally consistent with each other and with nothing else. Real cloud prices change monthly and vary by region, commitment and negotiation — the skill being practised is the method, not the number. Never carry a figure from this page into a real business case; carry the working.

The estate you’re moving — Brambleside Veterinary Group

☺ Like you’re 10: Twenty-two animal hospitals, one big computer room that’s closing, and sixteen computer systems that all need somewhere to go.

The canonical fact sheet lives on the hub, Move Brambleside — Start Here. Part 1 is the discovery part, so the whole of it is repeated here — every later part will only restate the three or four rows it needs.

The company

Brambleside Veterinary Group runs 22 small-animal clinics plus one 24-hour emergency hospital, all in a single country. Around 600 staff. Founded 1987. In 2023 it acquired Ashcombe Vets (3 clinics), which was never integrated — Ashcombe still runs its own booking site and its own tenant of the same practice-management software. IT is five people. The migration team is six, and one of the six leaves at month 3.

Fort Rusty

VMware vSphere 7 across 8 hosts, split between a converted server room at the flagship clinic and 8 racks in a colocation facility 40 km away. The flagship server room’s air conditioning has failed twice this year. This matters more than it looks: anything you decide to Retain has to be able to live at the flagship, because the colo is what’s closing.

The clock, the blackouts, and the money

ConstraintThe detailWhat it actually does to your plan
The colo contract ends 31 MarchNine months out. No renewal offered beyond a three-month month-to-month extension at 2.4× the current rate.A hard stop, not a target. Everything in the colo is out by then or it costs $33,120/month to stay.
Blackout window 1The two-week spring vaccination campaign, mid-March.Removes the two weeks immediately before the deadline. The schedule is nine months minus two weeks, at the worst possible end.
Blackout window 220 Dec – 3 Jan emergency-cover period.Removes a fortnight from the middle.
Downtime tolerancePIMS-Core ≤ 4 h, Sunday 02:00–06:00 only, never a Monday (clinics’ busiest day). BramblesideOnline ≤ 2 h. ClaimsFeed may miss one night. ImageVault reads must never break.Four hours on a Sunday is the tightest window in the estate, and it belongs to the biggest system.
Data residencyBoard policy: client and clinical data stays in-country, including the DR region.Constrains region choice and rules out some SaaS options outright. Check it per row.
Card dataPayments are taken by redirect to the processor’s hosted page. No cardholder data touches a Brambleside system.Keeping it that way is the cheapest correct answer. Any R that changes it drags a compliance programme into a nine-month move.
RetentionControlled-drug register: 7 years. Finance backups: 7 years.Two obligations that outlive the data centre and must be re-homed, not migrated.
NetworkClinics 10.20.0.0/16, colo 10.30.0.0/16. Ashcombe uses 10.0.0.0/16 — which is also the default VPC/VNet CIDR of every cloud console.A collision waiting to happen. Part 2 defuses it; note it here so it’s in the record.
Transfer capacityThe colo circuit is 500 Mbps but contractually shared. Brambleside can sustain at most 150 Mbps without burst charges — and the imaging archive must stay readable throughout.Part 4’s arithmetic. For now it just means “the 41 TB is not going over the wire casually.”
The moneyCurrent run-rate $42,000/month: colo $13,800 · flagship server room $2,400 · licensing amortised $16,300 · refresh fund and support $9,500.The board’s condition is that the post-migration steady-state run-rate is no worse than this. Part 5 has to prove it.

The inventory — 14 Brambleside systems and 2 Ashcombe systems

This is what the outgoing infrastructure lead typed up before he went on leave. It has not been verified. It is the honest starting point of most real migrations.

#SystemWhat it doesRuns onDataUsers / criticalityThe awkward fact
1PIMS-CorePractice management — appointments, clinical notes, billingVendor product; 4 × Windows Server 2016 + a SQL Server 2016 Enterprise cluster1.9 TBEvery clinician, every minute, in every clinicThe vendor now sells a hosted SaaS edition of the same product.
2ImageVaultX-ray and ultrasound archive, unbroken since 2004Aging NAS in the colo41 TB, growing ~900 GB/monthRead constantly during consults; reads must never breakPIMS-Core references it by UNC path. 78% of studies untouched in 24 months.
3LabBridgePolls the external reference lab for test results1 small VM, IPsec VPN to the lab< 5 GBResults flow into clinical records dailyThe lab allow-lists one fixed public IP. Changing it is their change-control, not yours.
4BramblesideOnlinePublic site, online booking, repeat prescription requests2 VMs + MySQL 5.7, behind an on-prem load balancer90 GBClients; the front door of the businessMySQL 5.7 is out of support. That’s true whether you migrate or not.
5RotaMasterStaff rota and shift swapsClassic ASP on Windows Server 2012 R212 GB~90 weekly usersWritten in 2011 by someone who left in 2015. No source control. No tests. No one knows how it works.
6ClaimsFeedNightly insurance claims batch, delivered by SFTPOracle Database 12c Standard Edition280 GBFinance; may miss one night without harmThe Oracle licence renews in month 7.
7StockCtrlConsumables stock plus the controlled-drug registerVendor app on SQL Server (Standard)140 GBEvery clinic, daily; the CD register is a legal recordFully supported, and the vendor explicitly supports cloud hosting. 7-year register retention.
8FileShareGeneral staff file serverWindows file server6.2 TB across 1.1 million filesAll staff, all day40% of it untouched in 5 years. The file count, not the size, is the constraint.
9BackupVaultBackup server plus an LTO tape libraryOn-prem, colo rackTapes on rotationNobody, until the day somebody needs a restoreHolds the 7-year finance retention. The obligation outlives the data centre.
10AD-DC01 / DC02Active Directory, DNS, DHCP2 VMs, one at the flagship, one in the colo< 5 GBEverything authenticates hereAlmost everything else on this list authenticates against it. It points at nothing.
11PrintSrvDispensing-label printers across 22 clinics1 VM at the flagship< 5 GBEvery dispensed medicine gets a labelLatency-sensitive and physically tied to printers in 22 buildings.
12BI-ReportsSSRS — 40 scheduled reports1 VM + SSRS400 GBClaimed “business-critical” by three departmentsThe execution log proves 31 of the 40 haven’t been opened in 18 months.
13VetLearnInternal CPD (continuing professional development) portal1 VM220 GBAll clinical staff, occasionallyA vendor SaaS equivalent costs less per year than running this VM.
14DevTestDevelopment and test environments11 VMs, running 24×7~1 TB total6 IT staff4% average CPU. Nobody has switched one off since 2019. Four have had no login in 12 months.
A1AshBookAshcombe’s online booking siteAlready running in a public cloud30 GBAshcombe’s 3 clinicsNot in Fort Rusty at all. Not affected by the colo deadline.
A2Ashcombe PIMSPractice management for the 3 Ashcombe clinicsSame vendor as PIMS-Core, separate vendor-hosted tenant300 GBAshcombe cliniciansConsolidating two clinical record systems is a patient-safety project, not an IT task.

Add it up and the estate holds roughly 50 TB of data, of which 41 TB is one archive. Hold that number; Part 4 does arithmetic with it.

Step 1 — Draw the dependency map before you touch the R column

☺ Like you’re 10: Before you decide which box goes where, find out which boxes have wires running between them. The wire you don’t know about is the one that snaps.

An inventory is a list. A dependency map is a list plus the edges between the items, and it is the edges that constrain everything downstream. Wave Planning puts it bluntly: you can’t batch what you haven’t mapped. Do this before you assign a single R, because half the R decisions are made for you by an edge you hadn’t noticed.

Write it as a flat edge list, not a diagram. Diagrams are for the steering committee; edge lists are what you can actually check a wave plan against, row by row, in Part 3.

# dependency-map.txt  —  one edge per line
# FROM -> TO | kind | frequency | what breaks if the edge stretches

PIMS-Core        -> ImageVault      | SMB/UNC path    | every study opened | consults get slow, then fail
PIMS-Core        -> AD-DC           | Kerberos auth   | constant           | nobody can log in
PIMS-Core        -> PrintSrv        | print queue     | every dispense     | no dispensing labels
BramblesideOnline-> PIMS-Core       | booking API     | constant           | online booking stops
BramblesideOnline-> MySQL 5.7 (own) | database        | constant           | site down
LabBridge        -> external lab    | IPsec, ONE allow-listed public IP | 15 min poll | results stop arriving
LabBridge        -> PIMS-Core       | writes results into the record    | 15 min      | results arrive nowhere
ClaimsFeed       -> PIMS-Core       | nightly billing extract           | 1x/night    | claims batch is empty
ClaimsFeed       -> insurer SFTP    | outbound batch                    | 1x/night    | claims not submitted
StockCtrl        -> AD-DC           | auth            | constant           | no stock system
StockCtrl        -> PrintSrv        | dispensing labels                 | every dispense | as above
RotaMaster       -> AD-DC           | auth            | constant           | no rota
VetLearn         -> AD-DC           | auth            | daily              | no CPD portal
FileShare        -> AD-DC           | share ACLs      | constant           | permissions collapse
BI-Reports       -> PIMS-Core (SQL) | scheduled read  | nightly            | 9 real reports go stale
BI-Reports       -> StockCtrl (SQL) | scheduled read  | nightly            | as above
BackupVault      -> (everything)    | backup agents   | nightly            | no recovery point
DevTest          -> AD-DC           | auth            | constant           | dev logins fail
AshBook          -> Ashcombe PIMS   | booking API     | constant           | Ashcombe booking stops
AshBook          -> (nothing at Brambleside)          | —           | — | this is a finding, not an omission

Now read the list back and answer three questions from it. These are the questions the edge list exists to answer, and every one of them changes an R:

QuestionWhat the edge list saysWhat it forces
What is the root?AD-DC. Six systems point straight at it, a seventh (BackupVault) reaches it through its -> (everything) edge, and it points at nothing.Identity is a Wave 0 problem. You don’t “migrate AD in wave 3” — you extend the directory before anything else moves, and Part 2 owns that decision.
What is the hub?PIMS-Core, with seven edges — three out and four in. It is the crown jewel and the most-connected node at once.Crown jewels move last, when the team is practised — but its edges have to have landed first, which is what makes the calendar tight rather than merely long.
What are the leaves?VetLearn, DevTest, RotaMaster and BI-Reports. Nothing at all points at them, and what they point at is only the directory — plus, for BI-Reports, two read-only nightly queries.Leaves are your pilot candidates. Part 3 will need one, and it should be a leaf you can roll back without telling a single clinician.
⚠ The edge that hides

PIMS-Core -> ImageVault is a UNC path, not an API. That means the coupling is a literal string — \\imagevault\studies\... — stored in a vendor product’s configuration and probably also baked into 20 years of database rows. A dependency expressed as an address is worse than one expressed as a service, because you can’t redirect it without either preserving the address or rewriting the data. This single line is the reason ImageVault can’t be treated as “just 41 TB of files,” and the reason Part 3 has to seed that archive months before PIMS-Core cuts over.

Step 2 — Criticality and downtime tolerance, before opinions

☺ Like you’re 10: For each thing, ask “if this broke right now, how long before somebody is really upset?” Write down the answer in hours, not adjectives.

Everyone will tell you their system is critical. The way through that is to stop asking for adjectives and start asking for two numbers: how long may it be down, and when is it allowed to be down. Those two, and not the word “critical,” are what constrain the plan — and they are the RTO conversation from Best Practices arriving early, where it’s cheap.

SystemTierDowntime tolerancePermitted windowHow you know (evidence, not assertion)
PIMS-Core0≤ 4 hSunday 02:00–06:00 only, never a MondayBoard-set. Clinics’ busiest day is Monday.
ImageVault (reads)00 for reads; writes may queueNone — no read outage is permittedA vet opening an X-ray mid-consult cannot wait.
AD-DC0~0 (redundant pair, tolerate one)Rolling onlySix systems authenticate directly against it; the backup agents make a seventh.
BramblesideOnline1≤ 2 hAny low-traffic nightBoard-set.
PrintSrv1≤ 1 h during clinic hoursOut of hoursNo labels means no dispensing.
StockCtrl1≤ 8 h with a paper CD register as fallbackWeekendExisting documented fallback procedure.
LabBridge1≤ 12 h (one polling cycle skipped)OvernightLab batches results; a missed poll catches up.
BackupVault1No outage window — restore capability must be continuousn/aRetention obligation is legal, not operational.
ClaimsFeed2May miss one nightAny nightBoard-set; insurer accepts a next-day batch.
RotaMaster2≤ 2 daysAnyRota is published weekly; a printed copy exists.
FileShare2≤ 1 working dayWeekendHelpdesk history: no P1 ever raised against it.
BI-Reports3≤ 1 weekAnySSRS execution log — see below.
VetLearn3≤ 1 weekAnyCPD deadlines are annual.
DevTest3≤ 1 weekAny4% average CPU.
AshBook / Ashcombe PIMS1Out of scope this roundNot in Fort Rusty; not on the colo clock.
◆ Key idea

“Business-critical” is a claim. An audit log is evidence. BI-Reports is declared business-critical by three departments and its own execution log says 31 of its 40 reports have not been opened in eighteen months. When a claim and a log disagree, the log wins — and your job in the meeting is not to win an argument, it’s to put the log on the screen and let it do the work.

Step 3 — Retire and Retain, before any other R

☺ Like you’re 10: Fill the bin bags and the “leave it in the garage” pile first. Every box you don’t carry is a box you never have to carry, unpack, or pay rent on.

This is the discipline you will resist, and it is the single highest-return half hour on this page. The 7 R’s makes the point in one line: the cheapest migration is the one you skip. So before anybody argues about whether PIMS-Core should be Rehosted or Repurchased — which is a genuinely hard argument that will eat an afternoon — do two fast, evidence-led passes that shrink the problem.

The Retire pass — what should simply stop existing?

Retire needs evidence, never intuition, because Retire is the only irreversible R. For each candidate, name the artefact that proves nobody needs it:

◆ Retire is not only a storage lever

Retiring 31 of 40 reports frees almost no bytes — BI-Reports is 400 GB either way. What it frees is 31 scheduled jobs, 31 things to re-point at a moved database, 31 potential cutover failures, and 31 conversations. Migration effort scales with the number of moving parts far more than with terabytes. Count things, not just gigabytes.

The Retain pass — what deliberately stays put, and where?

Retain is not “we didn’t get to it.” It is a decision with a stated reason and a stated review date, and in this estate it carries an extra condition most estates don’t have: anything Retained must be able to live at the flagship server room, because the colo is what’s closing. Retain is therefore a small, finite budget, spent in a room whose air conditioning has failed twice this year. Spend it on:

🐿️ Nutty’s inventory drill · 15 min

Before reading on, do the two passes on paper and write down two counts: how many of the 16 systems leave the estate entirely, and how many are left to argue about. Then write one sentence per Retire naming the evidence, and one sentence per Retain naming both the reason and the review date. If you can’t name the evidence, it isn’t a Retire — it’s a guess wearing a decision’s clothes, and it belongs in the “verify in month 1” pile.

Done honestly, those two passes take the estate from 16 systems to 11 before a single R has been argued about — and the eleven that remain are a fundamentally more tractable problem than the sixteen you started with.

Step 4 — The Relocate temptation, costed rather than dismissed

☺ Like you’re 10: There’s a way to move the whole house in one go without unpacking anything. It’s real, it works, and it’s usually the wrong answer here — but you have to prove that, not just say it.

Relocate is the R that moves an entire VMware estate into a cloud-hosted VMware environment without changing the machines inside it — AWS, Azure and Google Cloud all sell one. Somebody in the steering committee will propose it, roughly like this: “We have vSphere. They sell vSphere-in-the-cloud. Why are we spending nine months arguing about sixteen spreadsheet rows when we could lift the lot by Christmas?”

That is a serious question and it deserves a costed answer, not a sigh. Work it as a sub-exercise before you finish the matrix, because if Relocate is right, most of the matrix becomes irrelevant and you should find that out now.

TestRelocate-the-lotVerdict
Does it beat the clock?Yes, genuinely. It is the fastest way out of a closing data centre, and that is exactly what it’s for.✔ Its one real strength.
What does it carry?Everything — including the five systems you just decided not to move, the 31 dead reports, the cold 2.5 TB of FileShare, and 4 idle VMs at 4% CPU.✘ It carries your junk into a place where you rent it monthly. This is the “migrating the junk” anti-pattern with a purchase order attached.
Does it hit the board’s condition?Cloud VMware services are sold by the node, with minimum cluster sizes and term commitments. Sized for an 8-host estate plus 41 TB, this class of service lands at or above a $42,000/month on-prem run-rate, not below it.✘ It fails the board’s stated condition — “no worse than today” — before anyone argues about anything else.
Does it solve what’s actually urgent?No. MySQL 5.7 is still out of support. Oracle still renews in month 7. RotaMaster is still Classic ASP on Server 2012 R2. PrintSrv still needs to be near 22 sets of printers.✘ It moves the problems intact and restarts the clock on all of them.
What’s the honest alternative for buying time?The colo’s month-to-month extension: $13,800 × 2.4 = $33,120/month, so $99,360 buys three more months.Worth knowing to the dollar. It is a real lever, and it is cheaper than a bad architecture — but it ends on 30 June with nothing moved.
◆ When Relocate would be the right answer

Change one fact in the brief and the verdict flips: if the colo had given ninety days’ notice instead of nine months, Relocate the entire estate, then dispose properly from inside the cloud at leisure. Relocate is the correct answer whenever the deadline is shorter than the disposition work — you buy time with money and do the thinking afterwards, from a building nobody is evicting you from. Brambleside’s deadline isn’t shorter than the disposition work. Nine months is enough to dispose properly, so disposing properly is what you do. Write that reasoning down; it is the single most senior-sounding sentence in your whole pack, and a committee that has heard it will stop re-proposing Relocate every fortnight.

Step 5 — Assign the remaining eleven R’s

☺ Like you’re 10: Now, finally, decide how each leftover thing travels: carry it as-is, buy a new one, tweak it to fit, or rebuild it. And write down why, in one sentence, before you forget.

Eleven systems, one R each, forty minutes. Don’t polish — the fast path is explicit about this, and a rough matrix you can argue against beats a perfect one that arrives in month 3. Four working rules keep the pass honest:

  1. One R per system. Two R’s on one row means you haven’t decided, and Part 3 can’t schedule an undecided row.
  2. Except where evidence draws the line for you. A split is legitimate when a log, not your discomfort, says where the boundary is. In this estate that happens exactly three times — FileShare (access timestamps), BI-Reports (execution log), DevTest (logon audit) — and every one of them is Retire-then-something, never “a bit of both.”
  3. The support matrix beats your preference. If the vendor supports a product on IaaS only, then the R is Rehost regardless of how much you’d enjoy a managed database. Check the vendor’s support statement before you write the row, not after the migration weekend.
  4. Refactor is off the table before 31 March. Not because refactoring is bad — Modernization exists for a reason — but because refactoring during a forced data-centre exit means doing your two hardest projects simultaneously with the same six people, one of whom leaves at month 3. Park it; Part 5 picks it up as a 12-month roadmap, which is where it belongs.
⚠ Do not skip the last column

The column headed “What would change this answer” is the one that teaches, and the one a steering committee actually reads. Every row must name the single fact that would flip the decision — “Repurchase, unless the vendor’s hosted edition can’t meet the in-country residency policy, in which case Replatform.” A matrix without that column is a set of assertions. A matrix with it is a set of decisions with tripwires attached, and when one of those facts turns out differently in month 4 — and one always does — you re-open exactly one row instead of the whole document.

The artifact — your disposition matrix

☺ Like you’re 10: One row per thing, ten things written down about each. That’s the whole deliverable.

Ten columns, sixteen rows. Build it in a spreadsheet; the template below is the header row plus one worked example so you can see the shape and the tone of a good rationale.

System,Owner,Criticality,Downtime tolerance,Depends on,Data size,Licence/support state,Chosen R,Rationale (one sentence),What would change this answer

ClaimsFeed,Finance (M. Okafor),Tier 2,May miss one night,PIMS-Core billing extract; insurer SFTP,280 GB,Oracle 12c SE — licence renews month 7,Replatform,"The month-7 Oracle renewal is a forcing function we should use rather than pay through: a 280 GB batch workload with no vendor lock is the cheapest database in the estate to move off Oracle.","A schema conversion assessment showing heavy PL/SQL and >4 weeks of manual rework — then renew Oracle for one year, Rehost, and carry the licence cost openly into Part 5's run-rate."

A few notes on filling it in. Owner must be a person, not a department: a department cannot approve a cutover at 04:12 on a Sunday. Depends on is copied from your edge list, not re-derived from memory. Rationale is one sentence — if it needs two, you have two decisions hiding in one row. And What would change this answer is a testable fact with somewhere to check it, not a mood.

The rationalization tally

Under the matrix, add the count. It is four lines and it is what the board remembers:

Estate at start:            16 systems, ~50 TB
Retire:                      1 system  (+ 31 of 40 reports, 2.5 TB of cold files, 4 of 11 DevTest VMs)
Retain:                      4 systems (2 at the flagship, 2 already outside Fort Rusty)
--------------------------------------------------------------------
Systems actually moving:    11
Data actually moving:       ~47.5 TB   <-- the Retire pass barely dented it. See Part 4.
Refactored before 31 March:  0         <-- deliberate, and correct

Note the third-from-last line, and be honest about it in the meeting: the Retire pass removed five systems and about 2.5 TB. It did not touch the 41 TB imaging archive, because that archive is genuinely needed and genuinely enormous. Rationalization makes the schedule tractable; it does not make the physics go away. Part 4 is where the physics gets dealt with, and Drill — Size the Data Move is where you practise the arithmetic in isolation first.

Show the worked disposition matrix — all 16 rows

One defensible answer, not the only one. Two rows are marked : those are the ones where a second answer is genuinely defensible and the difference is a fact you don’t have yet. If your matrix differs on those two, you are not wrong — you are making a different bet, and the last column is where you say so.

SystemToleranceChosen RRationale (one sentence)What would change this answer
PIMS-Core≤ 4 h, Sun 02:00–06:00RehostThe vendor supports this product on IaaS only, and moving to their hosted SaaS edition is a clinical-data conversion plus a 22-clinic retraining programme that will not fit before 31 March.The vendor confirming an in-country hosted tenant with a migration slot before month 7 — then Repurchase, and you never touch a SQL Server Enterprise licence again. Ask them in week 1; the answer has a lead time.
ImageVault0 for readsReplatformLand it on a managed cloud file service that still presents an SMB/UNC path, so PIMS-Core’s hard-coded paths survive, and tier the 78% cold studies to archive storage — which is what makes Part 5’s cost case arithmetically possible.The PIMS vendor being unable to point at anything but a literal server name — then Rehost the NAS as a VM with attached disks, lose the tiering saving, and tell Part 5 early.
LabBridge≤ 12 hRehostA single small VM with one hard external constraint; the migration work is trivial and the real work is a conversation — allocating a static egress IP and getting the reference lab to re-allow-list it.The lab offering an authenticated API instead of IP allow-listing — then Replatform the connector to that API and delete the fixed-IP problem permanently. Either way, start it in Wave 0: their change-control is measured in weeks and it is not yours to accelerate.
BramblesideOnline≤ 2 hReplatformMySQL 5.7 is out of support whether or not we migrate, so move to a managed MySQL 8.0 and a managed load balancer and do the upgrade we already owe once, during a move we’re already making.An application-compatibility scan showing the booking code depends on 5.7-era sql_mode or GROUP BY behaviour — then Rehost 5.7 as-is to beat the deadline and replatform in Part 5’s roadmap year, with the out-of-support risk written down and accepted by a named person.
RotaMaster≤ 2 daysRepurchaseClassic ASP with no source control, no tests, and no living author, on an operating system that is itself out of support — there is nothing here worth carrying, and a rota SaaS costs less than one week of trying to understand it.An undocumented export feeding payroll. If one exists, the SaaS switch needs that integration rebuilt, which may push past 31 March — then Rehost as a time-boxed stopgap with a written sunset date and compensating controls for the 2012 R2 host, and finish the Repurchase in the roadmap year.
ClaimsFeedMay miss one nightReplatformThe month-7 Oracle renewal is a forcing function we should use rather than pay through; a 280 GB nightly batch is the cheapest database in the estate to move off a commercial licence.A schema-conversion assessment showing heavy PL/SQL and more than about four weeks of manual rework — then renew for one year, Rehost, and carry the licence cost openly into Part 5’s run-rate rather than hiding it.
StockCtrl≤ 8 h, weekendRehostSupported product, supported version, and the vendor explicitly supports cloud hosting — this is the clean lift the estate needs early to build the team’s confidence.The vendor offering a validated hosted edition that covers the controlled-drug register’s audit trail — then Repurchase, but after 31 March, because a CD register migration is a regulator-facing exercise and should not share a weekend with a data-centre exit.
FileShare≤ 1 working dayRetire the cold 40%, then Rehost the restLast-access timestamps draw the line, not us: 2.5 TB has not been touched in five years and should be archived and delisted, and the surviving ~3.7 TB moves as a straightforward file server.Whether the surviving share fits a managed cloud file service that clinics can still map as a drive letter — if it does, this row becomes a Replatform and one Windows server leaves the estate for good. Take that only if the estate can absorb one more platform change before March.
BackupVaultContinuous restore capabilityRetire the productYou do not migrate a backup product into a cloud that has its own; what you retire is the backup server, and what you re-home separately is the seven-year finance retention it happens to hold.Any of the seven-year tapes being readable only by this exact library and this exact software version — then you cannot retire it: you Retain one restore-capable instance until the retention clock expires, and that cost belongs in Part 5’s run-rate, visibly.
AD-DC01 / DC02~0Retain (this round)Identity is extended, not migrated: Part 2 stands up new domain controllers in the landing zone in Wave 0, and this pair is retained at the flagship until the last on-prem workload leaves.Nothing about the R — but the retire date moves if the flagship server room’s HVAC fails a third time, which is a risk that belongs in Part 3’s register with a named trigger.
PrintSrv≤ 1 h in hoursRetainDispensing labels are an edge workload physically tied to printers in 22 buildings, and putting the print path 40 km further away to satisfy a slogan is a decision we would spend a year regretting.The label printers supporting a cloud print connector that the dispensing software is validated against — then Repurchase and delete a server. Check the vendor’s validation list before assuming it; “it supports IPP” is not the same as “it is validated.”
BI-Reports≤ 1 weekRetire 31 of 40, then Replatform the 9The execution log settles the argument that three departments could not: nine reports are real and move to a managed reporting service pointed at the migrated databases, and thirty-one are decommissioned with the log attached as evidence.A regulatory or insurer reporting obligation hiding among the 31 — check before deleting, because “unopened” and “not required” are different claims. If one is obligated, it survives regardless of its usage.
VetLearn≤ 1 weekRepurchaseThe SaaS equivalent costs less per year than the VM it would replace, and this is the easiest win in the estate — 220 GB, no clinical dependency, and nobody would notice a week’s outage.The SaaS being unable to export CPD history in a durable format. That is a data-extraction task before the switch, not a change of R — but do it before you cancel anything, because CPD records are a professional-registration matter for 600 people.
DevTest≤ 1 weekRetire 4 of 11, then Rehost 7Four VMs have had no interactive login in twelve months and should never have survived 2019, and the seven that remain move as-is — on a 12×5 schedule, not 24×7, which is a Part 5 lever we can bank on day one.A release cadence needing overnight builds, which would put some of the seven back on 24×7. Ask the team before you write the schedule into the cost model, not after.
AshBookOut of scopeRetainAlready in a public cloud, unaffected by the colo clock, and moving it now would mean running a cloud-to-cloud migration concurrently with a data-centre exit for no deadline-driven reason.Which cloud it is in. If it sits in a different cloud from the one chosen on the fast path, a later consolidation carries an egress bill — price it now, in Drill D2, so the roadmap decision in Part 5 is a choice rather than a surprise.
Ashcombe PIMSOut of scopeRetainVendor-hosted, off the colo clock, and consolidating two clinical record systems is a patient-safety project with its own governance — attempting it inside a nine-month data-centre exit is how you do both badly.The Ashcombe tenant’s contract renewing before 31 March on a punitive multi-year term — a commercial clock can force an earlier consolidation, so check the renewal date in month 1, not month 8.

Tally: Retire 1 · Retain 4 · Rehost 5 · Relocate 0 · Repurchase 2 · Replatform 4 · Refactor 0. Sixteen rows, eleven systems actually moving, three rows carrying an evidence-led Retire alongside their main R, and two zeroes that are decisions rather than omissions.

The two zeroes, said out loud. Relocate: 0 — rejected on cost against the board’s stated condition and on the grounds that it would carry the five systems we just decided not to move; it would be the right answer on a ninety-day clock. Refactor: 0 before 31 March — deferred deliberately, because refactoring during a forced exit means running your two hardest projects at once with six people, one of whom leaves at month 3. Both zeroes go in the pack with those sentences attached. A reviewer who sees a blank cell assumes you forgot; a reviewer who sees “0 — here’s why” knows you decided.

What “done” looks like for Part 1, and where Part 2 picks up

☺ Like you’re 10: Every row filled in, nothing contradicting anything else, and you can defend the two hardest ones out loud.

Part 1 is done when all four of these are objectively true — check them, don’t feel them:

  1. All 16 rows carry an R. No blanks, no “TBD”, no row with two R’s that isn’t one of the three evidence-led splits.
  2. Every R is justified in one sentence, and every row’s last column names a specific, checkable fact that would flip it — with somewhere to go and check it.
  3. No row’s R contradicts the dependency map. Walk the edge list line by line against the matrix: nothing is Retired that something still points at, nothing is Retained whose only consumer is moving, and nothing sits alone in the cloud reading a UNC path 40 km away without that being an explicit, costed decision.
  4. You can defend the two you found hardest without saying “it depends.” Say what you decided, say what fact you’d check to change your mind, and say when you’ll check it. That sentence shape is the entire skill.

Everything you just built gets used:

PartWhat it does with Part 1’s artifacts
2 — The Landing ZoneDesigns the destination the 11 moving systems land in — boundaries, region and DR under the residency policy, the address plan that defuses Ashcombe’s 10.0.0.0/16, LabBridge’s static egress IP, identity, and four guardrails.
3 — The Wave PlanBatches those same 11 systems into Wave 0 plus four waves, and checks every wave directly against this page’s dependency edge list.
4 — The Data Move & Cutover RunbookMoves the ~47.5 TB that survived your Retire pass, and writes the minute-by-minute cutover for PIMS-Core — the row you found hardest here.
5 — Operate, Optimize & ModernizeBanks the Retire and Repurchase savings you just decided, and finally picks up the Refactor you deliberately deferred.

Want isolated practice on the hardest skill on this page before you commit to your matrix? Drill — Pick the Right R gives you ten system cards from ten unrelated organisations, three minutes each, each one hiding the fact that flips the obvious answer.

🎬 At the Migration Academy
🦊

Foxy: Sixteen rows and ten columns. Nine months on the clock. Why are we in a spreadsheet instead of moving something?

🐿️

Nutty the Squirrel: Because five of those sixteen aren’t moving at all, Foxy, and I can prove it with a log. That’s five systems the wave plan never has to schedule, five cutovers nobody has to be awake for. I found them in twenty minutes.

👺

Gizmo the Gremlin: Or! Relocate. The whole vSphere estate, one motion, done by Christmas. No spreadsheet required.

🦥

Sol the Sloth: Costed it. Node-based pricing, minimum cluster, term commitment, forty-one terabytes attached — it lands at or above forty-two thousand a month. That’s the one number the board actually set. It fails on their own condition before we even get to the four idle dev boxes it would carry along.

🦉

Professor Owl: Which doesn’t make it a bad R, Gizmo — it makes it the wrong R here. Ninety days’ notice instead of nine months and I’d relocate the lot tonight and dispose from inside the cloud afterwards. The deadline isn’t shorter than the thinking, so we do the thinking.

🐢

Timmy the Turtle: And every row gets that last column filled in. “Repurchase, unless the hosted edition breaks residency.” When month four proves us wrong about one thing — and it will — we re-open one row, not the whole document.

🐿️

Nutty: Sixteen down to eleven, Foxy. Now we move something.

Milestones

☺ Like you’re 10: Tick a box only when the thing is actually written down somewhere you could hand to somebody else — not because you thought about it.

Work these in order; each one uses the output of the one before. Progress saves in this browser.

0 / 10 milestones complete
1Write the one-paragraph brief in your own words
Read the estate above, then write four sentences without looking back at it: the deadline, the two blackout windows, the tightest downtime window in the estate, and the board’s money condition.
Done when: all four are right from memory. If the tightest window isn’t “PIMS-Core, four hours, Sunday, never a Monday,” read the constraints table again — that one line shapes Part 4.
2Build the dependency edge list
One line per edge: FROM -> TO | kind | frequency | what breaks. Twenty edges is about right for this estate.
Done when: you can name the root (one system everything points at), the hub (the most-connected system), and at least three leaves — from the list, not from memory.
3Do the criticality-and-tolerance pass on all 16
A tier, a downtime tolerance in hours, a permitted window, and — the column people skip — the evidence for each. No adjectives.
Done when: no cell contains the word “critical” without a number beside it, and every tolerance traces to a board decision, a log, or a documented fallback.
4Run the Retire pass — evidence only
For every Retire candidate, name the artefact that proves it: an execution log, an access timestamp, a logon audit. Count what leaves.
Done when: every Retire has a named piece of evidence, and you have written the sentence distinguishing “retire the backup server” from “retire the seven-year retention obligation.”
Concept: Retire · Trap: migrating the junk
5Run the Retain pass — and say where
Each Retain gets a reason and a review date. Then check the extra condition this estate imposes: can it actually live at the flagship, given the colo is closing?
Done when: nothing is Retained in the colo, and your estate has shrunk from 16 systems to 11.
Concept: Retain
6Cost the Relocate temptation and write the verdict
Four tests: does it beat the clock, what does it carry, does it meet the $42,000 condition, does it fix anything urgent. Then the one-sentence verdict, plus the change to the brief that would reverse it.
Done when: your verdict names a number and a condition, not a preference — and you have written down the clock length at which Relocate becomes the right answer.
7Assign an R to the remaining 11 — 40 minutes, no polishing
One R each. Set a timer. When it goes off, stop — a rough matrix you can argue against beats a perfect one that arrives in month 3.
Done when: eleven R’s exist, and any row you split is split by a log rather than by your own indecision.
Concept: The 7 R’s · Drill: Pick the Right R
8Fill the “what would change this answer” column — all 16 rows
One specific, checkable fact per row, with somewhere to go and check it. No blanks, including the Retire and Retain rows.
Done when: a colleague could pick any row at random, read that cell, and know exactly who to phone.
Concept: this page’s Step 5
9Cross-check the matrix against the edge list, line by line
Walk every edge. Is anything Retired that something still points at? Is anything Retained whose only consumer is moving? Is anything left reading a UNC path across 40 km without that being an explicit decision?
Done when: you have found at least one contradiction and fixed it. If you found none, you did the cross-check too quickly — start with the PIMS-Core -> ImageVault edge.
10Write the rationalization tally and hand off to Part 2
Four lines: systems at start, retired, retained, systems actually moving — plus the two zeroes (Relocate, Refactor) with a sentence each saying they are decisions.
Done when: you can say the tally out loud in fifteen seconds, and defend the two rows you found hardest without saying “it depends.”
🐢 Timmy’s checkpoint

1. Why are Retire and Retain decided before any other R, and what did those two passes do to the size of this estate? 2. This estate has exactly one system that sits at the root of the dependency map — name it, and say why that makes it a Wave 0 problem rather than a Wave 4 one. 3. Relocate would move the whole vSphere estate in a single motion and comfortably beat 31 March. Give the one-sentence reason it isn’t the default here, and name the change to the brief that would make it right. 4. Which column of the disposition matrix does a steering committee actually read, and what does a blank cell in it tell a reviewer?

Check your answers
  1. Because every system you don’t move is the cheapest possible win, and both decisions are made from evidence rather than argument — an execution log, an access timestamp, a logon audit — so they’re fast. Doing them first also shrinks what’s left to argue about: Brambleside goes from 16 systems to 11 before anyone debates a single hard R, and the eleven that remain are a genuinely more tractable problem than the sixteen you started with. Note what it doesn’t do: the Retire pass removes about 2.5 TB and leaves the 41 TB archive untouched. Rationalization fixes the schedule, not the physics.
  2. AD-DC01 / DC02. Six systems have an edge pointing straight at it, a seventh reaches it through the backup agents, and it points at nothing itself — it is the root of the dependency map. That makes identity a Wave 0 problem: you can’t cut over anything that authenticates against a directory that isn’t reachable from the new place yet. Note also that the answer is extend, not move — Part 2 stands up new domain controllers in the landing zone and the original pair is Retained at the flagship until the last on-prem workload leaves, then decommissioned with Fort Rusty in Part 5.
  3. Relocate is the right answer whenever the deadline is shorter than the disposition work; Brambleside’s isn’t — nine months is enough to dispose properly, and Relocate would carry every one of the five systems we just decided not to move, plus 31 dead reports, 2.5 TB of cold files and four idle VMs, into a place we rent monthly. It also fails the board’s own stated condition: node-based pricing with minimum cluster sizes and 41 TB attached lands at or above the $42,000/month run-rate rather than below it, and it fixes none of the urgent things — MySQL 5.7 is still out of support, Oracle still renews in month 7. Change that flips it: a ninety-day notice instead of nine months. Then you relocate the lot, buy time with money, and dispose properly from inside the cloud, from a building nobody is evicting you from.
  4. The last one — “What would change this answer.” Every other column states what you decided; that column states what you’d have to learn to decide differently, which is precisely the question a committee is really asking when it says “are you sure?” A blank cell tells a reviewer you forgot the row. A filled one — “Repurchase, unless the vendor’s hosted edition can’t meet the in-country residency policy” — tells them you decided, and gives them a tripwire, so when month four proves one assumption wrong you re-open exactly one row instead of the whole document. The same logic applies to the two zeroes in your tally: write “Relocate: 0 — here’s why” rather than leaving the line out.

Part 1 gave you the thing every later part is checked against: sixteen decisions, each with a reason and a tripwire, and an estate that shrank by five systems before anybody carried a box. Continue to Capstone Part 2 — The Landing Zone, which designs the place all eleven survivors are going to land in — and springs the 10.0.0.0/16 trap Ashcombe left for you. Or step back to Move Brambleside — Start Here for how the five parts and three drills fit together, and revisit The 7 R’s and Stop 1 — Assess for the theory behind what you just did.