Gå til indhold

Steve Trucking, sådan ville jeg designe det

Findes også på 28 sprog

English · Español · 日本語 · Português (Brasil) · Français · Deutsch · Italiano · 한국어 · 简体中文 · Português (Portugal) · 繁體中文 · Bahasa Indonesia · Türkçe · Polski · Tiếng Việt · ไทย · Nederlands · العربية · עברית · Українська · हिन्दी · Русский · Svenska · Norsk bokmål · Suomi · Español (México) · Français (Canada) · Deutsch (Schweiz)

A row of plain white delivery trucks ready at the loading doors at first light, a clipboard on the front of the nearest one.
Billedet er lavet med AI

Modul 6 af 6 i kapitlet Masterdata og identitet, kapitel 6 i kurset Data Architect, og afslutningen på del 1. Forrige: Når autoriteten er delt · Næste: Del 2 begynder med Design til skala (coming soon)

Spørgsmålet, dette kontrolpunkt besvarer: Kan du samle del 1 på et rigtigt scenarie?

Prøv opgaven først. Dette er min gennemgang af opgaven til kontrolpunkt 1. Hvis du ikke har tegnet dit eget design endnu, så gør det, før du læser videre. Værdien ligger i at sammenligne din argumentation med min, ikke i at læse svaret.

Dette er »Sådan ville jeg designe det«: en mulig, holdbar løsning, ikke det rigtige svar, med afvejningerne navngivet og mine holdninger klart udtrykt. Vi har ikke gennemgået store datamængder, forespørgselsdesign, integrationsmønstre, migrering eller transaktioner endnu, og det er med vilje: Arkitektur udvikler sig, efterhånden som du lærer mere. Men del 1 giver os nok til at sætte skelettet.

Fra briefen: omkring 3.300 leveringer pr. arbejdsdag, en million om året, med en vækst på 30 % om året. Omkring 1,6 linjer pr. levering (1,6 millioner om året); omkring otte statusændringer pr. levering (8 millioner om året); fire til fem millioner fotos om året; omkring 200.000 GPS-målinger om dagen; omkring 180.000 sager om året; tre detailpartnere, der sender manifester på tre forskellige måder; ni distributionscentre; 330 lastbiler med teams på to personer. Og Steve Trucking kører allerede én Salesforce-org med Service Cloud, Field Service og en partnerportal. Tæl nullerne, før du tegner en eneste boks. De kommer til at afgøre flere ting nedenfor.

Leveringerne er hjertet i det hele, og Field Service håndterer allerede dispatch. Så jeg starter med standardmodellen i Field Service, ligesom udsnittet i kapitel 3 gjorde:

ForretningsbegrebSalesforce-objektHvorfor
Detailpartner (Retail Partner)Account (posttypen Retail Partner)En virksomhed, Steve Trucking har kontrakt med; bærer kontrakter, sager og portaladgang
Partnerens medarbejdere (DC-ledere, butikspersonale)ContactPortalbrugere skal være kontakter
Én levering: én modtager, én adresse, én partnerordre, én dagWork OrderField Services arbejdsenhed; planlægning, mobilappen og servicerapporter hænger på den
Hver vare eller ydelse: køleskabet, monteringen, bortskaffelsenWork Order Line ItemDeler arbejdet op, styrer tjeklister og fakturering
Typen af stop: kun levering, med montering, med bortskaffelseWork TypeFastsætter varighed, færdigheder og monteringstjeklisten
Det planlagte besøg og dets tidsvindueService AppointmentDet, Field Service planlægger, og teamets app viser
Teams og lastbiler; DC’ernes dispatch-områderService Resource, Service Crew, Service TerritoryField Service planlægger et team som én ressource
Henvendelser fra modtagere, reklamationer fra partnereCaseServicekonsollen, serviceaftaler (entitlements), email-to-case
Partnerens liste for tirsdag i DC’et i PhoenixManifest__c (brugerdefineret)Intet standardobjekt repræsenterer enheden for modtagelse, afstemning og genafspilning

Alt andet forbliver standard. Det er bevidst, at jeg modstår flere brugerdefinerede objekter: Kapitel 1 spurgte, hvornår en arkitekt bør modstå endnu et, og her er svaret »næsten altid«. Partnerens ordrelinje er for eksempel ikke et nyt objekt. Den er arbejdsordren (Work Order), identificeret ved partnerens reference.

