Designing API-Led Connectivity Without Layering for Its Own Sake
API-led connectivity is often explained using three layers: Experience APIs, Process APIs and System APIs. The model is useful because it separates responsibilities. Problems begin when teams interpret the model as a rule that every request must traverse all three layers.
Architecture should create useful boundaries, not ceremonial hops.
Think in Responsibilities
A System API protects and exposes a system capability behind a stable contract.
A Process API coordinates business logic across capabilities or domains.
An Experience API adapts capabilities for a particular channel or consumer experience.
Those are responsibilities. They do not imply that every use case requires three independently deployed applications.
A Useful Three-Layer Flow
Suppose a mobile onboarding experience needs customer data, eligibility rules and document status.
Mobile Experience API
|
v
Onboarding Process API
/ \
Customer API Document API
The boundaries are meaningful:
- channel-specific shaping belongs to the Experience API;
- orchestration belongs to the Process API;
- source-system details remain behind System APIs.
When an Extra Layer Adds Little Value
Consider an internal consumer that already needs exactly the stable contract exposed by a System API.
Internal service -> Customer System API
Adding a Process API that simply forwards every field may create:
- another deployment;
- another network hop;
- another policy surface;
- another monitoring target;
- another ownership question;
- no meaningful abstraction.
Do not add a layer only because a diagram has three boxes.
Reuse Is About Stable Capabilities
A reusable API is not simply an API used by multiple consumers. Reuse becomes valuable when the contract represents a stable capability with coherent ownership.
A System API that exposes raw database tables may technically be reusable but still leak implementation details. A Process API that contains channel-specific formatting may be difficult for other consumers to adopt.
Design the contract around the responsibility of the layer.
Avoid the Mega Process API
Another failure mode is putting every business orchestration into one enormous Process API.
enterprise-process-api
customer
orders
billing
fulfillment
pricing
reporting
This centralizes deployment risk and ownership. Prefer cohesive domain or capability boundaries rather than one universal middle tier.
Latency Is an Architectural Cost
Every synchronous hop adds serialization, network latency, connection management, policy evaluation and another failure boundary.
If a request path becomes:
Experience -> Process A -> Process B -> System A -> System B
ask whether each boundary provides enough architectural value to justify its runtime cost.
Sometimes asynchronous decomposition is better than an increasingly deep synchronous chain.
Security Responsibilities Differ by Layer
Layering can improve security when responsibilities are intentional.
An Experience API may authenticate the external channel and expose only channel-appropriate fields. A Process API may enforce business authorization. A System API can isolate backend credentials and prevent consumers from coupling directly to source-specific protocols.
That is meaningful separation—not layering for presentation.
Ownership Matters More Than Naming
Calling something a System API does not make it stable. Define:
- owning team;
- supported consumers;
- contract lifecycle;
- SLO expectations;
- dependency ownership;
- change process;
- deprecation process.
An API without ownership becomes a shared dependency nobody can safely evolve.
A Practical Decision Test
Before creating another API layer, ask:
- What responsibility is being separated?
- Will multiple consumers benefit from this boundary?
- Does it hide meaningful source-system complexity?
- Does it isolate consumer-specific concerns?
- Does it coordinate a real business process?
- What latency and operational cost does it add?
- Who owns the contract?
If the answer is merely this is how API-led diagrams look, reconsider the boundary.
Final Principle
API-led connectivity is most powerful when it encourages deliberate contracts and reusable capabilities. Use Experience, Process and System responsibilities to create clear boundaries—but let the architecture determine how many runtime layers a particular use case actually needs.