Aller au contenu

Steve Trucking at Scale, What I Would Architect

Ce contenu n’est pas encore disponible dans votre langue.

The question this checkpoint answers: Can you put Part 2 together on a real scenario?

Try the challenge first. This is my walkthrough of Checkpoint 2’s challenge. If you haven’t taken your own design to year five yet, do that before you read on. The value is in comparing your reasoning with mine, not in reading the answer.

This is “What I Would Architect” again: a possible viable solution, not the answer, with the trade-offs named and my positions taken. At Checkpoint 1 we set the bones: Field Service as the delivery core, one custom Manifest__c, the partner’s key on the Work Order, the Recipient as fields on the delivery, and photos, GPS and status history kept off core. I’m keeping all of it. Part 2’s job was to test it: volume, retrieval, integration, migration, transactions and security. So the question here is whether those bones survive year five, and what has to be added so they do.

The requirement says three times today’s volume within five years (O1). Chapter 7 did the math (When Volume Changes Everything): 1.0 million deliveries in year one, then 1.3, 1.69, about 2.2 and about 2.86 million in year five. Keep all five years and the org holds about 9 million Work Orders, about 14.5 million line items, and, if we kept them, about 72 million status changes.

Now the data we decided not to put in core. About four photos a delivery is over 11 million photos a year by year five. GPS is 200,000 readings a day today, about 73 million a year; if the fleet grows with the deliveries, it’s past 200 million a year by year five. Cases grow too: 180,000 a year today, about half a million by year five.

Put those on chapter 7’s ruler. A little drag at a million records in an object; list views taking seconds heading toward 50 million; past 100 million, ask whether the records belong here at all. Nine million Work Orders kept forever is the slow, steady kind of problem, the one nobody notices until year four. GPS and photos are the kind you never put in core in the first place. That’s Steve’s Number of Zeros: the zeros already told us most of this design before we drew a box.

Steve Trucking at year five Four columns, Steve Trucking at year five. Work orders: about 3 million in the org; 2.86 million a year at year five, 9 million if nothing left; they live in Salesforce for 13 months, then in Snowflake by the partner key. Line items: about 5 million in the org, 1.6 per work order, living with their work order and leaving with it. Status events: 23 million a year, 8 per work order, in Snowflake; the org keeps the current status. GPS readings: over 200 million a year if the fleet grows with the deliveries, in FleetLink; the org keeps the latest position. Underneath: photos, over 11 million a year, stay off core too, and a 13-month window keeps the org near 3 million work orders, however many years Steve Trucking runs. {"author": "Steve Simpson", "blueprint": "1.0.0", "builder": "standard 1.52.0", "built": "2026-10-28", "id": "DGM-DA-DS-50", "rights": "\u00a9 2026 Twinshark LLC. All rights reserved.", "template": "comparison 0.5.0", "theme": "stevetecharc 1.4.0"} About 3 million work orders in the org YEAR FIVE 2.86 million a year 9 million if nothing left LIVES In Salesforce for 13 months, then Snowflake by the partner key About 5 million line items in the org YEAR FIVE 1.6 per work order LIVES With their work order, and leave with it 23 million a year status events YEAR FIVE 8 per work order LIVES In Snowflake; the org keeps the current status Over 200 million a year GPS readings YEAR FIVE If the fleet grows with the deliveries LIVES In FleetLink; the org keeps the latest position Photos, over 11 million a year, stay off core too. A 13-month window keeps the org near 3 million work orders, however many years Steve Trucking runs. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Chapter 7 gave us the rule: design the exit when you design the entrance. So the first decision is how long a completed delivery stays in the org.

The floor is the claims window. Retail Partners raise damage and install claims, about 15,000 a year today, and chapter 10 set the claim window at 60 days: “the business’s number, not ours.” Anything a claim can still touch stays in the org, with its case, its photos’ links and its credit. But 60 days is a floor, not a recommendation. Coordinators look back at last month’s exceptions. Retail Partners see on-time and damage rates by DC and by day (RP1), and they’ll want to compare this month with the same month last year.

In my professional opinion, a completed delivery stays in the org for 13 months, then leaves. At year five that’s roughly 3 million Work Orders in the org instead of 9 million, and the number stops climbing: it moves with the business, not with time. Leadership’s five-year reporting (RP2) comes from the warehouse, where the status history already is.

