Skip to content

Draw the System Landscape

Also in 28 languages

Español · 日本語 · Português (Brasil) · Français · Deutsch · Italiano · 한국어 · 简体中文 · Português (Portugal) · 繁體中文 · Bahasa Indonesia · Türkçe · Polski · Tiếng Việt · ไทย · Nederlands · العربية · עברית · Українська · हिन्दी · Русский · 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.
Image generated with AI

Module 4 of 6 in the chapter Understanding Enterprise Data, chapter 4 of the Data Architect course. Each module stands on its own. Previous: The Systems Around Salesforce · Next: Org Strategy Is a Landscape Decision

The question this module answers: How do I draw a landscape that shows where the data goes?

Give me a new scenario and a blank whiteboard, and one of the first things I’ll draw is the system landscape. Not beautiful, not every API, not the data model yet. I want to see the enterprise: who the users are, which systems are involved, where Salesforce sits, what surrounds it, where data comes from and where it goes. And then I want to walk the arrows. A good landscape isn’t a picture of boxes. It’s a way to expose architectural decisions.

I make CTA candidates practice this. Read the scenario, then start drawing. Don’t wait until you’ve solved it all in your head; the drawing helps you solve it. That’s why the homework after day one is to start the landscape before taking a stab at the data model. Draw the data model first and you’ve already assumed what belongs in Salesforce. Draw the landscape first and you can see the systems that should shape that decision.

Start high, then drill down: the whole enterprise first, then the detail where it matters.

Steve's landscape layout Steve's system landscape layout, with no arrows yet. On the left, top to bottom: internal users, partner users and customers. In the middle, Salesforce in blue with a cloud, the org we design around, with the Partner Community and the Customer Community touching it below. Above: a public website at the top left, an employee identity provider and a partner identity provider over Salesforce, and an AppExchange app for e-signature slid to the right. To the right of Salesforce, the integration layer, with Data 360 below it in the same column (near-core: managed on core, hosted off core; users never connect to it, and it reaches many back-end systems), then the internal systems: ERP, finance, order management and the warehouse. Below: the customer channels, email, web forms, phone and messaging. At the bottom right, data in and out: an archive, data loads, and external data that's referenced rather than copied. Six step frames build it up: the empty zones, then the people, Salesforce and its communities, identity above, integration and the internal systems, and finally the channels and the data. ABOVE: IDENTITY, APPEXCHANGE, WEB PEOPLE RIGHT: INTERNAL SYSTEMS BELOW: CUSTOMER CHANNELS BOTTOM RIGHT: DATA IN AND OUT © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Step 1 of 6: a blank canvas. Only the zones.

There are many ways to draw a system landscape. This is just my way, one I’ve refined over many years, and I’m sharing it so you can see how to put one together quickly. I use it for every Salesforce landscape, and it reads like a sentence: people on the left reach Salesforce in the middle, trusted through the systems above it, served through the channels below it, and connected to the back office on the right.

People on the left, top to bottom: internal users, partners, customers. Not every persona yet; enough to answer who is trying to reach this architecture? Each group points to where it comes in: internal users to Salesforce, partners to the partner community, customers to the customer community. Systems don’t exist by themselves. Somebody, or something, is trying to use them.

Steve's landscape layout Steve's system landscape layout, with no arrows yet. On the left, top to bottom: internal users, partner users and customers. In the middle, Salesforce in blue with a cloud, the org we design around, with the Partner Community and the Customer Community touching it below. Above: a public website at the top left, an employee identity provider and a partner identity provider over Salesforce, and an AppExchange app for e-signature slid to the right. To the right of Salesforce, the integration layer, with Data 360 below it in the same column (near-core: managed on core, hosted off core; users never connect to it, and it reaches many back-end systems), then the internal systems: ERP, finance, order management and the warehouse. Below: the customer channels, email, web forms, phone and messaging. At the bottom right, data in and out: an archive, data loads, and external data that's referenced rather than copied. Six step frames build it up: the empty zones, then the people, Salesforce and its communities, identity above, integration and the internal systems, and finally the channels and the data. ABOVE: IDENTITY, APPEXCHANGE, WEB PEOPLE RIGHT: INTERNAL SYSTEMS BELOW: CUSTOMER CHANNELS BOTTOM RIGHT: DATA IN AND OUT Internal users sales, service, operations Partner users Customers people © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Step 2 of 6: who is trying to reach this architecture?