Kontrolpunkt 1: leveringskernen Kontrolpunkt 1's fysiske kerne for Steve Trucking. På core: en detailpartner, en konto med en posttype, sender manifester, det ene brugerdefinerede objekt, og hver levering gælder én partner. Et manifest oplister leveringer. En levering er en arbejdsordre (Work Order), der bærer modtageren som felter; den planlægges som aftaler, serviceaftaler (Service Appointment), indeholder leveringslinjer, arbejdsordrelinjer (Work Order Line Item), som hver beskrives af en type stop, en arbejdstype (Work Type). Et team, et serviceteam (Service Crew), tildeles aftaler og arbejder i et DC-disponeringsområde, et serviceområde (Service Territory). En forespørgsel eller reklamation, en sag (Case), kan vedrøre leveringer. Uden for core: teamets GPS-ping går til datavarehuset, leveringen linker til leveringsfotos i et fotolager, og hver aftale udgiver sin statushistorik som hændelser til datavarehuset. Nedenunder: kig på moderskibet: Field Service er leveringskernen. PÅ CORE UDEN FOR CORE sender gælder oplister vedrører planlægges som indeholder beskriver teams arbejder i tildeles pinger linker til udgiver Detailpartner Account · posttype Manifest Manifest__c · brugerdefineret Forespørgsel eller reklamation Case Levering WorkOrder · Modtagerfelter Leveringslinje WorkOrderLineItem Aftale ServiceAppointment Type stop WorkType DC-disponeringsområde ServiceTerritory Team ServiceCrew Statushistorik hændelser, datavarehus Leveringsfotos fotolager, linket GPS-ping datavarehus, via reference Kig på moderskibet: Field Service er leveringskernen. præcis én nul eller én én eller mange nul eller mange lookup © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Den vokser ud af finalen i kapitel 3 (Design den fysiske model i Salesforce): de samme objekter på de samme pladser, med teamet, dispatch-området, sagen og det, kontrolpunkt 1 holder uden for core, tilføjet.

Nøglen, der matcher en partners ordre med en levering

Sektion kaldt “Nøglen, der matcher en partners ordre med en levering ”

Hver manifestlinje bliver til én arbejdsordre, linket til sit manifest. Nøglen er det spørgsmål, jeg allerhelst vil have besvaret: Hvordan ved vi, at denne linje fra partneren er den levering? Mit svar: et External ID på arbejdsordren, bygget af detailpartneren og partnerens egen ordre- og leveringsreference (noget i stil med KEYSTONE-PHX-8843119-1), markeret som unikt. Ét felt pr. kilde, én-til-én. Det er partnerens identifikator, ikke vores: »flere identifikatorer for én ting« fra kapitel 2 og »partneren ejer sin ordrereference« fra modul 1.

Hvorfor det betyder noget: Manifester ankommer en til to dage i forvejen og bliver ændret på selve dagen. Med den nøgle laver hvert gensendt eller ændret manifest upsert i stedet for at skabe dubletter. Ændringen opdaterer arbejdsordren, et felt registrerer den, og en ændring af en levering, der allerede er ruteplanlagt, advarer koordinatoren: Partnerens ændring bliver anvendt, men markeret, indtil dispatch bekræfter den. Det er også det, der ændrer sig i forhold til billedet i kapitel 4. I dag lander hvert manifest i RouteDesk, og koordinatorerne indtaster ruterne igen i Salesforce og de afsluttede stop tilbage. I dette design kommer manifesterne direkte ind i Salesforce med upsert på partnerens nøgle; RouteDesk udfases, og den dobbelte indtastning slutter. Kapitlet om integration designer de tre indgående formater. Databeslutningen er nøglen.

Modtageren: personkonto, kontakt eller ingen af delene?

Sektion kaldt “Modtageren: personkonto, kontakt eller ingen af delene? ”

Det her er den mest interessante databeslutning i del 1, så her er mulighederne og derefter mit valg.

Mulighed A: personkonti. Hver modtager bliver en personkonto, linket til hver levering. For: standard, fungerer naturligt med Service Cloud, beskeder og konsollen, genkender modtagere, der går igen. Imod: omkring en million nye modtagere om året, hver en personkonto med cirka dobbelt så meget lagerplads som en erhvervskonto (Estimated Record Size by Object Type (opens in a new tab), på engelsk), så inden for to år et af de største objekter i org’en. Og modtagerne er ikke Steve Truckings kunder. De er hver detailpartners kunder, og Steve Trucking må aldrig blande én partners kunde sammen med en andens (S2).

Mulighed B: kontakter under detailpartnerens konto. Imod: en million kontakter under tre eller fire konti er forælder-barn-skew i massiv skala, langt over Salesforces vejledning på omkring 10.000 børn pr. forælder (Considerations for Object Relationships (opens in a new tab); Parent-Child Data Skew (opens in a new tab); på engelsk). Det er muligheden, man skal vise og afvise.