Where does it go? Snowflake, by the partner key. That’s the same place RouteDesk’s 4.8 million older deliveries go in chapter 10, and the same place the status history already lives. One archive, one key, one place to look. Chapter 7 also showed big objects and Salesforce’s own archive product; either could work, but Steve Trucking already runs Snowflake, the history is already there, and a late claim or an audit question is answered by the partner key in one query.

And the security has to survive the move, the question chapter 7 asked. In Snowflake, a partner’s archived deliveries are still that partner’s: whatever reads the archive for a partner reads only that partner’s rows. And no agent reads the archive. Chapter 7 said that’s a significant decision and the business’s to make; my recommendation is no, because no agent’s job here needs five-year-old deliveries.

Personal data leaves earlier, and not all of it goes. When a delivery leaves the org, the archive keeps what history needs: the partner key, the Retail Partner Customer ID, the dates, the items, the status trail, the postal code. It doesn’t keep the Recipient’s name, phone, email or delivery notes. The gate code doesn’t even wait for the archive: its own small record is deleted when the delivery is completed, because no job after that needs it. That’s module 3’s minimization is a security control too, turned into a lifecycle.

Three places concentrate work at Steve Trucking, and Part 2 found all three.

  • The partner account (Hot Spots: Ownership, Parent and Lookup Skew). If Redrock is 40% of the business, five years would put about 3.6 million Work Orders under one Account. I keep the relationship, because it’s real, and add a child account per DC under each partner: nine today, each one a real place the business recognizes. With the 13-month window, the active Work Orders per DC account stay in the low hundreds of thousands. Scale fixes still have to preserve meaning, and a DC is a meaning.
  • The owner. The integration creates the deliveries, but that doesn’t mean it should own them. In this design ownership doesn’t drive anyone’s access (the sharing below doesn’t use it), so the Work Orders get a dedicated owner with no role, chapter 7’s isolated high-volume owner, not the integration user.
  • The Manifest at four o’clock (Designing Out Lock Contention). Chapter 11 found the deadlock: every delivered stop recounting its Manifest inside the save. The fix stays: keep the Manifest, stop recounting it inside every save, and give each Manifest its own line. The counts arrive through a platform event, after the save. And Manifest__c is a lookup from the Work Order, not a master-detail, with partner access through sharing (chapter 7), so the Manifest never becomes every delivery’s lock owner.

Chapter 9 numbered the important arrows on the landscape, C1 to C9, and wrote C1, Redrock’s manifests, line by line (The Integration Data Contract). It deliberately left the other eight for this checkpoint. Here they are, at the level an architect signs off: who starts it, how fresh it must be, the key, and the line most teams leave out, who proves it arrived. Chapter 9’s rule decides that line every time: the client owns the conversation. Whoever knows what should arrive proves that it did.

ContractStarts itHow freshKeyWho proves it arrived
C1Redrock’s manifests in (REST)RedrockA revision on the Work Order within 15 minutesPartner_Delivery_Key__cRedrock, from the per-record results: sent equals accepted plus rejected
C2Status to Redrock (webhook)Salesforce, through the integration layerSecondsThe same keySalesforce: the return receipt, and a sweep that sends again what has none after three hours
C3Keystone’s manifests in (SFTP file)Keystone drops the file; the integration layer picks it upLoaded well before routes are finalized the evening beforeThe same keyKeystone, from an acknowledgment file we send back: rows received, accepted, rejected with reasons
C4Status to Keystone (nightly file)The integration layerNightlyThe same keySalesforce: a file isn’t proof; Keystone’s pickup or acknowledgment is, and a missing one is chased by morning
C5Brightwave’s manifests in (EDI)Brightwave, through its EDI networkBefore routing, like C3The same keyBrightwave, from the acknowledgment we return through the network
C6Status to Brightwave (EDI)The integration layerAs Brightwave’s agreement setsThe same keySalesforce, from Brightwave’s acknowledgment
C7Status history to SnowflakeThe integration layer subscribesNear real time, or hourlyWork OrderThe integration layer: the day’s status changes published equal the rows landed
C8The truck’s latest position from FleetLinkEither side (chapter 9 shows both)A few minutesTruckFreshness, not every reading: a position older than the contract allows shows as stale on the dispatcher’s map
C9Delivery counts to the finance ERPThe integration layerDailyPartner and dayThe integration layer: the ERP’s totals match the day’s completed deliveries, installs and haul-aways per partner