Salesforce in the middle. One plain box. Not because Salesforce is the center of the enterprise (we just spent three modules saying it isn’t) but because it’s the system I’m designing around. It’s the anchor.

The communities right below it, touching. A partner community and a customer community are separate endpoints, so they get their own boxes. But they sit against Salesforce, because nothing has to integrate to reach them: they run in the same org.

Steve's landscape layout Steve's system landscape layout, with no arrows yet. On the left, top to bottom: internal users, partner users and customers. In the middle, Salesforce in blue with a cloud, the org we design around, with the Partner Community and the Customer Community touching it below. Above: a public website at the top left, an employee identity provider and a partner identity provider over Salesforce, and an AppExchange app for e-signature slid to the right. To the right of Salesforce, the integration layer, with Data 360 below it in the same column (near-core: managed on core, hosted off core; users never connect to it, and it reaches many back-end systems), then the internal systems: ERP, finance, order management and the warehouse. Below: the customer channels, email, web forms, phone and messaging. At the bottom right, data in and out: an archive, data loads, and external data that's referenced rather than copied. Six step frames build it up: the empty zones, then the people, Salesforce and its communities, identity above, integration and the internal systems, and finally the channels and the data. ABOVE: IDENTITY, APPEXCHANGE, WEB PEOPLE RIGHT: INTERNAL SYSTEMS BELOW: CUSTOMER CHANNELS BOTTOM RIGHT: DATA IN AND OUT Internal users sales, service, operations Partner users Customers Partner Community Customer Community Salesforce the org we design around Salesforce a community people © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Step 3 of 6: Salesforce in the middle, the communities right below it.

Identity above. The identity providers go at the top, the ones developers forget: one for internal users, maybe another for partners. AppExchange packages go up there too, slid to the right, because they’re capabilities brought into the org rather than back-office systems trading data with it. Public websites sit at the top left.

Steve's landscape layout Steve's system landscape layout, with no arrows yet. On the left, top to bottom: internal users, partner users and customers. In the middle, Salesforce in blue with a cloud, the org we design around, with the Partner Community and the Customer Community touching it below. Above: a public website at the top left, an employee identity provider and a partner identity provider over Salesforce, and an AppExchange app for e-signature slid to the right. To the right of Salesforce, the integration layer, with Data 360 below it in the same column (near-core: managed on core, hosted off core; users never connect to it, and it reaches many back-end systems), then the internal systems: ERP, finance, order management and the warehouse. Below: the customer channels, email, web forms, phone and messaging. At the bottom right, data in and out: an archive, data loads, and external data that's referenced rather than copied. Six step frames build it up: the empty zones, then the people, Salesforce and its communities, identity above, integration and the internal systems, and finally the channels and the data. ABOVE: IDENTITY, APPEXCHANGE, WEB PEOPLE RIGHT: INTERNAL SYSTEMS BELOW: CUSTOMER CHANNELS BOTTOM RIGHT: DATA IN AND OUT Internal users sales, service, operations Partner users Customers Public website Employee IdP single sign-on Partner IdP single sign-on AppExchange app e-signature Partner Community Customer Community Salesforce the org we design around Salesforce a community people identity, apps, web © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Step 4 of 6: identity above, the box developers forget.

Integration, then the back office, to the right. The integration layer, an ESB or iPaaS (or MuleSoft, when it’s named), is a tall bar just right of Salesforce. The internal systems sit behind it: the ERPs, finance, order management, legacy systems, the warehouse. Now the page reads left to right: people, Salesforce, integration, back office.

