Bỏ qua để đến nội dung

Cuối tuần chuyển giao

Cũng có bằng 19 ngôn ngữ khác

English · Español · 日本語 · Português (Brasil) · Français · Deutsch · Italiano · 한국어 · 简体中文 · Português (Portugal) · 繁體中文 · Bahasa Indonesia · Türkçe · Polski · ไทย · Українська · Español (México) · Français (Canada) · Deutsch (Schweiz)

Early morning in a river valley: the road now curves onto a new concrete bridge, while the old steel bridge beside it stands empty, its road closed by a line of barriers.
Hình ảnh được tạo bằng AI

Mô-đun 4 trong 5 của chương Chuyển đổi và đồng bộ dữ liệu, chương 10 của khóa học Data Architect. Mỗi mô-đun có thể đọc độc lập. Previous: Automation During the Load · Next: Getting Data Out: Keeping Another System in Step ⟲

Câu hỏi mô-đun này trả lời: Chuyển sang hệ thống mới thế nào, và chứng minh đợt chuyển đổi đã thành công ra sao?

Tối thứ Sáu. Người dùng đã về, đội chuyển đổi đang trực tuyến, và ai đó nói: “Chúng ta đã kiểm thử ba lần rồi. Bắt đầu thôi.” Được. Chính xác thì chúng ta sắp làm gì? Khi nào hệ thống cũ ngừng thay đổi? Khi nào là lần trích xuất cuối cùng? Ai tắt tự động hóa, ai khởi động từng lần tải? Nếu đến nửa đêm chúng ta chậm hai tiếng, hoặc 3 phần trăm tài khoản thất bại thì sao? Ai quyết định có tiếp tục không? Làm sao chúng ta chứng minh dữ liệu đúng, và khi nào người dùng được quay lại? Và nếu mọi chuyện tệ đi: chúng ta thoát ra thế nào? Chuyển giao không phải là “chạy đợt chuyển đổi”. Đó là một sự chuyển tiếp có kiểm soát từ một trạng thái đã biết sang một trạng thái khác.

Here’s our landscape one more time. This is the weekend that amber arrow runs, and then disappears. ⟲

The arrow that runs once Steve Trucking's landscape from Checkpoint 1, in the same places, the weekend RouteDesk retires: people on the left, Salesforce with Field Service in the middle with the Retail Partner portal and the tracking page, the integration layer from chapter 9 to its right, and the systems around it: Snowflake, FleetLink, the finance ERP, photo storage, and RouteDesk, retiring, with 8 years and about 5 million deliveries. One new arrow, in amber, the migration this module zooms in on, carries what's still open from RouteDesk into Salesforce, migrated once. Underneath: one arrow runs once and then disappears; a migration is an integration with an end. {"author": "Steve Simpson", "blueprint": "1.0.1", "builder": "standard 1.54.0", "built": "2026-10-30", "id": "DGM-DA-MG-10", "rights": "\u00a9 2026 Twinshark LLC. All rights reserved.", "template": "system-landscape 0.13.0", "theme": "stevetecharc 1.4.0"} ABOVE: IDENTITY, APPEXCHANGE, WEB PEOPLE RIGHT: INTERNAL SYSTEMS BELOW: CUSTOMER CHANNELS BOTTOM RIGHT: PARTNERS AND PROVIDERS Dispatch coordinators 45, inside 9 partner DCs Delivery crews ~700 on 330 trucks Care and office staff 100: service, ops, finance Retail Partner users ~300 at 3 partners Recipients ~1 million a year Corporate IdP SSO for office staff only Retail Partner portal Tracking page INTEGRATION Snowflake status history, analytics FleetLink raw GPS stays here Finance ERP invoices partners, pays crews Photo storage 4–5 million a year, off core RouteDesk retiring: 8 years, ~5 million deliveries Phone care agents Email email-to-case SMS and email provider day-before message, with a link Redrock REST API, webhooks Keystone CSV over SFTP Brightwave EDI through a third-party network Salesforce Field Service, one US org a link, no login office staff only calls cases in manifests in status out manifests in status out manifests in status out upserts, partner key status events status events latest position only delivery counts delivery counts photos, from the crews' app day-before, with a link what's still open: migrated once Salesforce a community people identity, apps, web an internal system a customer channel the integration layer starts at the system that opens the connection; the label says what moves a shared certificate: trust, no direct call the migration we zoom in on Checkpoint 1's landscape, the weekend RouteDesk retires. One arrow runs once and then disappears: a migration is an integration with an end. © 2026 Twinshark LLC · stevetecharc.com
Nhấp để phóng to

The weekend this arrow runs. On Monday morning, it’s gone. ⟲