Two things I want you to notice. First, the key column is one value, Partner_Delivery_Key__c, for six of the nine. That’s Checkpoint 1’s decision paying off: one unique External ID with the partner in the value, so Keystone’s file, Redrock’s API and Brightwave’s EDI all upsert the same way, and a resent or revised manifest updates instead of duplicating. A fourth partner is a new value, not a new field. Second, the proof column changes direction with the arrow. For manifests in, the partner knows what it sent, so it proves it; our job is to give it the results it needs. For status out, we know what should arrive, so we prove it.

And Manifest__c is where the manifests’ proof lives in the org. Keystone sent 1,842 deliveries for Thursday at the Dallas DC; we received 1,842; 1,790 new, 47 revisions, 5 rejected with reasons and sent back. That’s a manifest I can operate. “The integration ran green” isn’t.

Revisions after routing (R4) are where integration meets the business. The upsert applies the partner’s change, because the partner owns the items, the address and the date. But Salesforce owns the appointment, the crew and the route (chapter 9: bidirectional movement doesn’t require bidirectional authority). So a change to an already-routed delivery is applied and flagged, and the coordinator sees the affected route in minutes. A new address on a loaded truck isn’t a field update. It’s a decision for dispatch.

Nine contracts, nine provers Steve Trucking's landscape in the same places as chapter 9's, with the nine contracts, each labelled with who proves it arrived. Manifests in from the three Retail Partners: C1 from Redrock, Redrock proves; C3 from Keystone, Keystone proves; C5 from Brightwave, Brightwave proves; the integration layer upserts all three into Salesforce by the partner key. Status out, in amber: C2 to Redrock, C4 to Keystone and C6 to Brightwave; we prove each one, because Salesforce knows what should arrive. C7, status events to Snowflake: published equals landed. C8, FleetLink's latest position: freshness, a stale position shows. C9, delivery counts to the finance ERP: the totals match. Underneath: nine contracts, nine named provers; whoever knows what should arrive proves that it did. {"author": "Steve Simpson", "blueprint": "1.0.1", "builder": "standard 1.54.0", "built": "2026-10-30", "id": "DGM-DA-DS-51", "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 archive retired; 8 years of history 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 C1 in · Redrock proves C2 out · we prove C3 in · Keystone proves C4 out · we prove C5 in · Brightwave proves C6 out · we prove C1, C3, C5 upsert by key C7 status events C7 · published = landed C8 · freshness C9 delivery counts C9 · totals match photos, from the crews' app day-before, with a link 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 status out: Salesforce knows what should arrive, so it proves it did Nine contracts, nine named provers. Whoever knows what should arrive proves that it did. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Chapter 10 made the RouteDesk decisions (Migration Is a Quality Project First), and they hold here: migrate, archive, or discard according to policy. The deliveries not yet made, about 6,400, come in, because they still have to happen. So do the roughly 190,000 inside the 60-day claim window, because a claim can still reach them. The other 4.8 million go to Snowflake by the partner key, the same archive our own completed deliveries will join after 13 months. Route plans and coordinators’ drafts are discarded by policy.

Then prove it: counts, totals, spot checks and aggregate reports, such as deliveries by DC by week in RouteDesk against the same in Salesforce and Snowflake. On Day 0, authority moves, and RouteDesk goes read-only. RouteDesk retires without Salesforce becoming its retirement home.

One transaction from chapter 11 belongs in every checkpoint from now on: the damage credit that went out twice. A $180 credit, a timeout, a retry, and $360 paid. The fix is in the design, not in the hope that timeouts won’t happen: the claim number is the idempotency key, so the same claim can’t produce two credits, whoever retries (Safe to Retry). If the client owns the retry, the architecture must make the retry safe. That matters even more now that an agent can call the credit action.

Now the access model. Module 1’s point is the reason it comes last: most of it was decided in the model. Every Work Order carries its Retail Partner and its DC account; the Recipient lives on the delivery; the gate code lives on its own record. Here’s each consumer, what it gets, and what enforces it.

