Architecture Pattern Guide

Controlled Boundary Crossing Across Enterprise Systems

Goal

Introduce enterprise integration as the controlled movement of business meaning across independently owned systems.

The commerce platform from the previous walkthroughs does not end at the order boundary. An accepted order may need to reach an enterprise resource planning (ERP) system, a warehouse, a carrier, a payment provider, finance reporting, and customer support. Those systems may belong to different teams or companies. They may use different protocols, release schedules, and definitions of success.

The durable idea is:

Enterprise integration is controlled collaboration between systems that do not share ownership, availability, or pace of change.

The Short Version

Connecting two systems is easy to draw. Preserving business meaning while they change and fail independently is the real architecture problem.

Every boundary crossing should answer five questions:

  1. What business fact, request, or work instruction is crossing?

  2. Which system owns its meaning before and after the crossing?

  3. What promise does the receiving system make?

  4. What happens if either side is slow, unavailable, or wrong?

  5. How can an operator later explain and recover the exchange?

This is why integration is not merely wiring. A payload can arrive successfully while the business outcome still fails. A warehouse may receive an order but reject an unknown product code. A carrier may accept a shipment request but return a status the support system cannot interpret. Transport success and business success are different things.

Map the Boundaries Before the Connections

Start with owned systems and explicit crossing points:

flowchart LR
    A["Commerce Platform<br/>Owns customer order"]
    B["ERP<br/>Owns enterprise record"]
    C["Warehouse<br/>Owns fulfillment execution"]
    D["Carrier<br/>Owns delivery movement"]
    E["Support<br/>Owns customer case"]

    A -->|"Accepted order contract"| B
    A -->|"Fulfillment request"| C
    C -->|"Shipment booking"| D
    D -->|"Tracking facts"| A
    A -->|"Customer-visible timeline"| E

The arrows are not generic connections. Each one carries a different meaning and crosses a different ownership boundary.

BoundaryWhat CrossesLocal Ownership That Should Remain
Commerce to ERPAn accepted order or financial posting request.Commerce owns customer order state; ERP owns how the enterprise record is posted.
Commerce to warehouseA request to reserve, pick, pack, or release goods.Commerce owns the customer promise; the warehouse owns physical execution.
Warehouse to carrierShipment details and a booking request.The warehouse owns parcel readiness; the carrier owns transport and tracking.
Commerce to supportA safe, customer-readable order timeline.Source domains own operational state; support owns case handling and communication.

An integration does not transfer all responsibility to the receiver. It transfers a specific request, fact, or representation under a contract.

Define the Promise at Each Crossing

The word order can mean several things. To the storefront, it may mean the customer completed checkout. To the ERP, it may mean a valid enterprise record. To the warehouse, it may mean work is ready to release. To finance, it may mean something billable or reconcilable.

Good integration contracts make those differences visible. Prefer names and descriptions such as OrderAccepted, ReleaseOrderForFulfillment, and ShipmentDispatched over a vague OrderUpdated. The clearer name does not solve the architecture by itself, but it forces the teams to discuss what actually happened and who may act on it.

A useful boundary definition records:

  • The business meaning and owner.

  • The sender and intended receiver or audience.

  • The required data and the data that must not cross.

  • The expected timeliness and volume.

  • The acknowledgement or outcome that matters.

  • Failure, retry, correction, and escalation behavior.

  • Evidence needed for support, audit, or reconciliation.

Protect Local Autonomy

Integration should enable cooperation without making every system behave as one large application.

Suppose the warehouse is unavailable for twenty minutes. If checkout directly depends on the warehouse completing its work, the outage can stop customers from placing orders. If the business can accept an order based on a valid inventory promise and hand fulfillment off durably, the warehouse can recover without being placed in the customer response path.

That does not mean asynchronous communication is always correct. A tax quote or payment authorization may need an immediate answer before checkout proceeds. The point is to decide based on the business promise, not on a rule that every integration must be synchronous or asynchronous.

Local autonomy also means a receiving system should not need the sender's internal database shape. A warehouse contract should carry the fulfillment information the warehouse needs, not expose the commerce platform's private tables. This keeps internal changes from leaking across the boundary.

Example: One Order, Several Owners

A customer places an order for two items.

The commerce platform accepts the order and becomes responsible for the customer-visible order record. It sends a durable fulfillment request to the warehouse. The warehouse accepts the request but later discovers that one item is damaged. It reports a fulfillment exception rather than silently rewriting the order.

The commerce domain decides whether to split the shipment, back-order the item, substitute it, or contact the customer. The warehouse does not own that customer promise. When the remaining parcel is ready, the warehouse requests a carrier booking. The carrier later publishes tracking updates, which commerce translates into customer-visible states and support context.

This flow works because each crossing is narrow:

  • Commerce does not control warehouse operations.

  • The warehouse does not redefine the customer order.

  • The carrier does not own the support message shown to the customer.

  • Support can see the timeline without becoming the source of order truth.

The systems collaborate, but their responsibilities do not dissolve.

Common Mistakes

  • Drawing arrows without naming what they mean. A line labelled "integration" hides the contract and the promise.

  • Treating transport acknowledgement as business completion. Receiving a message is not the same as fulfilling an order.

  • Sharing database tables across ownership boundaries. This couples internal models, release schedules, and failure behavior.

  • Making the customer path wait for every downstream enterprise system. Some outcomes need immediate confirmation; many can continue durably afterward.

  • Assigning all meaning to a central integration team. A platform team can operate shared capabilities, but domain teams still own business semantics.

If Someone Asks You

Why is boundary crossing the right starting point for enterprise integration?

A good answer is:

Because the boundary reveals the real design constraints: who owns the meaning, what promise is being transferred, how independently the systems change, what failure can spread, and who recovers it. Once those are clear, choosing an API, message, event, workflow, or file becomes a reasoned decision.

What You Should Remember

Integration is controlled collaboration between independent owners.

Questions to Check Your Understanding

  1. Why is successful delivery not always successful business processing?

  2. Which responsibility should remain local when commerce sends work to a warehouse?

  3. What should an integration boundary say about failure and recovery?

Further Study

  • AsyncAPI documentation - Explore a provider-neutral way to describe and document event-driven interfaces after their business meaning and ownership are defined.