But more changes that weekend than one arrow. The partners’ manifests stop landing in RouteDesk and start arriving through the integration layer. RouteDesk’s own outbound feeds, Keystone’s nightly status file and Redrock’s webhook, have to come from Salesforce instead. Coordinators route Monday’s deliveries in Field Service, not RouteDesk. And on Monday morning, 330 trucks leave the distribution centers on routes from the new system. Everything in this module is about getting to that Monday safely, and knowing what we’d do if we couldn’t. ⟲

Tôi muốn việc chuyển giao trên production gần như gây thất vọng. Chúng ta đã chạy quy trình, đo thời gian, thấy các lỗi, kiểm thử các cơ chế bỏ qua, đối chiếu kết quả và thực hành khôi phục hoạt động bình thường. Production là cùng một kịch bản với dữ liệu mới. Nếu chúng ta đang phát minh ra đợt chuyển đổi vào cuối tuần chuyển giao, chúng ta đã gặp rắc rối.

That takes a dress rehearsal, not “we loaded accounts in the sandbox.” Beginning to end: a final-style extract, transformations, quality checks, the load sequence, automation and integration controls, reconciliation, deferred processing, the return to normal mode, all timed, at production or representative scale, in a Full sandbox. Record how long each step took, what failed, what needed manual help, what confused people, where we waited, what surprised us. Then improve the runbook. The first rehearsal teaches you how the migration works; the next one should prove you learned. And because module 2 brought the keys back, a rehearsal doesn’t have to start from nothing every time: fix one transformation, reload just the rows it touched, and run the reconciliation again. For RouteDesk, that means the whole weekend in a Full sandbox: the extract, the preparation data store, the waves of module 1, the bypass of module 3, the switch of the partners’ feeds, and the reconciliation, with a stopwatch running. ⟲

Không phải “sáng thứ Bảy: chuyển dữ liệu”. Mà gần với thế này hơn:

BướcHành độngNgười phụ tráchThời gian dự kiếnBằng chứng / tiêu chí hoàn tất
1Confirm RouteDesk is read-only after Saturday’s last truckOperations lead10 minWritten confirmation; time of the last change recorded
2Final RouteDesk extract into the preparation data storeData team45 minCounts and control totals captured
3Confirm the bypass on the migration userSalesforce team10 minA test record saves with no status events sent
4Incremental load: Saturday’s changes, upsert by the partner keyMigration team30 minResults and new IDs back in the preparation data store
5Reconcile against the expected numbersData team and operations30 minCounts, totals and aggregate reports approved
6Switch the partners’ manifests and status feeds to the integration layerIntegration team30 minOne test manifest upserted and one status sent, per partner
……………
14Remove the bypass from the migration userSalesforce team10 minPermission set unassigned, and checked

Now we know what happens, who does it, how long we expect, and what proves each step is complete. That’s much stronger than a checklist that says “Load Work Orders.” Notice step 14. Module 3’s bypass is a permission to skip business rules, so taking it away is a runbook step with an owner, not something we hope someone remembers. ⟲

I call go-live Day 0: usually a Sunday or another off-hours day. Steve Trucking delivers six days a week, so Day 0 is the Sunday with no trucks on the road. Day +1 is after it; Day −1 and Day −7 are before it. And on any large load, I ask: do I have to wait until Day 0 to load all the data? If the load takes hours and the source keeps changing, I’m going to need an incremental anyway. So: ⟲

  • Day −7: the initial load. Load the bulk of the data a week early, kept invisible by sharing, so users and reports don’t see it. Smoke-test users (a system administrator) validate it in place. Ask the business what would be hurt by loading early; if the answer is “it would break my reports,” load it hidden. It’s much simpler to open up the sharing on Day 0 than to spend five hours loading a million records and all their children inside the window. ⟲
  • D−1: lần tải làm mới. Đưa sang những gì đã thay đổi từ D−7, và bảo vệ vạch xuất phát: người dùng có còn thay đổi nguồn không, tích hợp có đang ghi không, tác vụ theo lịch có đang chạy không? Hãy đóng băng nguồn, đặt nó ở chế độ chỉ đọc, hoặc xác định chính xác cách ghi nhận những thay đổi sau lần trích xuất.
  • Ngày D: lần tải phần thay đổi. Tải những gì đã thay đổi từ D−1 (đôi khi một lần tải phần thay đổi ở đầu khung và một lần cuối cùng ở cuối khung), đối chiếu, quyết định go hay no-go, mở chia sẻ, khôi phục hoạt động bình thường.

For RouteDesk, Day −7 is the Sunday before: the 190,000 delivered Work Orders go in, hidden by sharing, and smoke-test users check them all week. History barely changes, so most of the load is done before the weekend starts. Day −1 is Saturday night, once the last truck is back: RouteDesk goes read-only, and the refresh brings the week’s changes. Day 0 is Sunday: a small incremental, then the gates. ⟲