Steve's landscape layout Steve's system landscape layout, with no arrows yet. On the left, top to bottom: internal users, partner users and customers. In the middle, Salesforce in blue with a cloud, the org we design around, with the Partner Community and the Customer Community touching it below. Above: a public website at the top left, an employee identity provider and a partner identity provider over Salesforce, and an AppExchange app for e-signature slid to the right. To the right of Salesforce, the integration layer, with Data 360 below it in the same column (near-core: managed on core, hosted off core; users never connect to it, and it reaches many back-end systems), then the internal systems: ERP, finance, order management and the warehouse. Below: the customer channels, email, web forms, phone and messaging. At the bottom right, data in and out: an archive, data loads, and external data that's referenced rather than copied. Six step frames build it up: the empty zones, then the people, Salesforce and its communities, identity above, integration and the internal systems, and finally the channels and the data. ABOVE: IDENTITY, APPEXCHANGE, WEB PEOPLE RIGHT: INTERNAL SYSTEMS BELOW: CUSTOMER CHANNELS BOTTOM RIGHT: DATA IN AND OUT Internal users sales, service, operations Partner users Customers Public website Employee IdP single sign-on Partner IdP single sign-on AppExchange app e-signature Partner Community Customer Community INTEGRATION LAYER (ESB) ERP orders, invoices Finance payments Order management Warehouse analytics Salesforce the org we design around Salesforce a community people identity, apps, web an internal system the integration layer © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Step 5 of 6: integration, then the back office.

Channels below. Whatever has a direct line to customers: email-to-case, web-to-lead, phone, messaging.

Data in and out, bottom right. External data sources, archives, data loads.

Data 360 to the right, below the integration layer. Users never connect to it, and its tenant connects to many back-end systems, so it sits with the plumbing, where those lines stay short: beside the internal systems, the warehouse and the data at the bottom right. Data teams do open its screens, but those screens are in the org: Data 360 is near-core, managed on core and hosted off core (module 1). One line back to Salesforce shows who manages it. Where you put the box should tell the story of what it does.

None of this geometry is sacred. The value of a convention is that I don’t reinvent the visual language every time, and anyone who’s seen one of my diagrams can read the next one faster.

Steve's landscape layout Steve's system landscape layout, with no arrows yet. On the left, top to bottom: internal users, partner users and customers. In the middle, Salesforce in blue with a cloud, the org we design around, with the Partner Community and the Customer Community touching it below. Above: a public website at the top left, an employee identity provider and a partner identity provider over Salesforce, and an AppExchange app for e-signature slid to the right. To the right of Salesforce, the integration layer, with Data 360 below it in the same column (near-core: managed on core, hosted off core; users never connect to it, and it reaches many back-end systems), then the internal systems: ERP, finance, order management and the warehouse. Below: the customer channels, email, web forms, phone and messaging. At the bottom right, data in and out: an archive, data loads, and external data that's referenced rather than copied. Six step frames build it up: the empty zones, then the people, Salesforce and its communities, identity above, integration and the internal systems, and finally the channels and the data. ABOVE: IDENTITY, APPEXCHANGE, WEB PEOPLE RIGHT: INTERNAL SYSTEMS BELOW: CUSTOMER CHANNELS BOTTOM RIGHT: DATA IN AND OUT Internal users sales, service, operations Partner users Customers Public website Employee IdP single sign-on Partner IdP single sign-on AppExchange app e-signature Partner Community Customer Community Data 360 near-core: managed on core, hosted off core INTEGRATION LAYER (ESB) ERP orders, invoices Finance payments Order management Warehouse analytics Email email-to-case Web forms web-to-lead Phone contact centre Messaging SMS, chat Archive old cases Data loads migration External data referenced, not copied Salesforce the org we design around Salesforce a community people identity, apps, web an internal system a customer channel data in and out the integration layer dashed: not live yet, or referenced © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Step 6 of 6: the whole layout, no arrows yet. Every later landscape keeps these positions.

Keep the notation simple. Every system is a card: its name, its role, and a small icon that says what kind of thing it is: an ERP, a database, an identity provider, a group of people. The regions I just described are drawn as faint, labeled zones, so the layout itself is visible. A legend at the bottom says what every icon and line means.

Don’t put too much inside a box. Only on a very complicated landscape do I open Salesforce up into its parts (Sales Cloud and Service Cloud inside the org, with arrows among them). And don’t invent fifteen shapes unless each one tells the reader something. I want someone to look at the landscape for thirty seconds and start understanding the architecture. Fancy doesn’t help. Clear does.

