Ga naar inhoud

Teken het systeemlandschap

Ook beschikbaar in 28 talen

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

A hand-drawn map of a region in ink and watercolor, half finished: towns, roads, a river and a rail line on one side, faint pencil lines on bare paper on the other.
Afbeelding gegenereerd met AI

Module 4 van 6 in het hoofdstuk Enterprisegegevens begrijpen, hoofdstuk 4 van de cursus Data Architect. Elke module staat op zichzelf. Vorige: De systemen rond Salesforce · Volgende: Orgstrategie is een landschapsbeslissing

De vraag die deze module beantwoordt: Hoe teken ik een landschap dat laat zien waar de data heen gaat?

Geef me een nieuw scenario en een leeg whiteboard, en een van de eerste dingen die ik teken is het systeemlandschap. Niet mooi, niet elke API, nog niet het datamodel. Ik wil de enterprise zien: wie de gebruikers zijn, welke systemen erbij betrokken zijn, waar Salesforce staat, wat het omringt, waar data vandaan komt en waar ze heen gaat. En dan wil ik de pijlen doorlopen. Een goed landschap is geen plaatje van vakjes. Het is een manier om architectuurbeslissingen bloot te leggen.

Ik laat CTA-kandidaten dit oefenen. Lees het scenario en begin dan te tekenen. Wacht niet tot je alles in je hoofd opgelost hebt; het tekenen helpt je het op te lossen. Daarom is het huiswerk na dag één het landschap beginnen voordat je je aan het datamodel waagt. Teken eerst het datamodel en je hebt al aangenomen wat er in Salesforce hoort. Teken eerst het landschap en je ziet de systemen die die beslissing zouden moeten vormen.

Begin hoog en zoom dan in: eerst de hele enterprise, dan het detail waar het ertoe doet.

Steves landschapsindeling Steves indeling van een systeemlandschap, nog zonder pijlen. Links, van boven naar beneden: interne gebruikers, partnergebruikers en klanten. In het midden Salesforce in blauw met een wolk, de org waar we omheen ontwerpen, met de Partner Community en de Customer Community er direct onder, tegen Salesforce aan. Erboven: een publieke website linksboven, een identiteitsprovider voor medewerkers en een voor partners boven Salesforce, en een AppExchange-app voor e-handtekeningen naar rechts geschoven. Rechts van Salesforce de integratielaag, met Data 360 eronder in dezelfde kolom (near-core: beheerd in de core, gehost buiten de core; gebruikers maken er nooit verbinding mee, en het bereikt veel backendsystemen), dan de interne systemen: ERP, financiën, orderbeheer en het datawarehouse. Eronder de klantkanalen: e-mail, webformulieren, telefoon en messaging. Rechtsonder data in en uit: een archief, dataloads, en externe data waarnaar verwezen wordt in plaats van dat ze gekopieerd wordt. Zes stappen bouwen het op: de lege zones, dan de mensen, Salesforce en zijn community's, identiteit erboven, de integratielaag en de interne systemen, en ten slotte de kanalen en de data. BOVEN: IDENTITEIT, APPEXCHANGE, WEB MENSEN RECHTS: INTERNE SYSTEMEN ONDER: KLANTKANALEN RECHTSONDER: DATA IN EN UIT © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Stap 1 van 6: een leeg canvas. Alleen de zones.

Er zijn veel manieren om een systeemlandschap te tekenen. Dit is gewoon mijn manier, een die ik in de loop van vele jaren verfijnd heb, en ik deel haar zodat je ziet hoe je er snel een in elkaar zet. Ik gebruik haar voor elk Salesforce-landschap, en ze leest als een zin: mensen links bereiken Salesforce in het midden, vertrouwd via de systemen erboven, bediend via de kanalen eronder, en verbonden met de backoffice rechts.

Mensen links, van boven naar beneden: interne gebruikers, partners, klanten. Nog niet elke persona; genoeg om te beantwoorden wie probeert deze architectuur te bereiken? Elke groep wijst naar waar ze binnenkomt: interne gebruikers naar Salesforce, partners naar de partnercommunity, klanten naar de klantcommunity. Systemen bestaan niet op zichzelf. Iemand, of iets, probeert ze te gebruiken.

Steves landschapsindeling Steves indeling van een systeemlandschap, nog zonder pijlen. Links, van boven naar beneden: interne gebruikers, partnergebruikers en klanten. In het midden Salesforce in blauw met een wolk, de org waar we omheen ontwerpen, met de Partner Community en de Customer Community er direct onder, tegen Salesforce aan. Erboven: een publieke website linksboven, een identiteitsprovider voor medewerkers en een voor partners boven Salesforce, en een AppExchange-app voor e-handtekeningen naar rechts geschoven. Rechts van Salesforce de integratielaag, met Data 360 eronder in dezelfde kolom (near-core: beheerd in de core, gehost buiten de core; gebruikers maken er nooit verbinding mee, en het bereikt veel backendsystemen), dan de interne systemen: ERP, financiën, orderbeheer en het datawarehouse. Eronder de klantkanalen: e-mail, webformulieren, telefoon en messaging. Rechtsonder data in en uit: een archief, dataloads, en externe data waarnaar verwezen wordt in plaats van dat ze gekopieerd wordt. Zes stappen bouwen het op: de lege zones, dan de mensen, Salesforce en zijn community's, identiteit erboven, de integratielaag en de interne systemen, en ten slotte de kanalen en de data. BOVEN: IDENTITEIT, APPEXCHANGE, WEB MENSEN RECHTS: INTERNE SYSTEMEN ONDER: KLANTKANALEN RECHTSONDER: DATA IN EN UIT Interne gebruikers sales, service, operations Partnergebruikers Klanten mensen © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Stap 2 van 6: wie probeert deze architectuur te bereiken?