Day −7, Day −1, Day 0, and the rollback point Four days left to right. Day −7, the initial load: 190,000 delivered Work Orders, hidden by sharing, which smoke-test users check. A week of changes leads to Day −1, the refresh: the week's changes, with RouteDesk read-only once Saturday's last truck is back. Saturday's changes lead to Day 0, highlighted, a Sunday with no trucks out: the incremental, reconcile, go/no-go, open the sharing, and switch the partners' manifests to Salesforce. Go leads to Day +1, in coral and tagged "the rollback point": Monday, the first truck leaves on a route from Field Service, and RouteDesk stays read-only. Underneath: load early and hidden, refresh, then a small incremental on the day; rollback has a clock, and it runs out when the first truck leaves. THE CUTOVER THE POINT OF NO RETURN Day −7: the initial load 190,000 delivered Work Orders, hidden by sharing; smoke-test users check them Load early and hidden, refresh, then a small incremental on the day. Rollback has a clock: it runs out when the first truck leaves. HOW TO READ IT cutover day after this, going back means losing real work © 2026 Twinshark LLC · stevetecharc.com
Nhấp để phóng to

Day −7: most of the data, a week early, where nobody can see it yet. ⟲

Day −7, Day −1, Day 0, and the rollback point Four days left to right. Day −7, the initial load: 190,000 delivered Work Orders, hidden by sharing, which smoke-test users check. A week of changes leads to Day −1, the refresh: the week's changes, with RouteDesk read-only once Saturday's last truck is back. Saturday's changes lead to Day 0, highlighted, a Sunday with no trucks out: the incremental, reconcile, go/no-go, open the sharing, and switch the partners' manifests to Salesforce. Go leads to Day +1, in coral and tagged "the rollback point": Monday, the first truck leaves on a route from Field Service, and RouteDesk stays read-only. Underneath: load early and hidden, refresh, then a small incremental on the day; rollback has a clock, and it runs out when the first truck leaves. THE CUTOVER THE POINT OF NO RETURN Day −7: the initial load 190,000 delivered Work Orders, hidden by sharing; smoke-test users check them Day −1: the refresh the week's changes; RouteDesk read-only once Saturday's last truck is back a week of changes Load early and hidden, refresh, then a small incremental on the day. Rollback has a clock: it runs out when the first truck leaves. HOW TO READ IT cutover day after this, going back means losing real work © 2026 Twinshark LLC · stevetecharc.com
Nhấp để phóng to

Day −1: the week’s changes, and the source stops moving. ⟲

Day −7, Day −1, Day 0, and the rollback point Four days left to right. Day −7, the initial load: 190,000 delivered Work Orders, hidden by sharing, which smoke-test users check. A week of changes leads to Day −1, the refresh: the week's changes, with RouteDesk read-only once Saturday's last truck is back. Saturday's changes lead to Day 0, highlighted, a Sunday with no trucks out: the incremental, reconcile, go/no-go, open the sharing, and switch the partners' manifests to Salesforce. Go leads to Day +1, in coral and tagged "the rollback point": Monday, the first truck leaves on a route from Field Service, and RouteDesk stays read-only. Underneath: load early and hidden, refresh, then a small incremental on the day; rollback has a clock, and it runs out when the first truck leaves. THE CUTOVER THE POINT OF NO RETURN Day −7: the initial load 190,000 delivered Work Orders, hidden by sharing; smoke-test users check them Day −1: the refresh the week's changes; RouteDesk read-only once Saturday's last truck is back Day 0, Sunday: no trucks out the incremental, reconcile, go/no-go, open the sharing, switch the manifests to Salesforce a week of changes Saturday's changes Load early and hidden, refresh, then a small incremental on the day. Rollback has a clock: it runs out when the first truck leaves. HOW TO READ IT cutover day after this, going back means losing real work © 2026 Twinshark LLC · stevetecharc.com
Nhấp để phóng to

Day 0: a small incremental, then the gates. ⟲

Day −7, Day −1, Day 0, and the rollback point Four days left to right. Day −7, the initial load: 190,000 delivered Work Orders, hidden by sharing, which smoke-test users check. A week of changes leads to Day −1, the refresh: the week's changes, with RouteDesk read-only once Saturday's last truck is back. Saturday's changes lead to Day 0, highlighted, a Sunday with no trucks out: the incremental, reconcile, go/no-go, open the sharing, and switch the partners' manifests to Salesforce. Go leads to Day +1, in coral and tagged "the rollback point": Monday, the first truck leaves on a route from Field Service, and RouteDesk stays read-only. Underneath: load early and hidden, refresh, then a small incremental on the day; rollback has a clock, and it runs out when the first truck leaves. {"author": "Steve Simpson", "blueprint": "1.0.0", "builder": "standard 1.48.0", "built": "2026-10-27", "id": "DGM-DA-MG-41", "rights": "\u00a9 2026 Twinshark LLC. All rights reserved.", "template": "cells 0.4.0", "theme": "stevetecharc 1.4.0"} THE CUTOVER THE POINT OF NO RETURN Day −7: the initial load 190,000 delivered Work Orders, hidden by sharing; smoke-test users check them Day −1: the refresh the week's changes; RouteDesk read-only once Saturday's last truck is back Day 0, Sunday: no trucks out the incremental, reconcile, go/no-go, open the sharing, switch the manifests to Salesforce Day +1, Monday: the first truck leaves routes from Field Service; RouteDesk stays read-only the rollback point a week of changes Saturday's changes go Load early and hidden, refresh, then a small incremental on the day. Rollback has a clock: it runs out when the first truck leaves. HOW TO READ IT cutover day after this, going back means losing real work © 2026 Twinshark LLC · stevetecharc.com
Nhấp để phóng to