Mulighed C: Modtageren lever på leveringen. Modtagerens navn, telefon, e-mail, adresse og leveringsnoter er felter på arbejdsordren (adressefelterne er allerede standard dér), hentet fra manifestet. For: intet nyt stort objekt; dataene lever præcis så længe, leveringen har brug for dem; sletning sker pr. levering, efter partnerens tidsplan; og adskillelsen mellem partnere kommer gratis, fordi hver levering tilhører én partner. Imod: En modtager, der går igen, bliver ikke genkendt som den samme person.

Det er den balance, der skal findes. Bliver der nogensinde brug for at genkende flere leveringer som den samme person, på det samme sted? For at give den person et login? Det er grænsen mellem en modtager, der har brug for sin egen post, og modtageroplysninger, der simpelthen er data om leveringen. Og der findes en mellemvej. Tag detailpartnerens eget kunde-id med som et felt på leveringen, et Retail Partner Customer ID (detailpartnerens kunde-id). Det opretter ikke en modtagerpost, men det binder de leveringer sammen, som en partner sender til den samme kunde, hvilket er begyndelsen på en mere samlet kundeoplevelse, og det fører direkte tilbage til detailpartnerens system, hvor kunden reelt bor. Det er partnerens identifikator, så det betyder kun noget sammen med partneren: Én partners kunde 4417 har intet at gøre med en andens.

Efter min faglige vurdering er mulighed C det rigtige valg. Den del med, at modtageren ikke genkendes, er acceptabel, endda ønskelig: Steve Trucking har ingen relation til de mennesker ud over leveringen. Det er modul 1 igen: Modtageren er partnerens kunde, og partneren er autoriteten for, hvem de er. Og det er kapitel 5: Personoplysninger, der lander ét sted, bundet til én levering, er langt lettere at beskytte, opbevare og slette. Og det holder over for normalformerne fra kapitel 2: Modtagerens oplysninger er én-til-én med leveringen, så de hører hjemme på den. Et separat underordnet modtagerobjekt ville spare nogle få gentagne værdier for prisen af endnu et objekt, endnu en relation og dens omkostninger, og den eneste måde, det ville spare mere på, er ved at behandle den samme person som én på tværs af detailpartnere, og det gør vi ikke. Så leveringen bærer modtageren, med Retail Partner Customer ID som vejen tilbage til partnerens eget system.

Hvem er modtageren? Tre muligheder for modtageren, hver med argumenter for og imod. Mulighed A, en personkonto pr. modtager: dumper på relationen, fordi modtageren er partnerens kunde; dumper på volumen, omkring en million om året med dobbelt så meget lagerplads som en virksomhedskonto; består på skew, hver er sin egen konto; dumper på partnerisolering, fordi den blander partnernes kunder; dumper på sletning, fordi den lever længere end leveringen; består på at genkende tilbagevendende. Afvist. Mulighed B, kontakter under detailpartneren: dumper på relationen, da de ikke er partnerens personale; dumper på volumen; dumper på skew, en million under tre eller fire konti; består på isolering, under én partners konto; dumper på sletning; genkender tilbagevendende inden for en partner. Vis og afvis. Mulighed C, modtagerfelter på arbejdsordren, fremhævet som valget i kontrolpunkt 1: den eneste relation er leveringen; intet nyt objekt; ingen ny overordnet; én partner pr. levering; slettes efter partnerens tidsplan; og en tilbagevendende modtager genkendes ikke, hvilket er fint. Nedenunder: modellér personen efter den relation, du faktisk har. A: Personkonto afvist FOR Genkender en tilbagevendende modtager Ingen overordnet skew: hver er sin egen konto IMOD Partnerens kunde, ikke vores Omkring 1 mio. om året, med dobbelt lagerplads Blander partnernes kunder (S2) Lever længere end leveringen B: Kontakt under detailpartneren: vis og afvis FOR Holdes under én partner (S2) Tilbagevendende kendt inden for en partner IMOD Ikke partnerens personale 1 mio. under 3 eller 4 konti: skew Lever længere end leveringen C: På leveringen felter på arbejdsordren: valget FOR Den eneste relation er leveringen Intet nyt objekt, ingen ny overordnet Én partner pr. levering (S2) Slettes efter partnerens tidsplan IMOD En tilbagevendende modtager genkendes ikke: det er fint Modellér personen efter den relation, du faktisk har. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Ville jeg samle modtagere på tværs af partnere?

Sektion kaldt “Ville jeg samle modtagere på tværs af partnere? ”