Don’t wait for detailed design to think about volume. An arrow carrying 500 products a night and one carrying 200,000 GPS readings a day can look exactly the same on the landscape. They aren’t the same problem. So before you draw a single arrow, count what moves. Start the inventory behind the picture with the counts: one row per important data set, with its volume. The zeros may never show up on the arrows, but you need to know when you cross into high numbers: thousands or millions in an hour, hundreds of thousands of transactions, even tens to hundreds of transactions a second.

Those numbers drive the mechanism. A few hundred records a night is a batch. A call someone waits on can be synchronous, if the volume lets it. Tens to hundreds a second may need events, such as platform events, rather than a call per record. The arrow will look the same; the volume decides what carries it, so record it in the inventory, where the mechanism gets chosen.

The mechanism can even change the direction of the arrow. Send a couple of records a minute, and Salesforce can simply call out: the arrow starts at Salesforce. Send far more, and Salesforce may publish events on the event bus instead; the external system subscribes and calls in for them, so now the arrow starts at the other end. Bigger still, say a nightly sync of millions of records, and it’s a batch process. So know your counts early, as you start designing the mechanisms, because the counts can redraw the arrows.

Volume matters in two places, for two reasons. On a data model, I need it to watch for large data volumes and plan archiving; Part 2 goes deep on that. On a system landscape, the large numbers in the inventory drive the choice of integration pattern and mechanism. Module 6 puts real zeros on Steve Trucking’s landscape and its inventory. With the counts in hand, draw the arrows.

With the systems in place, connect them, and the landscape becomes architecture. A box is a system; the arrow shows who initiates the connection. It starts at the system that opens the connection and points at the one it calls: client to server. The label says what moves, and which way.

That rule is for system landscapes, where systems are talking to systems. On a data-flow diagram the arrow follows the data, as you’d expect. Don’t carry the landscape rule into other diagrams; it only adds confusion.

The landscape with its arrows The same landscape as before, now with arrows; each starts at the system that opens the connection, and its label says what moves and which way. Internal users reach Salesforce, partner users the Partner Community, customers the Customer Community. Each identity provider and Salesforce share a certificate, shown as a dotted green line with a certificate at each end: trust, not a direct call, because sign-on travels through the user's browser as redirects. The employee identity provider also sends user updates to Salesforce. Salesforce sends documents out to the AppExchange e-signature app, and orders out to the integration layer, which sends products in to Salesforce. The integration layer sends orders out and brings products in from the ERP; the ERP sends order status in to the integration layer; the integration layer brings payments in from finance. Data 360, below the integration layer, opens its connections: CRM data out of Salesforce, zero copy to the warehouse, and a reference to the external data. From below, email sends cases in and web forms send leads in to Salesforce; Salesforce sends old cases out to the archive; data loads send records in. {"author": "Steve Simpson", "blueprint": "1.0.0", "builder": "standard 1.28.0", "built": "2026-10-15", "id": "DGM-DA-ED-42", "rights": "\u00a9 2026 Twinshark LLC. All rights reserved.", "template": "system-landscape 0.10.0", "theme": "stevetecharc 1.4.0"} ABOVE: IDENTITY, APPEXCHANGE, WEB PEOPLE RIGHT: INTERNAL SYSTEMS BELOW: CUSTOMER CHANNELS BOTTOM RIGHT: DATA IN AND OUT Internal users sales, service, operations Partner users Customers Public website Employee IdP single sign-on Partner IdP single sign-on AppExchange app e-signature Partner Community Customer Community Data 360 near-core: managed on core, hosted off core INTEGRATION LAYER (ESB) ERP orders, invoices Finance payments Order management Warehouse analytics Email email-to-case Web forms web-to-lead Phone contact centre Messaging SMS, chat Archive old cases Data loads migration External data referenced, not copied Salesforce the org we design around shared certificate user updates shared certificate documents out orders out products in orders out, products in order status in payments in CRM data out zero copy referenced cases in leads in old cases out records in Salesforce a community people identity, apps, web an internal system a customer channel data in and out the integration layer dashed: not live yet, or referenced starts at the system that opens the connection; the label says what moves a shared certificate: trust, no direct call © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