Day +1: the first truck leaves, and the rollback clock runs out. ⟲

This isn’t an unusual way to cut over; it’s the common one, under other names. Salesforce’s own guidance for moving a B2C Commerce site says to migrate as much data as you can “as close as possible prior to the actual cut-over. Ideally, only the delta from the previous day should be required to copy during the cut-over to minimize the down time” (B2C Commerce Realm Split FAQ (mở trong thẻ mới), Salesforce Help). Microsoft’s guidance for its own platform is a full migration “about a month before go-live, followed by weekly delta loads,” with the final delta “after freezing both source and target systems” (Data migration planning for go-live (mở trong thẻ mới), Microsoft Learn). And AWS’s database migration service builds the same idea in: a full load while it captures changes, then “shut down your applications, let the remaining changes flow through to the target” (Components of AWS DMS (mở trong thẻ mới), AWS; all three checked 2026-10-27). The timing changes with the volume: a month or a week ahead, weekly or daily deltas. The Salesforce twist is the one I add: load early hidden by sharing, so the data is in place and checked, and nobody sees it until Day 0. ⟲

Test knowledge. For a large migration with a short cutover window, load most of the data days early, hidden from users by sharing, then load only what changed (a refresh before the window, an incremental inside it). Freeze or capture changes in the source from the extract onward, and validate with test users before opening access. ⟲

For the cutover, the point is the gates around those loads. By Day −7 I don’t want to be designing the migration anymore: mappings, transformations, the load sequence, automation decisions, migration identities, reconciliation reports, the runbook, rollback criteria and known exceptions are stable, because the real loads have started. Things can still change, but every late change reduces rehearsal. At some point you stop improving the migration and start protecting the cutover. And know when the source stopped moving, or know exactly how you’ll capture what changed after your extract. ⟲

That second half is the watermark: the point through which each extract was current, so the next load knows what changed since. For RouteDesk, the watermark is the moment of each extract: everything RouteDesk changed after Sunday’s Day −7 extract is in Saturday’s refresh. That only works if RouteDesk records when a delivery last changed, so check that it does, and that every DC’s screens update it. If it doesn’t, compare snapshots: extract again and find the differences by key. Slower, but it’s a watermark you can trust. Without one, delta processing is guesswork. ⟲

Khi đó ngày D là thực thi. Đi theo runbook, ghi lại thời gian thực tế, ID tác vụ, số lượng, lỗi và quyết định. Nếu bước 17 thất bại, đừng nhảy sang bước 24 vì ai đó nghĩ như vậy tiết kiệm thời gian: hãy hiểu sự phụ thuộc, dùng quy trình khôi phục, cập nhật trạng thái. Đội lúc nào cũng phải nói được chúng ta đang ở đâu, cái gì đã xong, cái gì đã thất bại, tiếp theo là gì, và chúng ta có còn trong khung thời gian không.

Khóa người dùng ở ngoài khi bạn cần kiểm soát

Phần tiêu đề “Khóa người dùng ở ngoài khi bạn cần kiểm soát ”

Không ai thích thời gian ngừng hoạt động. Nhưng giả vờ hệ thống vẫn sẵn sàng trong khi chúng ta đang thay móng của nó có thể còn tệ hơn, và “chúng tôi muốn không có thời gian ngừng hoạt động” không được lặng lẽ biến thành “chúng tôi không biết phiên bản dữ liệu nào là có thẩm quyền”. Đôi khi chiến lược gọn gàng nhất là khóa người dùng ở ngoài, thực hiện chuyển giao, chứng minh kết quả và đưa họ trở lại. Bằng cách nào?

  • Những cách cứng: đóng băng người dùng, thay đổi giờ đăng nhập của họ, hoặc giới hạn dải IP. Đừng vô hiệu hóa họ: điều đó làm hỏng quyền sở hữu và mọi thứ gắn với nó.
  • Cách mềm: một login flow cho phép mọi người đăng nhập rồi đưa họ vào một phòng chờ: “hệ thống đang bảo trì; vui lòng quay lại sau”. Thân thiện hơn những thông báo lỗi khiến người dùng nghĩ tài khoản của họ bị hỏng. Đừng bao giờ gắn login flow đó cho các quản trị viên hệ thống; nếu nó hỏng, không ai vào được.
  • Luôn giữ một cửa sau: một nhóm quản trị viên hệ thống (và người dùng kiểm thử nhanh của bạn) vẫn có thể vào được.
  • Phiên làm việc vẫn còn. Khóa người dùng ở ngoài không kết thúc những phiên đã mở, nên hãy lên kế hoạch đưa những người vẫn đang làm việc ra ngoài: một thông báo, một hạn chót, hoặc, với phần phát triển tùy chỉnh, một cách để đăng xuất họ.