Salesforce in het midden. Eén eenvoudig vak. Niet omdat Salesforce het middelpunt van de enterprise is (we hebben net drie modules lang gezegd dat het dat niet is), maar omdat het het systeem is waaromheen ik ontwerp. Het is het anker.

De communities er direct onder, tegen Salesforce aan. Een partnercommunity en een klantcommunity zijn aparte eindpunten, dus ze krijgen hun eigen vakken. Maar ze staan tegen Salesforce aan, omdat er niets geïntegreerd hoeft te worden om ze te bereiken: ze draaien in dezelfde org.

Steves landschapsindeling Steves indeling van een systeemlandschap, nog zonder pijlen. Links, van boven naar beneden: interne gebruikers, partnergebruikers en klanten. In het midden Salesforce in blauw met een wolk, de org waar we omheen ontwerpen, met de Partner Community en de Customer Community er direct onder, tegen Salesforce aan. Erboven: een publieke website linksboven, een identiteitsprovider voor medewerkers en een voor partners boven Salesforce, en een AppExchange-app voor e-handtekeningen naar rechts geschoven. Rechts van Salesforce de integratielaag, met Data 360 eronder in dezelfde kolom (near-core: beheerd in de core, gehost buiten de core; gebruikers maken er nooit verbinding mee, en het bereikt veel backendsystemen), dan de interne systemen: ERP, financiën, orderbeheer en het datawarehouse. Eronder de klantkanalen: e-mail, webformulieren, telefoon en messaging. Rechtsonder data in en uit: een archief, dataloads, en externe data waarnaar verwezen wordt in plaats van dat ze gekopieerd wordt. Zes stappen bouwen het op: de lege zones, dan de mensen, Salesforce en zijn community's, identiteit erboven, de integratielaag en de interne systemen, en ten slotte de kanalen en de data. BOVEN: IDENTITEIT, APPEXCHANGE, WEB MENSEN RECHTS: INTERNE SYSTEMEN ONDER: KLANTKANALEN RECHTSONDER: DATA IN EN UIT Interne gebruikers sales, service, operations Partnergebruikers Klanten Partner Community Customer Community Salesforce de org waar we omheen ontwerpen Salesforce een community mensen © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Stap 3 van 6: Salesforce in het midden, de communities er direct onder.

Identiteit erboven. De identiteitsproviders gaan bovenaan, degene die developers vergeten: één voor interne gebruikers, misschien nog een voor partners. AppExchange-pakketten gaan daar ook heen, naar rechts geschoven, omdat dat mogelijkheden zijn die de org binnengehaald worden en geen backofficesystemen die er data mee uitwisselen. Publieke websites staan linksboven.

Steves landschapsindeling Steves indeling van een systeemlandschap, nog zonder pijlen. Links, van boven naar beneden: interne gebruikers, partnergebruikers en klanten. In het midden Salesforce in blauw met een wolk, de org waar we omheen ontwerpen, met de Partner Community en de Customer Community er direct onder, tegen Salesforce aan. Erboven: een publieke website linksboven, een identiteitsprovider voor medewerkers en een voor partners boven Salesforce, en een AppExchange-app voor e-handtekeningen naar rechts geschoven. Rechts van Salesforce de integratielaag, met Data 360 eronder in dezelfde kolom (near-core: beheerd in de core, gehost buiten de core; gebruikers maken er nooit verbinding mee, en het bereikt veel backendsystemen), dan de interne systemen: ERP, financiën, orderbeheer en het datawarehouse. Eronder de klantkanalen: e-mail, webformulieren, telefoon en messaging. Rechtsonder data in en uit: een archief, dataloads, en externe data waarnaar verwezen wordt in plaats van dat ze gekopieerd wordt. Zes stappen bouwen het op: de lege zones, dan de mensen, Salesforce en zijn community's, identiteit erboven, de integratielaag en de interne systemen, en ten slotte de kanalen en de data. BOVEN: IDENTITEIT, APPEXCHANGE, WEB MENSEN RECHTS: INTERNE SYSTEMEN ONDER: KLANTKANALEN RECHTSONDER: DATA IN EN UIT Interne gebruikers sales, service, operations Partnergebruikers Klanten Publieke website IdP medewerkers single sign-on IdP partners single sign-on AppExchange-app e-handtekening Partner Community Customer Community Salesforce de org waar we omheen ontwerpen Salesforce een community mensen identiteit, apps, web © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Stap 4 van 6: identiteit erboven, het vak dat developers vergeten.

Integratie, dan de backoffice, rechts. De integratielaag, een ESB of iPaaS (of MuleSoft, als die genoemd wordt), is een hoge balk net rechts van Salesforce. De interne systemen staan erachter: de ERP’s, finance, orderbeheer, legacysystemen, het datawarehouse. Nu leest de pagina van links naar rechts: mensen, Salesforce, integratie, backoffice.