John Smith, 123 Main Street, optræder i Redrocks manifest og i Brightwaves. Sandsynligvis den samme person. Skal Steve Trucking samle dem? Nej, bevidst ikke. At samle modtagere på tværs af detailpartnere ville bryde S2: En partner må aldrig se en anden partners modtagere, og en samlet identitet er netop den bro, der lækker. Det er kapitlets holdning anvendt: Undermatch, hvor det er dyrt at blande sammen, og her er det meget dyrt.

Hvis en detailpartner senere vil have genkendelse af modtagere, der går igen, inden for sine egne leveringer, er det en opgave for et værktøj til identitetsopløsning, som det i Data 360, afgrænset til den partner: et kort i registerstil, ikke en personkonto, og aldrig på tværs af partnere. Et kort over, hvem der er hvem, giver ikke ejerskab, og det giver ikke adgang.

Hvad der bliver i org’en, og hvad der ikke gør

Sektion kaldt “Hvad der bliver i org’en, og hvad der ikke gør ”

Kapitel 3 spurgte, hvor data skal bo. Nullerne svarer her:

  • Aktuel status bor på serviceaftalen (Service Appointment) og arbejdsordren. Historikken over statusændringer, omkring 8 millioner om året og stigende, behøver ikke bo i core-org’en. Hver ændring publiceres som en hændelse og gemmes i datavarehuset, Snowflake. Org’en beholder den aktuelle tilstand; historikken er der stadig til service, drift og analyse, bare ikke i den operationelle database.
  • Fotos (fire til fem millioner om året, nogle af dem med mennesker eller indersiden af et hjem) bor uden for core i et lager bygget til den volumen, uploadet direkte fra teamets app. Org’en beholder kun det, den har brug for: en lille indekspost pr. foto eller bare et antal og et flag for »påkrævede monteringsfotos er komplette«. Jeg foretrækker den lette løsning: Hold org’en slank, og lad fotolageret eje sit indeks og sin opbevaring.
  • GPS-målinger (200.000 om dagen) bliver i FleetLink og går til Snowflake; org’en har kun brug for den seneste position til sporingssiden og dispatcherens kort.
  • RouteDesks otte års historik (omkring 5 millioner leveringer) går til datavarehuset eller et arkiv, hvor den kan nås ved reklamationer. Hvad, om noget, der kommer ind i org’en, er en migreringsbeslutning til del 2.
Kontrolpunkt 1: det, jeg ville arkitekte Landskabet i kontrolpunkt 1, det, jeg ville arkitekte, på de samme pladser som det nuværende landskab i kapitel 4. Mennesker til venstre: 45 disponenter inde i 9 partneres DC'er, omkring 700 medlemmer af leveringsteams på 330 lastbiler, 100 personer i kundeservice og på kontoret, alle i Salesforce; omkring 300 brugere hos 3 detailpartnere, i portalen for detailpartnere; og omkring en million modtagere om året, som åbner en sporingsside via et link, uden login, og ringer til kundeservicemedarbejdere. I midten én Salesforce-org i USA med Field Service, virksomhedens identitetsudbyder ovenover kun for kontorpersonale, og e-mail til sag, der bringer sager ind. De tre detailpartnere nederst til højre, Redrock via REST API og webhooks, Keystone via CSV over SFTP og Brightwave via EDI gennem et tredjepartsnetværk, sender manifester ind til ét integrationslag, som designes i del 2, og som laver upserts i Salesforce efter partnerens nøgle og sender status tilbage ud til hver partner. Til højre: Salesforce sender statushændelser til Snowflake, som holder statushistorikken og analysen; FleetLink, hvor rå GPS-data bliver, sender kun den seneste position til Salesforce; Salesforce sender leveringsantal gennem integrationen til økonomi-ERP'en, som fakturerer partnere og betaler teams; fotos, 4 til 5 millioner om året, går fra teamenes app til fotolagring uden for core; og RouteDesk udfases til et arkiv med sine 8 års historik. Salesforce sender beskeden dagen før, med et link, gennem sms- og e-mailudbyderen. Nedenunder: samme virksomhed som i kapitel 4; genindtastningen og regnearket er væk; historikken og fotoene bor uden for core. OVENOVER: IDENTITET, APPEXCHANGE, WEB MENNESKER TIL HØJRE: INTERNE SYSTEMER NEDENUNDER: KUNDEKANALER NEDERST TIL HØJRE: PARTNERE OG UDBYDERE Disponenter 45, inde i 9 partneres DC'er Leveringsteams ~700 på 330 lastbiler Kundeservice og kontorpersonale 100: service, drift, økonomi Brugere hos detailpartnere ~300 hos 3 partnere Modtagere ~1 million om året Virksomhedens IdP SSO kun for kontorpersonale Portal for detailpartnere Sporingsside INTEGRATION Snowflake statushistorik, analyse FleetLink rå GPS-data bliver her Økonomi-ERP fakturerer partnere, betaler teams Fotolagring 4–5 millioner om året, uden for core RouteDesk-arkiv udfaset; 8 års historik Telefon kundeservicemedarbejdere E-mail e-mail til sag Sms- og e-mailudbyder besked dagen før, med et link Redrock REST API, webhooks Keystone CSV over SFTP Brightwave EDI gennem et tredjepartsnetværk Salesforce Field Service, én org i USA et link, uden login kun kontorpersonale ringer sager ind manifester ind status ud manifester ind status ud manifester ind status ud upserts, partnerens nøgle statushændelser kun seneste position leveringsantal leveringsantal fotos, fra teamenes app dagen før, med et link Salesforce en community mennesker identitet, apps, web et internt system en kundekanal integrationslaget starter ved det system, der åbner forbindelsen; etiketten siger, hvad der flytter sig et delt certifikat: tillid, intet direkte kald Samme virksomhed som i kapitel 4. Genindtastningen og regnearket er væk; historikken og fotoene bor uden for core. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Kontrolpunkt 1: sådan ville jeg designe det. Samme pladser som landskabet i kapitel 4 (Steve Truckings landskab), uden den dobbelte indtastning og regnearket.