At Steve Trucking it’s Sunday, so the people to plan for are the care agents answering phones, the coordinators getting ready for Monday, and the 300 Retail Partner users who might log in to the portal to check a claim. Login flows are assigned by profile (Custom Login Flows (mở trong thẻ mới), Salesforce Help, checked 2026-10-27), so the partners’ profile can get the waiting room (“your deliveries are moving to a new system; back Monday at 6 a.m.”) while the smoke-test users and administrators come and go. ⟲

Đừng nghĩ ra điều này vào tuần trước đó. Hãy quyết định người dùng sẽ trải nghiệm gì, và nói cho họ biết.

Test knowledge. To keep users out during a cutover, freeze their accounts, restrict login hours or IP ranges, or use a login flow (assigned by profile) as a waiting room. Don’t deactivate users: it breaks ownership and what’s attached to it. Keep administrators and test users able to log in. ⟲

Hai giờ sáng, sau mười hai tiếng làm việc, không phải lúc để phát minh ra tiêu chí go/no-go. Hãy định nghĩa chúng trước khi chuyển giao: các đối tượng quan trọng đã được đối chiếu, tỷ lệ lỗi dưới ngưỡng được phê duyệt, không có lỗi dữ liệu nghiêm trọng nào chưa giải quyết, các quan hệ bắt buộc đã được xác thực, các tích hợp quan trọng đã được kiểm tra, tự động hóa đã được khôi phục và kiểm thử, hiệu năng chấp nhận được, đã xác thực nghiệp vụ, còn đủ thời gian cho các bước phía sau. Nếu không, “go” sẽ trở thành “đã đi đến đây rồi”. Đó không phải là kiến trúc. Đó là thiên kiến chi phí chìm.

“We have a rollback plan.” Good. Until when? We migrate, open Salesforce, and for six hours users create cases, update accounts, enter opportunities, change contact details, while integrations send data elsewhere. Can we restore Friday night? Not without losing legitimate work. Rollback gets harder the longer the new system runs, so define the rollback point: before it, we return to the previous state with the tested procedure; after it, recovery needs a different strategy. Rollback has a clock, and the runbook should show it. For Steve Trucking the clock is easy to read: until Monday’s first truck leaves on a Field Service route, we can still send the coordinators back to RouteDesk, which is why it stays read-only and untouched until then. After that, every delivery made, photo taken and status sent lives only in Salesforce, and going back would lose real work. From that moment, recovery means fixing forward. ⟲

Hoàn tác cũng không chỉ là xóa những gì bạn đã tải. Tự động hóa có thể đã tạo bản ghi con, tích hợp có thể đã gửi bản ghi đi nơi khác, người dùng có thể đã thay đổi bản ghi được chuyển đổi, tệp có thể đã được đính kèm, sự kiện đã được phát, bản ghi có sẵn đã được cập nhật. Những tác động phân tán là lý do các kiểm soát tự động hóa và tích hợp của mô-đun 3 là kiến trúc chuyển giao.

And what makes you roll back? In my experience it’s rarely the loader. It’s unknown data: you find out something key was missed, or a data feed was running that nobody accounted for. The best rollback plan is not needing it: know all of your key data, and every feed that touches it, before cutover. RouteDesk has two that are easy to forget, because they go out, not in: the nightly status file Keystone picks up, and the webhook that tells Redrock what happened. Retire RouteDesk without moving them, and on Monday night Keystone hears nothing. Nobody loaded the wrong data; a feed just stopped. ⟲

Sau lần tải, tôi không hỏi “API có báo thành công không?” Tôi muốn bốn loại bằng chứng, và tôi dùng cả bốn: số lượng, tổng, kiểm tra ngẫu nhiên và báo cáo tổng hợp.

Số lượng. Lẽ ra phải có bao nhiêu bản ghi, và thực tế có bao nhiêu? Tài khoản nguồn được chọn: 500.000. Bản trùng được hợp nhất: 20.000. Loại trừ theo chính sách được phê duyệt: 5.000. Dự kiến: 475.000. Đích: 475.000. Tốt, nhưng chỉ số lượng thôi chưa phải là bằng chứng; bạn có thể có đúng số bản ghi mà dữ liệu sai.