The arrows dropped in. Every box is where it was; each arrow starts at the system that opens the connection, and its label says what moves and which way.

So if the integration layer pushes products into Salesforce, the arrow runs from the integration layer to Salesforce, labeled products in. If Salesforce calls out to fetch them, the arrow starts at Salesforce, still labeled products in. Same data, different conversation, and that difference tells me who needs the credentials and who has to handle the failure. Salesforce sends the order through the integration layer: orders out. The ERP’s fulfillment comes back: order status in. Now I can see who starts each conversation, where data enters Salesforce and where it leaves, which flows cross boundaries, where ownership probably sits, and where I need to ask more.

And remember module 1: whenever I see only one flow, I get concerned. At the high level, an orders out arrow depends on back flows: customers in, products in, prices. Look deeper still and there’s the return journey: acceptance, rejection, status, an invoice number, a cancellation. The arrows give me something concrete to challenge.

This is where the landscape stops being PowerPoint art. At the review board, any arrow can draw three questions, and I want you to have the answers:

  • How does it authenticate? OAuth, a certificate, a named credential, something else?
  • Is it synchronous or asynchronous? Does Salesforce wait for the ERP, or publish and carry on? How fast does the business need the result?
  • What’s the mechanism? A REST call, an event, a file, a message queue, through MuleSoft or direct?

And then: what happens when the other side is down? Every arrow needs a mechanism. If you can’t explain it, the line is decoration.

And “fire and forget” isn’t an answer. It usually means “I haven’t designed what happens after the fire.” Did it arrive? Was it accepted? Did it fail? Will it retry? Who knows it’s stuck? What if the same message arrives twice? None of that goes on the landscape, which would become unreadable. But the arrow should make you know those questions exist.

Zoom in on any one arrow and there’s a client and a server, and each owns its half. The client opens the connection: it needs the endpoint and the port, gets a token from the authentication server first, calls the protocol and contract the server defines, and chooses whether to wait. Only the client sees the whole round trip, so only the client can retry. The server listens, defines the protocol, the contract and the payload, validates what comes in, and sees only its own part. When I draw an arrow, I already know which end is which, and that tells me who owns each of these questions.

Every arrow needs a mechanism One arrow from the landscape, zoomed in. Salesforce, the client, with its Named Credential and External Credential, sends orders out to the ERP, the server, which has an External Client App and an API-only integration user. A dashed line, required for OAuth, shows the client going first to an authentication server that issues the token. Below, row by row, what the client handles and what the server defines. Where: the client needs the endpoint and port; the server listens on a URL or IP address and a port. Authentication: the client gets a token first, handles expiry and signs in again, with the endpoint in a Named Credential and the authentication in its External Credential; the server trusts tokens from its authentication server, and its External Client App and integration user decide what the client may do. Protocol and contract: the client calls them; the server defines them. Payload: the client serializes and reads; the server defines JSON, XML or binary. Timing: the client chooses to wait, carry on, or run on a schedule; the server has to keep up. Trace: the client sees the whole round trip; the server only its own part. Errors and down: the client handles every kind of error, retries and knows when it's stuck; the server validates what comes in and can't retry. Underneath: none of this goes on the landscape, but every arrow has it. {"author": "Steve Simpson", "blueprint": "1.0.0", "builder": "standard 1.28.0", "built": "2026-10-15", "id": "DGM-DA-ED-43", "rights": "\u00a9 2026 Twinshark LLC. All rights reserved.", "template": "system-landscape/connection 0.10.0", "theme": "stevetecharc 1.4.0"} required for OAuth Authentication server issues the token orders out CLIENT Salesforce SERVER ERP Named Credential External Credential External Client App Integration user (API only) THE CLIENT HANDLES THE SERVER DEFINES Where Needs the endpoint (a URL or IP address) and the port to connect to. Listens on a URL or IP address, on a port (for example 443). Authentication Gets a token from the authentication server first; handles expiry and signs in again. A Named Credential holds the endpoint, and its External Credential the authentication. Trusts tokens from its authentication server; an External Client App and an API-only integration user decide what the client may do. Protocol and contract Calls the right protocol, methods and verbs (for SOAP, imports the WSDL). Defines the protocol (REST, SOAP, gRPC) and the contract: methods, verbs, parameters, returns. Payload Serializes the request and reads the response in the agreed format. Defines the payload: JSON, XML or binary. Timing Chooses: waits for the answer (synchronous), carries on (asynchronous), or runs on a schedule (batch). Has to keep up: answers each call as it arrives, or takes the batch when it comes. Trace Sees the whole round trip: what went out, what came back, how long it took. Sees only its own part: the call arriving, its processing, the answer leaving. Errors and down Handles connection, authentication, server and response errors; retries, and knows when it's stuck. Validates what comes in and reports its own errors; it can't see the round trip, so it can't retry. None of this goes on the landscape, but every arrow has it. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