Access around one delivery Three columns around one Work Order, highlighted in the middle, which carries its partner and its DC account, with the Recipient on it. On the left, humans: the crew reaches its assigned stops today through the assignment, with the gate code on its own record; coordinators and care staff reach their DC's work, and care across partners, through internal sharing; a Retail Partner DC manager reaches only its own DC's deliveries through a sharing set; the Recipient reaches this one delivery, with no login, for seven days after delivery, through a token. On the right, applications and agents: the partner's integration has its own narrow user and writes only the fields its partner owns; telematics may write only the latest position, and never needs the phone number; the Recipient's agent reaches one delivery through one action. Underneath: one record, different consumers, a boundary for each, and a mechanism the model gives it. {"author": "Steve Simpson", "blueprint": "1.0.0", "builder": "standard 1.52.0", "built": "2026-10-28", "id": "DGM-DA-DS-52", "rights": "\u00a9 2026 Twinshark LLC. All rights reserved.", "template": "cells 0.4.0", "theme": "stevetecharc 1.4.0"} HUMANS ONE DELIVERY APPLICATIONS AND AGENTS The crew its assigned stops today; the gate code on its own record Coordinators and care staff their DC's work; care across partners Retail Partner DC manager its own DC's deliveries only The Recipient this one delivery, no login, for seven days after Work Order carries its partner and its DC account; the Recipient on it The partner's integration its own user; writes only the fields its partner owns Telematics the latest position; never the phone number The Recipient's agent one delivery, through one action through the assignment through internal sharing through a sharing set through a token through a narrow user only the position through one action One record. Different consumers. A boundary for each, and a mechanism the model gives it. HOW TO READ IT the record every boundary protects © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Retail Partners: the hard boundary (S2, R3). Work Orders are private. Partner users sit on Customer Community Plus or Partner Community, Checkpoint 1’s license decision. For the partner-wide view, module 2’s design holds: a group per partner and one criteria-based rule per partner, three rules today.

For the DC managers, I don’t want a rule per DC. Module 2 counted that series: nine today, one more for every DC the business wins, all inside the limit of 50 criteria-based rules per object. So I use the structure the model already has: a sharing set.

A sharing set “grants site users access to any record associated with an account or contact that matches the user’s account or contact” (Salesforce Help, Create a Sharing Set for Experience Cloud Site Users (opens in a new tab), checked 2026-10-28). The linkage is an access mapping: a field on the user on one side, a field on the target object on the other, both pointing to an account or a contact. For Steve Trucking, each DC manager is a contact under their DC’s account, and each Work Order’s account is that DC account. Map the user’s Contact.Account to the Work Order’s Account, read only, and a DC manager sees exactly their own DC’s deliveries. Work Order is on Salesforce’s list of objects a sharing set can share, and so is Case, so the claims can follow the same linkage. And sharing sets aren’t only for the cheap seats: Salesforce lists Customer Community Plus and Partner Community among the licenses that support them (Metadata API Developer Guide, SharingSet (opens in a new tab), API version 68.0, checked 2026-10-28). One sharing set, and every new DC is a new account, not a new rule. The child account we added for skew now carries the security too. That’s the data model and the security model designed together.

But sharing sets are a very focused tool, so check the fit before you rely on one:

  • One sharing set per profile. Salesforce says it plainly: “You can have one sharing set per profile only.” Inside that set, each object gets its own access mapping. So the DC managers get their own profile, and everything that profile needs from a sharing set, the Work Orders and the claims, goes into that one set. Plan the profiles with the sharing sets, or a second need on the same profile has nowhere to go.
  • It doesn’t roll up. “Record access granted to users via a sharing set isn’t extended to their superiors in the role hierarchy.” A partner-wide manager above the DC managers doesn’t inherit their deliveries. That’s why the partner-wide view stays on the three criteria-based rules.
  • The object has to be private. Objects with an org-wide default of Public Read/Write aren’t available. Work Orders are private, which was module 2’s starting point anyway.
  • The linkage has to be right on every record. The access is only as good as the Work Order’s account. If an integration writes the partner’s parent account instead of the DC account, the DC manager sees nothing. If it writes the wrong DC, the wrong DC manager sees it. That’s a contract line for C1, C3 and C5: the DC account is set from the manifest’s DC, and it’s checked.