Tổng. Ở nơi con số quan trọng, hãy so sánh tổng kiểm soát: số tiền hóa đơn, giá trị đơn hàng, số dư còn mở, số lượng. Cả hai hệ thống đều có 100.000 hóa đơn, nhưng hệ thống cũ tổng cộng 412.800.000 đô la còn Salesforce là 398.100.000 đô la. Dừng lại. Tổng phơi bày những gì số lượng bỏ sót.

Spot checks. Look at real records, not just easy ones: a simple record and a complex one, a large customer and a small one, one with many children, one that was transformed, one involved in dedupe, one with unusual history. Trace each from source to target: fields, relationships, ownership, history, External IDs. Averages hide serious individual failures. ⟲

Báo cáo tổng hợp. So sánh hình dạng: tài khoản theo bang, đơn hàng theo năm, trường hợp theo trạng thái, khách hàng theo phân khúc, doanh thu theo tháng. Nếu nguồn nói có 82.000 khách hàng ở Arizona còn Salesforce nói 8.200, chúng ta có một manh mối: một mã bang không được ánh xạ, một năm bị loại trừ, một trạng thái bị chuyển đổi sai, một tệp bị bỏ qua. Số dòng có thể trông ổn trong khi sự phân bố kể ra câu chuyện.

For RouteDesk, each proof has its check, and each catches something the others miss. ⟲

Four ways to prove the data Four equal panels, four ways to prove the data. Counts, how many: at RouteDesk, 196,400 expected, less the quarantine, against those loaded; catches records lost or loaded twice; misses the right number of wrong records. Totals, how much: line items per partner, against what finance invoiced; catches values changed on the way; misses which records are wrong. Spot checks, real records end to end: a revision, an install, a merged duplicate, a claim; catches a wrong field or relationship on a real record; misses problems in records nobody picked. Aggregate reports, the shape: deliveries by DC by week, beside RouteDesk's; catches a DC or a status code that didn't map; misses one bad record in a good total. Underneath: no single proof is enough; set every expected number before the load, then use all four. {"author": "Steve Simpson", "blueprint": "1.0.0", "builder": "standard 1.48.0", "built": "2026-10-27", "id": "DGM-DA-MG-42", "rights": "\u00a9 2026 Twinshark LLC. All rights reserved.", "template": "comparison 0.4.0", "theme": "stevetecharc 1.4.0"} Counts how many AT ROUTEDESK 196,400 expected, less quarantine, against loaded CATCHES Records lost or loaded twice MISSES The right number of wrong records Totals how much AT ROUTEDESK Line items per partner, against what finance invoiced CATCHES Values changed on the way MISSES Which records are wrong Spot checks real records, end to end AT ROUTEDESK A revision, an install, a merged duplicate, a claim CATCHES A wrong field or relationship on a real record MISSES Problems in records nobody picked Aggregate reports the shape AT ROUTEDESK Deliveries by DC by week, beside RouteDesk's CATCHES A DC or a status code that didn't map MISSES One bad record in a good total No single proof is enough. Set every expected number before the load, then use all four. © 2026 Twinshark LLC · stevetecharc.com
Nhấp để phóng to

Each proof catches what the others miss. Use all four. ⟲

The aggregate report is the one I’d watch first. Remember module 1’s status codes: nine DCs, nine spellings. If DC 7’s deliveries by week come out 40 percent short against RouteDesk’s, the count for the whole load might still look close, but one DC’s DONE/INST didn’t map. ⟲

Test knowledge. Prove a migration with more than “no errors”: record counts against expected numbers set before the load, control totals on amounts that matter, spot checks of real records traced end to end, and aggregate reports that compare the shape of the data. Business owners validate it too. ⟲

Đi kèm là hai quy tắc. Thứ nhất, đặt các con số dự kiến trước khi tải (mô-đun 1): số lượng nguồn, các loại trừ đã được phê duyệt, bản trùng được hợp nhất, bản ghi bị cách ly, số đích dự kiến. Rồi so sánh và giải thích chênh lệch. Một con số dự kiến được bịa ra sau khi thấy kết quả không phải là đối chiếu; đó là hợp lý hóa. Thứ hai, không có lỗi nào vẫn có thể là sai. Ánh xạ Billing State vào Shipping State và mọi dòng đều được tải mà không có lỗi API nào: thực thi kỹ thuật hoàn hảo, kiến trúc sai. Đó là lý do đối chiếu nghiệp vụ là quan trọng, không chỉ nhật ký kỹ thuật.

Đội kỹ thuật có thể chứng minh số lượng, khóa, quan hệ và việc tải thành công. Người dùng nghiệp vụ nhận ra những điều chúng ta sẽ không nhận ra: “đây không phải là khách hàng đang hoạt động của chúng tôi”, “trạng thái đó không được dùng từ năm 2022”, “những tài khoản này thuộc sai khu vực”, “khách hàng này lẽ ra phải có ba hợp đồng đang hiệu lực”. Vì vậy xác thực nghiệp vụ là một bước đưa vào vận hành tường minh, với những người được nêu tên, những báo cáo được nêu tên, những bản ghi được nêu tên và một sự phê duyệt được nêu tên, không phải “khi nào rảnh thì xem qua nhé”.