Steves landschapsindeling Steves indeling van een systeemlandschap, nog zonder pijlen. Links, van boven naar beneden: interne gebruikers, partnergebruikers en klanten. In het midden Salesforce in blauw met een wolk, de org waar we omheen ontwerpen, met de Partner Community en de Customer Community er direct onder, tegen Salesforce aan. Erboven: een publieke website linksboven, een identiteitsprovider voor medewerkers en een voor partners boven Salesforce, en een AppExchange-app voor e-handtekeningen naar rechts geschoven. Rechts van Salesforce de integratielaag, met Data 360 eronder in dezelfde kolom (near-core: beheerd in de core, gehost buiten de core; gebruikers maken er nooit verbinding mee, en het bereikt veel backendsystemen), dan de interne systemen: ERP, financiën, orderbeheer en het datawarehouse. Eronder de klantkanalen: e-mail, webformulieren, telefoon en messaging. Rechtsonder data in en uit: een archief, dataloads, en externe data waarnaar verwezen wordt in plaats van dat ze gekopieerd wordt. Zes stappen bouwen het op: de lege zones, dan de mensen, Salesforce en zijn community's, identiteit erboven, de integratielaag en de interne systemen, en ten slotte de kanalen en de data. BOVEN: IDENTITEIT, APPEXCHANGE, WEB MENSEN RECHTS: INTERNE SYSTEMEN ONDER: KLANTKANALEN RECHTSONDER: DATA IN EN UIT Interne gebruikers sales, service, operations Partnergebruikers Klanten Publieke website IdP medewerkers single sign-on IdP partners single sign-on AppExchange-app e-handtekening Partner Community Customer Community INTEGRATIELAAG (ESB) ERP orders, facturen Financiën betalingen Orderbeheer Datawarehouse analytics Salesforce de org waar we omheen ontwerpen Salesforce een community mensen identiteit, apps, web een intern systeem de integratielaag © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Stap 5 van 6: integratie, dan de backoffice.

Kanalen eronder. Alles wat een directe lijn naar klanten heeft: email-to-case, web-to-lead, telefoon, messaging.

Data in en uit, rechtsonder. Externe databronnen, archieven, dataloads.

Data 360 rechts, onder de integratielaag. Gebruikers verbinden er nooit mee, en zijn tenant verbindt met veel backendsystemen, dus het staat bij het leidingwerk, waar die lijnen kort blijven: naast de interne systemen, het datawarehouse en de data rechtsonder. Datateams openen de schermen wel, maar die schermen staan in de org: Data 360 is near-core, beheerd in de core en gehost buiten de core (module 1). Eén lijn terug naar Salesforce laat zien wie het beheert. Waar je het vak zet, moet het verhaal vertellen van wat het doet.

Niets van deze geometrie is heilig. De waarde van een conventie is dat ik niet elke keer de visuele taal opnieuw uitvind, en dat iedereen die een van mijn diagrammen gezien heeft de volgende sneller kan lezen.

Steves landschapsindeling Steves indeling van een systeemlandschap, nog zonder pijlen. Links, van boven naar beneden: interne gebruikers, partnergebruikers en klanten. In het midden Salesforce in blauw met een wolk, de org waar we omheen ontwerpen, met de Partner Community en de Customer Community er direct onder, tegen Salesforce aan. Erboven: een publieke website linksboven, een identiteitsprovider voor medewerkers en een voor partners boven Salesforce, en een AppExchange-app voor e-handtekeningen naar rechts geschoven. Rechts van Salesforce de integratielaag, met Data 360 eronder in dezelfde kolom (near-core: beheerd in de core, gehost buiten de core; gebruikers maken er nooit verbinding mee, en het bereikt veel backendsystemen), dan de interne systemen: ERP, financiën, orderbeheer en het datawarehouse. Eronder de klantkanalen: e-mail, webformulieren, telefoon en messaging. Rechtsonder data in en uit: een archief, dataloads, en externe data waarnaar verwezen wordt in plaats van dat ze gekopieerd wordt. Zes stappen bouwen het op: de lege zones, dan de mensen, Salesforce en zijn community's, identiteit erboven, de integratielaag en de interne systemen, en ten slotte de kanalen en de data. BOVEN: IDENTITEIT, APPEXCHANGE, WEB MENSEN RECHTS: INTERNE SYSTEMEN ONDER: KLANTKANALEN RECHTSONDER: DATA IN EN UIT Interne gebruikers sales, service, operations Partnergebruikers Klanten Publieke website IdP medewerkers single sign-on IdP partners single sign-on AppExchange-app e-handtekening Partner Community Customer Community Data 360 near-core: beheerd in de core, gehost buiten de core INTEGRATIELAAG (ESB) ERP orders, facturen Financiën betalingen Orderbeheer Datawarehouse analytics E-mail email-to-case Webformulieren web-to-lead Telefoon contactcenter Messaging sms, chat Archief oude cases Dataloads migratie Externe data verwezen, niet gekopieerd Salesforce de org waar we omheen ontwerpen Salesforce een community mensen identiteit, apps, web een intern systeem een klantkanaal data in en uit de integratielaag gestreept: nog niet live, of verwezen © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Stap 6 van 6: de hele indeling, nog zonder pijlen. Elk later landschap houdt deze posities aan.

Houd de notatie simpel. Elk systeem is een kaart: zijn naam, zijn rol, en een klein icoon dat zegt wat voor ding het is: een ERP, een database, een identiteitsprovider, een groep mensen. De gebieden die ik net beschreef worden als vage, gelabelde zones getekend, zodat de indeling zelf zichtbaar is. Een legenda onderaan zegt wat elk icoon en elke lijn betekent.