Test knowledge. Know that sharing sets grant portal users access to records whose account or contact matches the user’s, through an access mapping per object; that they’re available to Customer Community Plus and Partner Community users as well as Customer Community; that you get one sharing set per profile; and that sharing-set access isn’t extended to superiors in the role hierarchy.

Coordinators and customer care. Coordinators work inside one partner’s DC. They see that DC’s deliveries for the day’s work, through the same DC structure. Customer care sees across partners, because Recipients call Steve Trucking, but through the console, with the Recipient’s phone the one Confidential field they search by.

Crews: their stops, on the day (S4). The crew’s access follows the assignment Field Service already has: the Service Appointment and its assigned resources. And crews work offline (R11), so what’s on the phone matters as much as what’s in the org. The Field Service app starts by loading “all Service Appointments for the default list view” (Salesforce Help, Salesforce Field Service app for iOS and Android performance considerations (opens in a new tab), published July 14, 2026, checked 2026-10-28). So the default list view is the crew’s own appointments scheduled today, and only today’s stops go onto the phone.

Don’t expect the cache setting to clean up afterwards. Its Record Data Cache Time “controls how long offline data is considered valid for. When this time expires, the app will check for updates.” That’s freshness, not deletion.

Then the gate code. Module 1 offered two ways to protect it: a controlled door, or moving it to its own record. The door is an online check, and a crew standing at a gate often has no signal. So here I move it. The gate code gets its own small record, a lookup child of the Work Order with its own private access, shared only with the crew assigned to that stop, for that day. It goes onto the phone with the stop.

This is how I’d treat a true secret that’s given to us for a short time:

  • No wider access. We aren’t taking an existing record and trying to expose more of it, then worrying about what else that opens. Only this one record is shared, with only these people, so there’s no lateral effect on any other field.
  • Easy to remove. When the stop is completed, the record is deleted, and that piece of confidential data is gone from the org, and it should leave the phone at the next sync. Salesforce’s documentation doesn’t say exactly when a deleted record leaves the device, so prove it on a real phone before go-live, the same way you’d prove any other security control. We can make it appear, and we can make it disappear.

The partner integrations. Each partner’s integration has its own user (module 1: the Salesforce Integration user license with the Minimum Access - API Only Integrations profile), with write access only to the fields that partner owns: the items, the address, the delivery date. A test payload that tries to change the crew is refused. Permission says can; architecture says should.

Recipients: one delivery, no login (S3). The text message carries a link with a long, random, single-purpose token. The org stores only a hash of it, with an expiry, against one delivery, and it stops working seven days after the delivery, long enough for the photos and the survey (R7). The tracking page doesn’t get access to Work Orders at all, so there’s no guest-user sharing rule to write, which matters because guest user rules count in the same 50 as criteria-based rules (module 2). Instead, the page calls one controlled action: given a valid token, return this delivery’s window, status, the truck’s latest position near the end of the route, and the photos after delivery (R5–R7). Change one character of the link and it returns nothing. After the expiry, the same.

The agents (R8). Module 4’s three agents, each with one job. The Recipient’s agent works from the same token context as the page, reaches one delivery through an action, and can move the window within the partner’s rules. The care team’s agent runs as the care agent and summarizes. The finance agent checks eligibility and issues an approved, idempotent damage credit, with a person approving anything over $1,000 in a Flow checkpoint. None of them reads the archive. And before go-live, we try to break each one: discover, derive, infer, act.

The protection matrix from module 3, applied:

  • Restricted: the gate code. On its own record, shared only with the assigned crew for the day; encrypted with Shield, probabilistic, because nobody filters on it; deleted when the delivery is done.
  • Confidential: the Recipient’s name, phone, email, address and delivery notes; delivery photos (S5); each partner’s pricing and volumes (S2). The phone is the one field customer care searches by, so if it’s encrypted, it’s the one case for deterministic encryption: probabilistic by default; deterministic only where exact-match filtering is essential. Masked outside production.
  • Internal: Work Orders, routes, manifests, crews. Partners see their own through the portal.
  • Public: almost nothing. The tracking page shows one delivery to the person holding its link, and that isn’t public; it’s a token.