One arrow, zoomed in: the client handles, the server defines. None of this goes on the landscape, but every arrow has it.

Now turn the arrow around. When the ERP calls Salesforce, Salesforce is the server: it defines the APIs, runs its own authorization server, and decides through an External Client App and an integration user what the caller may do. Same questions, other side.

Salesforce as the server The same arrow turned around. The ERP, the client, holding a client ID and a secret or a certificate, sends order status in to Salesforce, the server, which runs it as an API-only integration user. A dashed line, required for OAuth, shows the ERP going first to Salesforce's own authorization server, which issues the token for the External Client App. Below, row by row, what the client handles and what Salesforce defines. Where: the client needs the org's My Domain URL and the API version; Salesforce listens on My Domain over HTTPS. Authentication: the client gets an access token through the External Client App and signs in again when it expires; Salesforce trusts its own tokens, and the app's policies and the integration user's permissions decide what the client may do. Protocol and contract: the client calls the REST, SOAP or Bulk API; Salesforce defines the APIs, and the org's objects and fields are the contract. Payload: JSON or XML, CSV for Bulk. Timing: the client waits, carries on, or loads in batches; Salesforce has to keep up within the org's API limits. Trace: the client sees the whole round trip; Salesforce only its own part. Errors and down: the client handles connection, authentication, limit and response errors and retries; Salesforce validates what comes in and returns its errors, and can't retry. Underneath: none of this goes on the landscape, but every arrow has it. {"author": "Steve Simpson", "blueprint": "1.0.0", "builder": "standard 1.28.0", "built": "2026-10-15", "id": "DGM-DA-ED-46", "rights": "\u00a9 2026 Twinshark LLC. All rights reserved.", "template": "system-landscape/connection 0.10.0", "theme": "stevetecharc 1.4.0"} required for OAuth Salesforce authorization server issues the token for the External Client App order status in CLIENT ERP SERVER Salesforce Client ID and a secret, or a certificate Integration user (API only) THE CLIENT HANDLES THE SERVER DEFINES Where Needs the org's My Domain URL and the API version. Salesforce listens on the org's My Domain, over HTTPS (port 443). Authentication Gets an access token from Salesforce's authorization server, through the External Client App; handles expiry and signs in again. Trusts its own tokens; the External Client App's policies and the integration user's permissions decide what the client may do. Protocol and contract Calls the API Salesforce defines: REST, SOAP or Bulk (for SOAP, imports the WSDL). Salesforce defines the APIs and their versions; the org's objects and fields are the contract. Payload Serializes the request the way the API expects, and reads the response. Defines the payload for each API: JSON or XML, CSV for Bulk. Timing Chooses: waits for the answer (synchronous), carries on (asynchronous), or loads in batches (Bulk API). Has to keep up, within the org's API limits. Trace Sees the whole round trip: what went out, what came back, how long it took. Sees only its own part: the call arriving, the save and its automation, the answer leaving. Errors and down Handles connection, authentication, limit and response errors; retries, and knows when it's stuck. Validates what comes in (validation rules, required fields, sharing) and returns its errors; it can't retry. None of this goes on the landscape, but every arrow has it. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Salesforce as the server: the same questions, with Salesforce answering the server’s half.