Stop niet te veel in een vak. Alleen bij een heel ingewikkeld landschap open ik Salesforce in zijn onderdelen (Sales Cloud en Service Cloud binnen de org, met pijlen ertussen). En verzin geen vijftien vormen tenzij elke vorm de lezer iets vertelt. Ik wil dat iemand dertig seconden naar het landschap kijkt en de architectuur begint te begrijpen. Chique helpt niet. Duidelijk wel.

Wacht niet tot het detailontwerp om over volume na te denken. Een pijl die 500 producten per nacht draagt en een die 200.000 gps-metingen per dag draagt, kunnen er op het landschap precies hetzelfde uitzien. Het is niet hetzelfde probleem. Dus tel wat er beweegt voordat je ook maar één pijl tekent. Begin de inventaris achter de tekening met de aantallen: één rij per belangrijke dataset, met zijn volume. De nullen komen misschien nooit op de pijlen, maar je moet weten wanneer je in hoge getallen terechtkomt: duizenden of miljoenen per uur, honderdduizenden transacties, zelfs tientallen tot honderden transacties per seconde.

Die getallen sturen het mechanisme. Een paar honderd records per nacht is een batch. Een aanroep waar iemand op wacht kan synchroon zijn, als het volume dat toelaat. Tientallen tot honderden per seconde hebben misschien events nodig, zoals platform events, in plaats van een aanroep per record. De pijl ziet er hetzelfde uit; het volume bepaalt wat hem draagt, dus leg het vast in de inventaris, waar het mechanisme gekozen wordt.

Het mechanisme kan zelfs de richting van de pijl veranderen. Stuur een paar records per minuut, en Salesforce kan gewoon naar buiten aanroepen: de pijl begint bij Salesforce. Stuur er veel meer, en Salesforce publiceert misschien events op de eventbus; het externe systeem abonneert zich en roept naar binnen aan om ze op te halen, dus nu begint de pijl aan de andere kant. Nog groter, zeg een nachtelijke synchronisatie van miljoenen records, en het is een batchproces. Ken je aantallen dus vroeg, als je de mechanismen begint te ontwerpen, want de aantallen kunnen de pijlen opnieuw tekenen.

Volume doet ertoe op twee plekken, om twee redenen. Bij een datamodel heb ik het nodig om op grote datavolumes te letten en archivering te plannen; Deel 2 gaat daar diep op in. Bij een systeemlandschap sturen de grote getallen in de inventaris de keuze van integratiepatroon en mechanisme. Module 6 zet echte nullen op het landschap van Steve Trucking en zijn inventaris. Met de aantallen in de hand teken je de pijlen.

Met de systemen op hun plek verbind je ze, en het landschap wordt architectuur. Een vak is een systeem; de pijl laat zien wie de verbinding opent. Hij begint bij het systeem dat de verbinding opent en wijst naar het systeem dat het aanroept: client naar server. Het label zegt wat er beweegt, en in welke richting.

Die regel geldt voor systeemlandschappen, waar systemen met systemen praten. Op een dataflowdiagram volgt de pijl de data, zoals je zou verwachten. Neem de landschapsregel niet mee naar andere diagrammen; dat geeft alleen verwarring.

Het landschap met zijn pijlen Hetzelfde landschap als hiervoor, nu met pijlen; elke pijl begint bij het systeem dat de verbinding opent, en het label zegt wat er beweegt en in welke richting. Interne gebruikers bereiken Salesforce, partnergebruikers de Partner Community, klanten de Customer Community. Elke identiteitsprovider deelt een certificaat met Salesforce, getekend als een groene stippellijn met aan elk uiteinde een certificaat: vertrouwen, geen directe aanroep, want het inloggen reist als redirects via de browser van de gebruiker. De identiteitsprovider voor medewerkers stuurt ook gebruikersupdates naar Salesforce. Salesforce stuurt documenten uit naar de AppExchange-app voor e-handtekeningen, en orders uit naar de integratielaag, die producten in stuurt naar Salesforce. De integratielaag stuurt orders uit naar het ERP en haalt er producten in op; het ERP stuurt orderstatus in naar de integratielaag; de integratielaag haalt betalingen in op bij financiën. Data 360, onder de integratielaag, opent zijn eigen verbindingen: CRM-data uit Salesforce, zero copy naar het datawarehouse, en een verwijzing naar de externe data. Van onderen stuurt e-mail cases in en sturen webformulieren leads in naar Salesforce; Salesforce stuurt oude cases uit naar het archief; dataloads sturen records in. BOVEN: IDENTITEIT, APPEXCHANGE, WEB MENSEN RECHTS: INTERNE SYSTEMEN ONDER: KLANTKANALEN RECHTSONDER: DATA IN EN UIT Interne gebruikers sales, service, operations Partnergebruikers Klanten Publieke website IdP medewerkers single sign-on IdP partners single sign-on AppExchange-app e-handtekening Partner Community Customer Community Data 360 near-core: beheerd in de core, gehost buiten de core INTEGRATIELAAG (ESB) ERP orders, facturen Financiën betalingen Orderbeheer Datawarehouse analytics E-mail email-to-case Webformulieren web-to-lead Telefoon contactcenter Messaging sms, chat Archief oude cases Dataloads migratie Externe data verwezen, niet gekopieerd Salesforce de org waar we omheen ontwerpen gedeeld certificaat gebruikersupdates gedeeld certificaat documenten uit orders uit producten in orders uit, producten in orderstatus in betalingen in CRM-data uit zero copy verwezen cases in leads in oude cases uit records in Salesforce een community mensen identiteit, apps, web een intern systeem een klantkanaal data in en uit de integratielaag gestreept: nog niet live, of verwezen begint bij het systeem dat de verbinding opent; het label zegt wat er beweegt een gedeeld certificaat: vertrouwen, geen directe aanroep © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