Hvem ser hvad, og hvem har brug for en licens

Sektion kaldt “Hvem ser hvad, og hvem har brug for en licens ”
  • Detailpartnere ser kun deres egne leveringer (S2). Hver arbejdsordre bærer sin detailpartner; portalbrugere ser deres partners leveringer, og DC-ledere kun deres eget DC’s.
  • Partnerbrugere har brug for en portallicens, der understøtter delingsregler og roller: Customer Community Plus eller Partner Community. Stadionpladserne fra kapitel 3: De billigste pladser får ikke den deling, dette design har brug for. Begge licenser kræver roller til de eksterne brugere, og Salesforce advarer om, at flere roller gør org’en langsommere (Experience Cloud User Licenses (opens in a new tab), på engelsk). En rolle pr. partner og pr. DC er fint; en rolle for hver butik er ikke.

Eksamensviden. Kend, hvilke eksterne licenser der har standarddeling: Customer Community Plus og Partner Community (med roller til de eksterne brugere), ikke Customer Community, som bruger sharing sets.

  • Modtagere har ikke brug for en licens. Sporingssiden viser én levering via et link med et token, der udløber (S3), ikke et login.
  • Hold øje med skew. Hundredtusindvis af arbejdsordrer om året, der peger på tre eller fire partnerkonti, er account data skew. En mulighed er en underordnet konto pr. DC under hver partner, som spreder børnene ni eller flere veje; arkivering af afsluttede leveringer efter reklamationsperioden holder antallet af aktive børn pr. forælder lavt. Del 2 tager fat på det.

Jeg ville ikke oprette en personkonto for hver modtager, bare fordi en modtager er en enkeltperson. Jeg ville ikke hænge en million kontakter op på tre konti. Jeg ville ikke bygge et brugerdefineret Delivery-objekt ved siden af Field Services Work Order. Jeg ville ikke samle modtagere på tværs af partnere. Jeg ville ikke lægge millioner af fotos eller GPS-målinger i core-lageret. Og jeg ville ikke kalde en samlet modtager en golden record, medmindre vi faktisk havde truffet en masterbeslutning.

Del 1 satte skelettet; del 2 tester det. LDV-linealen i år tre (arbejdsordrer, serviceaftaler og linjer er alle i store datamængders territorium inden for to til tre år), forespørgselsdesign til listevisninger afgrænset pr. partner, de tre indgående integrationer og de tre statusfeeds, migreringen fra RouteDesk, transaktionerne på dagen og sikkerhedsdesignet bag portalen. Steve Trucking kommer også til at ændre sig. Gem dette design; du vender tilbage til det.

  • Hvilke standardobjekter der bærer kernen (her Field Services), og hvilke brugerdefinerede objekter der virkelig er berettigede (her ét).
  • Nøglen, der matcher hver partners ordrelinje med en levering, og hvorfor den tilhører partneren.
  • Hvad modtageren er, ud fra den relation, Steve Trucking faktisk har til dem.
  • Om identiteter skal samles, og hvor det er for dyrt at risikere sammenblanding.
  • Hvad der bliver i org’en, hvad der bor uden for core, og hvilke licenser designet afhænger af.