Why not move everything on Day 0? The Number of Zeros. If the full migration takes 18 hours and the business tolerates 4 hours of downtime, we have a problem, and moving data earlier solves it. History goes in before cutover while the legacy system stays authoritative; the window only has to handle what changed, what couldn’t be preloaded, final relationships, validation and reconciliation. Instead of moving eight years of history during the outage, we’re closing a gap. ⟲

But preloaded data needs protection. If production data lands on Day −7, can users see it, edit it, can automation react, can integrations publish it, can agents act on it? The answer should be: not yet. So we keep it hidden by sharing, owned and controlled, with automation and integrations held back (module 3). A preload isn’t “put the records in early.” It’s put them in early without accidentally making the new system authoritative early. ⟲

Before cutover, the legacy system is authoritative and Salesforce holds a staged, increasingly current copy. During cutover we close the gap. At the agreed moment, authority moves, and afterward Salesforce is authoritative. For Steve Trucking that moment is Day 0: from then on, a delivery’s truth lives in Salesforce, and RouteDesk is a read-only record of the past. That’s where chapters 6, 9 and 10 meet: identity, authority, movement and cutover aren’t separate problems; they’re views of the same data lifecycle. ⟲

So don’t let two systems both think they’re master. If the legacy system stays writable after cutover, a coordinator changes a delivery window in Salesforce, another changes it in the legacy system, and both systems think they own it. Last write wins? Salesforce wins? Human review? If that’s unanswered, we haven’t finished a migration; we’ve created two writable copies. Chapter 9’s rule: technical permission isn’t architectural authority. ⟲

Not every migration needs ongoing synchronization. If we’re replacing the legacy system completely, Day 0 comes, the final deltas load, reconciliation passes, users move, the old system goes read-only and is eventually archived or retired. Don’t build a permanent integration because “migrations usually have integrations.” If the old system is dead, stop feeding it. That’s RouteDesk: on Monday it’s read-only, then it’s retired, and nothing syncs with it. The synchronization Steve Trucking does need is a different arrow, Salesforce to Snowflake, designed in chapter 9 and covered in module 5. ⟲

Migration ends; synchronization goes on In the migration region, a defined start and end, three days left to right. Day −7, the baseline: the gap between the systems is a week of changes. Day −1, the refresh: the gap is a day. Day 0, highlighted, the final delta: the gap is hours, and authority moves to Salesforce. After cutover, two cards. RouteDesk, read-only, then retired, tagged "the end": the migration ends, and there's nothing to sync. And Salesforce to Snowflake, in green, tagged "goes on": status changes every day, from the cutover watermark. Underneath: migration has a defined start and end; synchronization is an ongoing process to keep two systems consistent. {"author": "Steve Simpson", "blueprint": "1.0.0", "builder": "standard 1.48.0", "built": "2026-10-27", "id": "DGM-DA-MG-52", "rights": "\u00a9 2026 Twinshark LLC. All rights reserved.", "template": "cells 0.4.0", "theme": "stevetecharc 1.4.0"} MIGRATION: A DEFINED START AND END AFTER CUTOVER Day −7: the baseline the gap: a week of changes Day −1: the refresh the gap: a day Day 0: the final delta the gap: hours; authority moves to Salesforce RouteDesk: read-only, then retired the migration ends; nothing to sync the end Salesforce to Snowflake status changes, every day, from the cutover watermark goes on a week of changes a day's changes migration complete synchronization Migration has a defined start and end. Synchronization is an ongoing process to keep two systems consistent. HOW TO READ IT authority moves synchronization: no end date © 2026 Twinshark LLC · stevetecharc.com
Nhấp để phóng to

The gap closes, authority moves, and the migration ends. The Snowflake feed goes on. ⟲

The opposite happens too. A transition that lasts months, users active in both systems, business units moving at different times: synchronization may have to start before the migration is finished. Now the migration is still moving the historical baseline while synchronization keeps live records consistent, and that’s a much harder architecture. You need to know which process owns which changes, or the load and the sync overwrite each other. So define the boundary visibly: before this point we’re building the target state; after it we’re maintaining consistency. It might be a timestamp, a cutover event, a business-unit transition, an object-by-object switch, a watermark. If nobody can tell me whether a record belongs to the migration process or the synchronization process, we have overlapping ownership, and that’s where records get missed or processed twice. ⟲

Trở lại bình thường, rồi đến giai đoạn hỗ trợ tăng cường

Phần tiêu đề “Trở lại bình thường, rồi đến giai đoạn hỗ trợ tăng cường ”