De pijlen erbij gezet. Elk vak staat waar het stond; elke pijl begint bij het systeem dat de verbinding opent, en zijn label zegt wat er beweegt en in welke richting.

Dus als de integratielaag producten naar Salesforce pusht, loopt de pijl van de integratielaag naar Salesforce, met het label producten in. Als Salesforce naar buiten aanroept om ze op te halen, begint de pijl bij Salesforce, nog steeds met het label producten in. Dezelfde data, een ander gesprek, en dat verschil vertelt me wie de credentials nodig heeft en wie de fout moet afhandelen. Salesforce stuurt de order via de integratielaag: orders uit. De fulfilment van het ERP komt terug: orderstatus in. Nu zie ik wie elk gesprek begint, waar data Salesforce binnenkomt en waar ze vertrekt, welke stromen grenzen oversteken, waar het eigenaarschap waarschijnlijk ligt, en waar ik meer moet vragen.

En onthoud module 1: als ik maar één flow zie, maak ik me zorgen. Op hoog niveau hangt een pijl orders uit af van terugstromen: klanten in, producten in, prijzen. Kijk nog dieper en daar is de terugweg: acceptatie, weigering, status, een factuurnummer, een annulering. De pijlen geven me iets concreets om ter discussie te stellen.

Hier houdt het landschap op PowerPoint-kunst te zijn. Bij de review board kan elke pijl drie vragen oproepen, en ik wil dat je de antwoorden hebt:

  • Hoe authenticeert hij? OAuth, een certificaat, een named credential, iets anders?
  • Is hij synchroon of asynchroon? Wacht Salesforce op het ERP, of publiceert het en gaat het verder? Hoe snel heeft het bedrijf het resultaat nodig?
  • Wat is het mechanisme? Een REST-aanroep, een event, een bestand, een message queue, via MuleSoft of direct?

En dan: wat gebeurt er als de andere kant uitvalt? Elke pijl heeft een mechanisme nodig. Als je het niet kunt uitleggen, is de lijn versiering.

En “fire and forget” is geen antwoord. Meestal betekent het “ik heb niet ontworpen wat er na het afvuren gebeurt.” Is het aangekomen? Is het geaccepteerd? Is het mislukt? Wordt het opnieuw geprobeerd? Wie weet dat het vastzit? Wat als hetzelfde bericht twee keer aankomt? Niets daarvan gaat op het landschap, dat zou onleesbaar worden. Maar de pijl moet je laten weten dat die vragen bestaan.

Zoom in op één pijl en er is een client en een server, en elk is eigenaar van zijn helft. De client opent de verbinding: hij heeft het endpoint en de poort nodig, haalt eerst een token bij de authenticatieserver, roept het protocol en contract aan dat de server definieert, en kiest of hij wacht. Alleen de client ziet de hele heen-en-terugreis, dus alleen de client kan opnieuw proberen. De server luistert, definieert het protocol, het contract en de payload, valideert wat er binnenkomt, en ziet alleen zijn eigen deel. Als ik een pijl teken, weet ik al welk uiteinde welk is, en dat vertelt me wie eigenaar is van elk van deze vragen.