Arrows on the Landscape, Conversations in a Swim Lane

Section titled “Arrows on the Landscape, Conversations in a Swim Lane”

Here’s where architects ruin a good diagram: they make one artifact answer everything. The landscape gets API names, payloads, retries, error queues, transformations, every callback, and soon nobody can read it. Don’t. The landscape is the big picture: systems and the important flows between them.

When I need to explain an interaction, I draw a second diagram, but not for every integration. If system A sends something to B, or even asks and gets an answer, the labeled arrow is enough. I want a swim lane when the process becomes a conversation: A calls B, B checks with C, C answers, B creates something and calls A back, a person approves, another system carries on. My rule of thumb: more than one or two back-and-forth exchanges, and the sequence gets its own swim lane. Arrows on the landscape; the conversation in the swim lane.

And notice that an arrow means something different there. On the landscape, an arrow is a connection: who opens it, and what moves. In a swim lane, each arrow is one message in a conversation, read in order: a request goes one way, a reply comes back the other, and the next step follows.

Arrows on the landscape, the conversation in a swim lane The same three systems shown two ways. Across the top, as on the landscape: Salesforce sends orders out to the integration layer, which sends order numbers in to Salesforce, and the integration layer sends orders out to the ERP. Below, each system becomes a lane, and the conversation runs down the page in six numbered steps: 1, Salesforce sends the order to the integration layer; 2, the integration layer replies, accepted, with a reference; 3, the integration layer asks the ERP to create the order; 4, the ERP creates the order; 5, the ERP replies to the integration layer with the order number; 6, the integration layer calls Salesforce to update the order. Replies are lighter. Underneath: on the landscape, an arrow is a connection; in a swim lane, each arrow is one message, in order. {"author": "Steve Simpson", "blueprint": "0.2.0", "builder": "standard 1.28.0", "built": "2026-10-15", "id": "DGM-DA-ED-44", "rights": "\u00a9 2026 Twinshark LLC. All rights reserved.", "template": "system-landscape/lanes 0.10.0", "theme": "stevetecharc 1.4.0"} ON THE LANDSCAPE: WHO CONNECTS, AND WHAT MOVES IN A SWIM LANE: THE CONVERSATION, IN ORDER Salesforce Integration layer ERP orders out order numbers in orders out send the order 1 accepted: a reference 2 create the order 3 creates the order 4 the order number 5 update the order 6 On the landscape, an arrow is a connection. In a swim lane, each arrow is one message, in order. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Three arrows on the landscape; six steps in the swim lane. On the landscape an arrow is a connection; in a swim lane each arrow is one message, in order.

When the landscape looks mostly done, walk it, arrow by arrow. ERP to Salesforce: what’s moving, who owns it, how does it authenticate, what’s the mechanism, sync or async, how current must it be? Then the next arrow, and the next. This is where gaps appear. “Oh, we never worked out how the partner actually sends that.” “We send orders to the ERP, but we haven’t designed how rejected ones come back.” Good. You found it on the whiteboard instead of in production.

The picture has to stay readable, so the details go in the inventory behind it. You started it with the counts; now finish it, one row per important data set or flow:

ColumnWhat I want to know
Data setCustomer, product, order, delivery, invoice
KindMaster, reference, transactional, analytical, unstructured
OwnerWho owns its meaning and lifecycle?
System of recordWhere is the authoritative version?
WorkloadOperational, analytical, streaming
VolumeThe Number of Zeros
OrgWhich Salesforce org, if there are several?
AuthenticationHow does the connection establish trust?
Mechanism and timingAPI, event, file, federation; sync, async, batch
ApproachCopy it, reference it, or federate it?

Now there are two artifacts: the landscape lets me see the architecture, and the inventory lets me interrogate it.