Restore normal operation deliberately: automation, scheduled jobs, integrations, event consumers, agents, user access, in an order that matters. For Steve Trucking: take the bypass away from the migration user, switch the Change Data Capture subscriber back on from the cutover point (so Snowflake gets Monday’s changes, not the weekend’s load), run module 3’s one backfill, then let the coordinators in. Remember module 3’s catch-up storm: when an integration comes back, what does it think happened while it was off? When users come back, is every critical service actually ready? The return to normal is part of the cutover. ⟲

Rồi chúng ta đã vận hành, nhưng chưa xong. Trong một giai đoạn ổn định (gọi là hỗ trợ tăng cường, hypercare), hãy theo dõi lỗi chuyển đổi, lỗi tích hợp, tự động hóa bất ngờ, bản trùng mới, quan hệ bị thiếu, vấn đề hiệu năng, vấn đề dữ liệu do người dùng báo và sự trôi lệch trong đối chiếu. Rủi ro chuyển đổi không biến mất ngay khi người dùng đăng nhập.

Then clean up: temporary migration users and permissions, bypass settings, staging data, temporary scripts, migration-only configuration, files holding sensitive source data, temporary integrations, runbook access. Don’t leave migration scaffolding attached to production because “we might need it someday.” Temporary architecture needs an exit plan too. Don’t forget the preparation data store. After RouteDesk, it holds eight years of Recipients’ names, addresses and phone numbers in its raw tables. Keep what the retention policy says to keep, as evidence, then delete the rest, on a date someone owns. ⟲

Và hãy giữ bằng chứng: bản trích xuất cuối cùng, phiên bản phép chuyển đổi, tệp tải, kết quả tác vụ, tệp lỗi, báo cáo đối chiếu, các phê duyệt, runbook với thời gian thực tế, quyết định go/no-go và các ngoại lệ. Ba tuần sau sẽ có người hỏi một bản ghi đã sai từ trước đợt chuyển đổi hay sai vì nó. Bạn phải trả lời được. Tin, nhưng phải kiểm chứng không kết thúc khi lần tải hoàn tất.

AI có thể giúp theo dõi chuyển giao. Nó không quyết định go/no-go.

Phần tiêu đề “AI có thể giúp theo dõi chuyển giao. Nó không quyết định go/no-go. ”

AI hữu ích dưới áp lực chuyển giao: tóm tắt lỗi, phân loại lỗi, so sánh báo cáo, phát hiện bất thường, theo dõi runbook, chỉ ra những chỗ lệch so với lần diễn tập. Nhưng go/no-go kết hợp bằng chứng kỹ thuật, tác động nghiệp vụ, thời gian còn lại, vị trí so với điểm hoàn tác và mức chấp nhận rủi ro. AI có thể đưa bằng chứng lên bề mặt. Những con người chịu trách nhiệm đưa ra quyết định.

Ngoài kỳ thi: AI thay đổi điều gì. AI có thể giúp việc giám sát chuyển giao và đối chiếu nhanh hơn, đặc biệt bằng cách tìm khuôn mẫu trong các tập dữ liệu lỗi và xác thực lớn. Hãy giữ quyền sở hữu tường minh của con người đối với go/no-go, hoàn tác và việc chấp nhận rủi ro chuyển đổi chưa được giải quyết.

  • The rehearsal depth, the Day −7 / Day −1 / Day 0 load plan and the rollback point (what loads early, hidden by sharing) and the runbook that makes production cutover repeatable. ⟲
  • Người dùng bị khóa ở ngoài và được cho vào lại thế nào, với một cửa sau và người dùng kiểm thử nhanh, và tự động hóa, tích hợp và tác tử được kiểm soát ra sao trong thời gian đó.
  • Tiêu chí go/no-go, quy trình hoàn tác và thời điểm mà sau đó hoàn tác không còn là cách khôi phục an toàn, cùng những dữ liệu và nguồn cấp chưa biết cần được tìm ra trước.
  • Đợt chuyển đổi được chứng minh thế nào bằng số lượng, tổng, kiểm tra ngẫu nhiên và báo cáo tổng hợp, so với các giá trị dự kiến được đặt trước khi tải.
  • Việc xác thực nghiệp vụ, bằng chứng và ổn định sau khi đưa vào vận hành nào là bắt buộc trước khi đợt chuyển đổi hoàn tất.

Các script đã chạy: chưa đủ. API trả về thành công: chưa đủ. Số dòng khớp nhau: vẫn chưa đủ. Tôi muốn số lượng, tổng, kiểm tra ngẫu nhiên và báo cáo tổng hợp, xác thực nghiệp vụ, hệ thống đã trở lại bình thường, biết được chúng ta còn trong khung hoàn tác hay không, và bằng chứng về chính xác những gì đã xảy ra. Chuyển giao trên production nên nhàm chán, vì chúng ta đã làm phần suy nghĩ khó trước tối thứ Sáu. Tin, nhưng phải kiểm chứng. Rồi hãy cho người dùng quay lại.