Elke pijl heeft een mechanisme nodig Eén pijl uit het landschap, ingezoomd. Salesforce, de client, met zijn Named Credential en External Credential, stuurt orders uit naar het ERP, de server, die een External Client App en een API-only integratiegebruiker heeft. Een stippellijn, verplicht voor OAuth, laat zien dat de client eerst naar een authenticatieserver gaat die het token uitgeeft. Daaronder, rij voor rij, wat de client afhandelt en wat de server definieert. Waar: de client heeft het endpoint en de poort nodig; de server luistert op een URL of IP-adres en een poort. Authenticatie: de client haalt eerst een token op, handelt het verlopen af en logt opnieuw in, met het endpoint in een Named Credential en de authenticatie in zijn External Credential; de server vertrouwt tokens van zijn authenticatieserver, en zijn External Client App en integratiegebruiker bepalen wat de client mag doen. Protocol en contract: de client roept ze aan; de server definieert ze. Payload: de client serialiseert en leest; de server definieert JSON, XML of binair. Timing: de client kiest of hij wacht, doorgaat of volgens schema draait; de server moet het bijhouden. Tracering: de client ziet de hele heen-en-terugreis; de server alleen zijn eigen deel. Fouten en uitval: de client handelt elk soort fout af, probeert opnieuw en weet wanneer hij vastzit; de server valideert wat er binnenkomt en kan niet opnieuw proberen. Onderaan: niets hiervan gaat op het landschap, maar elke pijl heeft het. verplicht voor OAuth Authenticatieserver geeft het token uit orders uit CLIENT Salesforce SERVER ERP Named Credential External Credential External Client App Integratiegebruiker (alleen API) DE CLIENT REGELT DE SERVER BEPAALT Waar Heeft het endpoint (een URL of IP-adres) en de poort nodig om verbinding te maken. Luistert op een URL of IP-adres, op een poort (bijvoorbeeld 443). Authenticatie Haalt eerst een token op bij de authenticatieserver; handelt het verlopen af en logt opnieuw in. Een Named Credential bevat het endpoint, en zijn External Credential de authenticatie. Vertrouwt tokens van zijn authenticatieserver; een External Client App en een API-only integratiegebruiker bepalen wat de client mag doen. Protocol en contract Roept het juiste protocol, de juiste methoden en verbs aan (voor SOAP importeert hij de WSDL). Definieert het protocol (REST, SOAP, gRPC) en het contract: methoden, verbs, parameters, returnwaarden. Payload Serialiseert het verzoek en leest het antwoord in het afgesproken formaat. Definieert de payload: JSON, XML of binair. Timing Kiest: wacht op het antwoord (synchroon), gaat door (asynchroon), of draait volgens schema (batch). Moet het bijhouden: beantwoordt elke aanroep zodra die binnenkomt, of neemt de batch aan wanneer die komt. Tracering Ziet de hele heen-en-terugreis: wat er uitging, wat er terugkwam, hoe lang het duurde. Ziet alleen zijn eigen deel: de aanroep die binnenkomt, de verwerking, het antwoord dat vertrekt. Fouten en uitval Handelt verbindings-, authenticatie-, server- en antwoordfouten af; probeert opnieuw, en weet wanneer hij vastzit. Valideert wat er binnenkomt en meldt zijn eigen fouten; hij ziet de heen-en-terugreis niet, dus kan hij niet opnieuw proberen. Niets hiervan gaat op het landschap, maar elke pijl heeft het. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Eén pijl, ingezoomd: de client handelt af, de server definieert. Niets hiervan gaat op het landschap, maar elke pijl heeft het.

Draai de pijl nu om. Als het ERP Salesforce aanroept, is Salesforce de server: het definieert de API’s, draait zijn eigen autorisatieserver, en beslist via een External Client App en een integratiegebruiker wat de aanroeper mag doen. Dezelfde vragen, de andere kant.

Salesforce als de server Dezelfde pijl omgedraaid. Het ERP, de client, met een client-ID en een secret of een certificaat, stuurt orderstatus in naar Salesforce, de server, die het uitvoert als API-only integratiegebruiker. Een stippellijn, verplicht voor OAuth, laat zien dat het ERP eerst naar de eigen autorisatieserver van Salesforce gaat, die het token voor de External Client App uitgeeft. Daaronder, rij voor rij, wat de client afhandelt en wat Salesforce definieert. Waar: de client heeft de My Domain-URL van de org en de API-versie nodig; Salesforce luistert op My Domain via HTTPS. Authenticatie: de client haalt een access token op via de External Client App en logt opnieuw in als het verloopt; Salesforce vertrouwt zijn eigen tokens, en het beleid van de app en de machtigingen van de integratiegebruiker bepalen wat de client mag doen. Protocol en contract: de client roept de REST-, SOAP- of Bulk-API aan; Salesforce definieert de API’s, en de objecten en velden van de org zijn het contract. Payload: JSON of XML, CSV voor Bulk. Timing: de client wacht, gaat door, of laadt in batches; Salesforce moet het bijhouden binnen de API-limieten van de org. Tracering: de client ziet de hele heen-en-terugreis; Salesforce alleen zijn eigen deel. Fouten en uitval: de client handelt verbindings-, authenticatie-, limiet- en antwoordfouten af en probeert opnieuw; Salesforce valideert wat er binnenkomt, geeft zijn fouten terug en kan niet opnieuw proberen. Onderaan: niets hiervan gaat op het landschap, maar elke pijl heeft het. verplicht voor OAuth Autorisatieserver van Salesforce geeft het token uit voor de External Client App orderstatus in CLIENT ERP SERVER Salesforce Client-ID en een secret, of een certificaat Integratiegebruiker (alleen API) DE CLIENT REGELT DE SERVER BEPAALT Waar Heeft de My Domain-URL van de org en de API-versie nodig. Salesforce luistert op het My Domain van de org, via HTTPS (poort 443). Authenticatie Haalt een access token op bij de autorisatieserver van Salesforce, via de External Client App; handelt het verlopen af en logt opnieuw in. Vertrouwt zijn eigen tokens; het beleid van de External Client App en de machtigingen van de integratiegebruiker bepalen wat de client mag doen. Protocol en contract Roept de API aan die Salesforce definieert: REST, SOAP of Bulk (voor SOAP importeert hij de WSDL). Salesforce definieert de API’s en hun versies; de objecten en velden van de org zijn het contract. Payload Serialiseert het verzoek zoals de API het verwacht, en leest het antwoord. Definieert de payload per API: JSON of XML, CSV voor Bulk. Timing Kiest: wacht op het antwoord (synchroon), gaat door (asynchroon), of laadt in batches (Bulk API). Moet het bijhouden, binnen de API-limieten van de org. Tracering Ziet de hele heen-en-terugreis: wat er uitging, wat er terugkwam, hoe lang het duurde. Ziet alleen zijn eigen deel: de aanroep die binnenkomt, het opslaan en de automatisering daarvan, het antwoord dat vertrekt. Fouten en uitval Handelt verbindings-, authenticatie-, limiet- en antwoordfouten af; probeert opnieuw, en weet wanneer hij vastzit. Valideert wat er binnenkomt (validatieregels, verplichte velden, sharing) en geeft zijn fouten terug; hij kan niet opnieuw proberen. Niets hiervan gaat op het landschap, maar elke pijl heeft het. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Salesforce als server: dezelfde vragen, met Salesforce dat de helft van de server beantwoordt.