The inventory behind the picture The inventory behind the landscape, one row per flow, with the volume and mechanism columns tinted together. Products in: owned by the ERP, about 500 changes a night, a nightly batch through the integration layer, an External Client App and integration user, copied. Orders out: owned by Salesforce, about 2,000 a day, a few a minute, near real time as Salesforce calls out through the integration layer, with an Apex or Flow callout and a Named Credential, copied. Order status in: owned by the ERP, about 16,000 a day in bursts, asynchronous as the ERP pushes to the integration layer, which updates Salesforce through the REST API, copied. Payments in: owned by finance, about 1,500 a day, an hourly batch through Bulk API 2.0, copied. CRM data out: owned by Salesforce, millions of records, Data 360 ingesting from the org on a schedule, near-core, copied into Data 360. Zero copy: the warehouse's five years of history, hundreds of millions of rows, queried in place, federated. Referenced: an external provider, one lookup at a time, read when someone needs it, referenced. Underneath: the arrows look alike on the landscape; the volume decides what carries each one. {"author": "Steve Simpson", "blueprint": "1.1.0", "builder": "standard 1.28.0", "built": "2026-10-15", "id": "DGM-DA-ED-45", "rights": "\u00a9 2026 Twinshark LLC. All rights reserved.", "template": "system-landscape/inventory 0.10.0", "theme": "stevetecharc 1.4.0"} FLOW ON THE LANDSCAPE OWNER VOLUME MECHANISM AND TIMING AUTHENTICATION COPY, REFERENCE OR FEDERATE Products in ERP ~500 changes a night Batch: the integration layer loads them nightly External Client App, integration user Copy Orders out Salesforce ~2,000 a day, a few a minute Near real time: Salesforce calls out through the integration layer, with an Apex or Flow callout Named Credential Copy Order status in ERP ~16,000 a day, in bursts Asynchronous: the ERP pushes to the integration layer, which updates Salesforce through the REST API External Client App, integration user Copy Payments in Finance ~1,500 a day Batch: hourly, through the integration layer and Bulk API 2.0 External Client App, integration user Copy CRM data out Salesforce Millions of records, all of them Data 360 ingests from the org on a schedule Near-core: managed in the org Copy into Data 360 Zero copy Warehouse Five years of history, hundreds of millions of rows Queried in place when needed A Data 360 connection to the warehouse Federate Referenced External provider One lookup at a time Read when someone needs it A Data 360 connection Reference The arrows look alike on the landscape. The volume decides what carries each one. © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

The inventory behind ED-D42. The arrows look alike on the landscape; the volume decides what carries each one.

That’s why I like this artifact: it helps me think. “How will we report across Salesforce and the ERP?” It’s the question from module 3: which of my diagrams solves this beautifully? The landscape. If everything’s on core, standard reports. If the data is in the ERP and the warehouse, you can see it immediately. “Where should this customer attribute be mastered?” Look at which systems use it and which already owns the customer. “Does Salesforce need every GPS reading?” Who produces it, who consumes it, what’s the workload? Maybe Salesforce needs the current position and another platform keeps the history. The landscape doesn’t hand you the answer. It gives you the right view of the problem.

One more discipline. In an existing enterprise, draw what exists, not what you wish existed. The spreadsheet emailed every Friday: draw it. The partner’s CSV on an SFTP server: draw it. The integration that bypasses the ESB for historical reasons: draw it. People rekeying data between two systems: show it. Don’t clean up reality while you’re documenting it. You need the current landscape before you design the target one, and that’s what we do for Steve Trucking in module 6.

Beyond the exam: what AI changes. The landscape is becoming an agent map. If an agent answers “where’s my delivery?”, the landscape has to say whether the answer comes from Salesforce, a partner system, telematics, the ERP, or a mix. Agents don’t remove system boundaries; they make knowing which system is authoritative, and how to reach it safely, even more important.

  • Which systems and user populations belong on the landscape, and how their placement shows their role.
  • Which flows cross system boundaries, in which direction, and what comes back.
  • How every connection authenticates, what mechanism carries it, and whether it’s synchronous, asynchronous, batch or federated.
  • When a labeled arrow is enough and when an interaction needs its own swim lane.
  • What the inventory behind the picture records: owner, workload, volume, org, timing, authentication, and copy, reference or federate.

The landscape isn’t something I draw after the architecture is done. It’s how I find the architecture. And when you think it’s finished, don’t admire it. Walk it. Every arrow you can’t explain yet shows you where the work is.