The obvious alternative is to keep everything in Salesforce because the deliveries are there: every status change, every photo, every GPS reading, all eight years of RouteDesk, every completed delivery forever. Then give the integrations and the agents broad access to it, and write a sharing rule for every DC.

It’s attractive: one place. But one place isn’t automatically good architecture. It’s 9 million Work Orders and climbing, hundreds of millions of rows that were never business records, a file-storage bill, more personal data in more places for longer, a sharing-rule series heading for the limit, and an archiving project we can already predict today. I don’t choose that design.

The requirement is: run Steve Trucking at three times today’s volume, with three partners integrated three ways, RouteDesk retired, and partners, crews, Recipients, applications and agents each seeing only what their job needs.

My solution is: keep Salesforce the lean operational core, with completed deliveries leaving after 13 months for one archive in Snowflake by the partner key; a child account per DC that spreads the skew and carries the DC boundary; nine written contracts with one key and a named prover for every arrow; RouteDesk migrated, archived or discarded by policy and proved; idempotent credits; and access designed around the job: sharing sets for DCs, the assignment and a temporary gate-code record for crews, a token for Recipients, narrow users for integrations and agents.

The reason is: each piece of data gets a home sized for its volume and an exit designed on day one, and each consumer gets a boundary the model can enforce.

The option I didn’t choose was one org holding everything forever, opened up with rules and broad users.

In my professional opinion, the strongest architecture isn’t the one that puts the most in Salesforce. It’s the one where every record has a reason to be there, a way to leave, and a boundary around who can reach it.

Checkpoint 2: what I would architect Checkpoint 2's landscape, what I would architect, in the same places as Checkpoint 1's and chapter 9's. People on the left: coordinators, crews, care and office staff, Retail Partner users through the partner portal, and Recipients, who reach the tracking page by a token that works until seven days after delivery. Salesforce in the middle, Field Service in one US org, with about 3 million work orders. The integration layer carries nine contracts: manifests in from Redrock (C1), Keystone (C3) and Brightwave (C5), upserted by the partner key; status out to each (C2, C4, C6); delivery counts to the finance ERP (C9). FleetLink sends the latest position (C8). Highlighted in amber, the exit: Salesforce sends status events, and completed deliveries after 13 months, through the integration layer to Snowflake, the one archive, which also holds status history and RouteDesk's history. RouteDesk is gone. Photos go from the crews' app to off-core storage. Underneath: a lean core with an exit, one archive, nine contracts, and a boundary for every consumer. {"author": "Steve Simpson", "blueprint": "1.0.0", "builder": "standard 1.52.0", "built": "2026-10-28", "id": "DGM-DA-DS-53", "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 the one archive: status history, completed deliveries, RouteDesk FleetLink raw GPS stays here Finance ERP invoices partners, pays crews Photo storage 4–5 million a year, off core 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; about 3 million work orders a token, until 7 days after office staff only calls cases in C1 manifests in C2 status out C3 manifests in C4 status out C5 manifests in C6 status out C1, C3, C5 upsert by key C7 status, and the 13-month exit C7, and deliveries after 13 months C8 latest position C9 delivery counts C9 delivery counts photos, from the crews' app day-before, with a link 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 exit: completed deliveries leave after 13 months, by the partner key A lean core with an exit, one archive, nine contracts, and a boundary for every consumer. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Part 2 tested the bones, and they held, with a lifecycle, a DC account and nine contracts added. Part 3 asks what changes when the same data has to serve analytics and AI: a view of the archive from inside Salesforce instead of a copy, Data 360, and grounding the agents. And Steve Trucking will change again. Keep this design; you’ll revisit it.

  • The year-five numbers for every large object, and which never enter the core.
  • How long a completed record stays, where it goes, how it’s found, and how its security and its personal data are handled on the way out.
  • Which parents, owners and shared records will concentrate work, and the model change that prevents it.
  • A contract for every important arrow, with the key and who proves it arrived.
  • What the old system migrates, archives and discards, and the proof.
  • Each consumer’s boundary, and the mechanism the model gives it: sharing rules, sharing sets, a record of its own, a token, a narrow user.