Pijlen op het landschap, gesprekken in een swimlane

Section titled “Pijlen op het landschap, gesprekken in een swimlane ”

Hier verpesten architecten een goed diagram: ze laten één artefact alles beantwoorden. Het landschap krijgt API-namen, payloads, retries, foutwachtrijen, transformaties, elke callback, en al snel kan niemand het lezen. Doe dat niet. Het landschap is het grote plaatje: systemen en de belangrijke stromen ertussen.

Als ik een interactie moet uitleggen, teken ik een tweede diagram, maar niet voor elke integratie. Als systeem A iets naar B stuurt, of zelfs iets vraagt en een antwoord krijgt, is de gelabelde pijl genoeg. Ik wil een swimlane als het proces een gesprek wordt: A roept B aan, B checkt bij C, C antwoordt, B maakt iets aan en roept A terug, een persoon keurt goed, een ander systeem gaat verder. Mijn vuistregel: meer dan één of twee heen-en-weeruitwisselingen, en de volgorde krijgt een eigen swimlane. Pijlen op het landschap; het gesprek in de swimlane.

En let op dat een pijl daar iets anders betekent. Op het landschap is een pijl een verbinding: wie hem opent, en wat er beweegt. In een swimlane is elke pijl één bericht in een gesprek, op volgorde gelezen: een verzoek gaat de ene kant op, een antwoord komt de andere kant terug, en de volgende stap volgt.

Pijlen op het landschap, het gesprek in een swimlane Dezelfde drie systemen op twee manieren. Bovenaan, zoals op het landschap: Salesforce stuurt orders uit naar de integratielaag, die ordernummers in stuurt naar Salesforce, en de integratielaag stuurt orders uit naar het ERP. Daaronder wordt elk systeem een baan, en loopt het gesprek de pagina af in zes genummerde stappen: 1, Salesforce stuurt de order naar de integratielaag; 2, de integratielaag antwoordt, geaccepteerd, met een referentie; 3, de integratielaag vraagt het ERP de order aan te maken; 4, het ERP maakt de order aan; 5, het ERP antwoordt de integratielaag met het ordernummer; 6, de integratielaag roept Salesforce aan om de order bij te werken. Antwoorden zijn lichter. Onderaan: op het landschap is een pijl een verbinding; in een swimlane is elke pijl één bericht, op volgorde. IN HET LANDSCHAP: WIE VERBINDT, EN WAT ER BEWEEGT IN EEN SWIMLANE: HET GESPREK, OP VOLGORDE Salesforce Integratielaag ERP orders uit ordernummers in orders uit stuur de order 1 geaccepteerd: een referentie 2 maak de order aan 3 maakt de order aan 4 het ordernummer 5 werk de order bij 6 Op het landschap is een pijl een verbinding. In een swimlane is elke pijl één bericht, op volgorde. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Drie pijlen op het landschap; zes stappen in de swimlane. Op het landschap is een pijl een verbinding; in een swimlane is elke pijl één bericht, op volgorde.

Als het landschap er grotendeels klaar uitziet, loop het dan door, pijl voor pijl. ERP naar Salesforce: wat beweegt er, wie is eigenaar, hoe authenticeert het, wat is het mechanisme, synchroon of asynchroon, hoe actueel moet het zijn? Dan de volgende pijl, en de volgende. Hier verschijnen de gaten. “O, we hebben nooit uitgezocht hoe de partner dat eigenlijk stuurt.” “We sturen orders naar het ERP, maar we hebben niet ontworpen hoe geweigerde terugkomen.” Goed. Je vond het op het whiteboard in plaats van in productie.

De tekening moet leesbaar blijven, dus de details gaan in de inventaris erachter. Je bent ermee begonnen met de aantallen; maak hem nu af, één rij per belangrijke dataset of stroom:

KolomWat ik wil weten
DatasetKlant, product, order, levering, factuur
SoortStamgegevens, referentie, transactie, analytisch, ongestructureerd
EigenaarWie is eigenaar van de betekenis en levenscyclus?
BronsysteemWaar staat de gezaghebbende versie?
WorkloadOperationeel, analytisch, streaming
VolumeHet aantal nullen
OrgWelke Salesforce-org, als er meerdere zijn?
AuthenticatieHoe bouwt de verbinding vertrouwen op?
Mechanisme en timingAPI, event, bestand, federatie; synchroon, asynchroon, batch
AanpakKopiëren, ernaar verwijzen of federeren?

Nu zijn er twee artefacten: het landschap laat me de architectuur zien, en de inventaris laat me haar ondervragen.

De inventaris achter de tekening De inventaris achter het landschap, één rij per stroom, met de kolommen volume en mechanisme samen ingekleurd. Producten in: eigendom van het ERP, ongeveer 500 wijzigingen per nacht, een nachtelijke batch via de integratielaag, een External Client App en integratiegebruiker, gekopieerd. Orders uit: eigendom van Salesforce, ongeveer 2.000 per dag, een paar per minuut, bijna realtime doordat Salesforce via de integratielaag naar buiten aanroept, met een Apex- of Flow-callout en een Named Credential, gekopieerd. Orderstatus in: eigendom van het ERP, ongeveer 16.000 per dag in pieken, asynchroon doordat het ERP naar de integratielaag pusht, die Salesforce bijwerkt via de REST API, gekopieerd. Betalingen in: eigendom van financiën, ongeveer 1.500 per dag, een batch per uur via Bulk API 2.0, gekopieerd. CRM-data uit: eigendom van Salesforce, miljoenen records, Data 360 dat volgens schema inleest vanuit de org, near-core, gekopieerd naar Data 360. Zero copy: vijf jaar historie in het datawarehouse, honderden miljoenen rijen, ter plekke bevraagd, gefedereerd. Verwezen: een externe provider, één opzoeking tegelijk, gelezen wanneer iemand het nodig heeft, verwezen. Onderaan: op het landschap lijken de pijlen op elkaar; het volume bepaalt wat elke pijl draagt. STROOM OP HET LANDSCHAP EIGENAAR VOLUME MECHANISME EN TIMING AUTHENTICATIE KOPIËREN, VERWIJZEN OF FEDEREREN Producten in ERP ~500 wijzigingen per nacht Batch: de integratielaag laadt ze elke nacht External Client App, integratiegebruiker Kopiëren Orders uit Salesforce ~2.000 per dag, een paar per minuut Bijna realtime: Salesforce roept via de integratielaag naar buiten aan, met een Apex- of Flow-callout Named Credential Kopiëren Orderstatus in ERP ~16.000 per dag, in pieken Asynchroon: het ERP pusht naar de integratielaag, die Salesforce bijwerkt via de REST API External Client App, integratiegebruiker Kopiëren Betalingen in Financiën ~1.500 per dag Batch: elk uur, via de integratielaag en Bulk API 2.0 External Client App, integratiegebruiker Kopiëren CRM-data uit Salesforce Miljoenen records, allemaal Data 360 leest volgens schema in vanuit de org Near-core: beheerd in de org Kopiëren naar Data 360 Zero copy Datawarehouse Vijf jaar historie, honderden miljoenen rijen Ter plekke bevraagd wanneer nodig Een Data 360-verbinding met het datawarehouse Federeren Verwezen Externe provider Eén opzoeking tegelijk Gelezen wanneer iemand het nodig heeft Een Data 360-verbinding Verwijzen Op het landschap lijken de pijlen op elkaar. Het volume bepaalt wat elke pijl draagt. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

De inventaris achter ED-D42. De pijlen lijken op het landschap op elkaar; het volume bepaalt wat elke pijl draagt.

Daarom vind ik dit artefact fijn: het helpt me denken. “Hoe gaan we rapporteren over Salesforce en het ERP?” Het is de vraag uit module 3: welk van mijn diagrammen lost dit prachtig op? Het landschap. Als alles in de core staat: standaardrapporten. Als de data in het ERP en het datawarehouse staat, zie je dat meteen. “Waar moet dit klantattribuut beheerd worden?” Kijk welke systemen het gebruiken en welk al eigenaar is van de klant. “Heeft Salesforce elke gps-meting nodig?” Wie maakt haar, wie gebruikt haar, wat is de workload? Misschien heeft Salesforce de huidige positie nodig en bewaart een ander platform de historie. Het landschap geeft je niet het antwoord. Het geeft je de juiste kijk op het probleem.

Teken de huidige situatie voordat je haar repareert

Section titled “Teken de huidige situatie voordat je haar repareert ”

Nog één discipline. Teken in een bestaande enterprise wat er bestaat, niet wat je zou willen dat er bestond. De spreadsheet die elke vrijdag gemaild wordt: teken hem. De CSV van de partner op een SFTP-server: teken hem. De integratie die om historische redenen om de ESB heen gaat: teken haar. Mensen die data tussen twee systemen overtypen: laat het zien. Ruim de werkelijkheid niet op terwijl je haar documenteert. Je hebt het huidige landschap nodig voordat je het doellandschap ontwerpt, en dat doen we voor Steve Trucking in module 6.

Voorbij het examen: wat AI verandert. Het landschap wordt een agentkaart. Als een agent “waar blijft mijn levering?” beantwoordt, moet het landschap zeggen of het antwoord uit Salesforce komt, uit een partnersysteem, telematica, het ERP, of een mix. Agents halen systeemgrenzen niet weg; ze maken het nog belangrijker om te weten welk systeem gezaghebbend is en hoe je het veilig bereikt.

  • Welke systemen en gebruikersgroepen op het landschap horen, en hoe hun plaats hun rol laat zien.
  • Welke stromen systeemgrenzen oversteken, in welke richting, en wat er terugkomt.
  • Hoe elke verbinding authenticeert, welk mechanisme haar draagt, en of ze synchroon, asynchroon, batch of gefedereerd is.
  • Wanneer een gelabelde pijl genoeg is en wanneer een interactie een eigen swimlane nodig heeft.
  • Wat de inventaris achter de tekening vastlegt: eigenaar, workload, volume, org, timing, authenticatie, en kopiëren, verwijzen of federeren.

Het landschap is niet iets wat ik teken nadat de architectuur klaar is. Het is hoe ik de architectuur vind. En als je denkt dat het af is, bewonder het dan niet. Loop het door. Elke pijl die je nog niet kunt uitleggen, laat je zien waar het werk zit.