BFF & Channel Patterns
BFF & Channel Patterns
Modern telcos serve customers through multiple channels: self-service web portals, mobile apps, retail stores, contact centres, partner APIs, and chatbots. Each channel has different requirements — different data shapes, different performance profiles, and different user experiences. The Backend for Frontend (BFF) pattern is the architectural response to this reality.
This section explores why telcos need BFFs, how they differ from API gateways, and the architectural patterns that make multi-channel telco experiences work. Getting the channel architecture right is the difference between a seamless customer experience and a frustrating, inconsistent one.
Why Telcos Need BFFs
A telco's backend systems (CRM, catalog, ordering, billing) expose APIs designed around their internal domain model — not around what a specific channel needs. A mobile app showing a customer dashboard does not need the full TMF629 Customer Management payload — it needs a lightweight, pre-aggregated view combining customer info, active products, recent bills, and open tickets.
The Problem BFFs Solve
Channel Challenges Without BFFs
| Problem | Without BFF | With BFF |
|---|---|---|
| Over-fetching | Mobile app receives 50 fields when it needs 5. Wasted bandwidth, slow rendering. | BFF returns exactly the fields the mobile app needs. |
| Under-fetching | Dashboard needs data from 4 backend services. Frontend makes 4 API calls — slow, complex, fragile. | BFF aggregates 4 backend calls into 1 optimised response. |
| Channel-specific logic | Business logic for "show upgrade options" is duplicated across web, mobile, and retail frontends. | BFF encapsulates channel-specific logic in one place. |
| Backend coupling | Every backend API change requires updates to all frontends simultaneously. | BFF absorbs backend changes — frontends only change when their BFF contract changes. |
| Performance optimisation | All channels get the same API response, regardless of whether they need real-time or cached data. | BFF applies channel-specific caching, pagination, and compression strategies. |
| Security boundaries | Frontend directly calls backend services, requiring complex token exchange and CORS configurations. | BFF acts as a trusted intermediary — frontend authenticates with BFF, BFF calls backends with service credentials. |
The Telco Channel Landscape
Understanding the distinct requirements of each channel is essential for designing effective BFFs. Each channel serves a different user, with different needs, on different devices, with different latency tolerances.
Telco Channel Characteristics
| Channel | User | Key Requirements | BFF Considerations |
|---|---|---|---|
| Self-Service Web | End customer (desktop browser) | Full account management, order tracking, bill payment, support | Rich data, moderate latency tolerance, SEO for public pages, session management |
| Mobile App | End customer (iOS/Android) | Quick account overview, usage monitoring, top-up, push notifications | Minimal payload, offline support, aggressive caching, push token management |
| Retail POS | Store agent | Rapid customer lookup, guided selling, instant activation, ID verification | Low latency, pre-aggregated customer views, integration with POS hardware |
| Contact Centre | Support agent | Full customer 360, trouble ticket management, order history, knowledge base | Rich data, real-time updates, CTI integration, agent context management |
| Partner API | MVNO / wholesale partner | Catalog access, order submission, usage data, settlement | Strict API versioning, rate limiting, SLA enforcement, partner-specific views |
| Chatbot / IVR | End customer (conversational) | Intent detection, account lookup, simple transactions, FAQ | Conversational data shapes, context management, minimal payload |
BFF Architecture Patterns
Pattern 1: One BFF Per Channel
The classic BFF pattern: each channel gets its own dedicated BFF service. The web team owns the web BFF, the mobile team owns the mobile BFF, and so on. This is the most common and most recommended pattern for telcos with distinct channel teams.
- Pro: Each BFF is tailored precisely to its channel's needs
- Pro: Channel teams have full ownership — they can deploy independently
- Pro: Performance optimisations are channel-specific (mobile can be aggressively cached)
- Con: Code duplication across BFFs (customer lookup logic exists in every BFF)
- Con: More services to maintain and deploy
- Con: Backend API changes may need to be reflected in multiple BFFs
Pattern 2: Shared BFF with Channel Adapters
A single BFF service that handles common aggregation and transformation, with channel-specific adapters that customise the response shape. This reduces duplication but introduces coupling between channels.
- Pro: Common logic (authentication, aggregation) is written once
- Pro: Fewer services to operate
- Con: Coupling — a change for mobile can accidentally break web
- Con: "Lowest common denominator" problem — the shared BFF becomes bloated trying to serve all channels
- Con: Single team becomes a bottleneck for all channel changes
Pattern 3: GraphQL as a Universal BFF
Instead of multiple BFF services, expose a single GraphQL API that lets each frontend request exactly the data it needs. The GraphQL layer aggregates from backend services and returns only what was queried.
- Pro: Eliminates over-fetching and under-fetching — clients request exactly what they need
- Pro: Single API surface for all channels, reducing backend integration points
- Pro: Strong typing and self-documentation through the schema
- Con: Complexity shifts to the GraphQL resolvers, which must efficiently orchestrate backend calls
- Con: N+1 query problem requires careful dataloader implementation
- Con: Caching is more complex than REST (no simple HTTP caching by URL)
- Con: Not all telco teams have GraphQL expertise
API Gateway vs BFF vs Experience API
These three concepts are often confused. They serve related but distinct purposes in the channel architecture. Understanding the boundaries prevents architectural mistakes.
API Gateway vs BFF vs Experience API
| Aspect | API Gateway | BFF | Experience API |
|---|---|---|---|
| Purpose | Route, secure, and rate-limit API traffic | Aggregate and transform data for a specific channel | Provide a consumer-friendly API layer over domain APIs |
| Business logic | None — pure infrastructure concern | Channel-specific aggregation, transformation, caching | Cross-channel business logic (e.g., eligibility checks) |
| Scope | All traffic passes through it | One per channel | One per business capability (e.g., "My Account" experience API) |
| Owner | Platform / infrastructure team | Channel team (web, mobile, etc.) | Product / experience team |
| Technology | Kong, Apigee, AWS API Gateway, Azure APIM | Node.js, Go, any lightweight framework | Any — often Node.js or Java |
| Statefulness | Stateless — routes traffic, applies policies | May maintain session context, cache per-user data | Typically stateless but may cache shared data |
Think of a restaurant. The API Gateway is the front door — it checks your reservation, ensures capacity, and directs you to a table. The BFF is your personal waiter — they know your preferences and present the menu in a way that suits you. The Experience API is the kitchen's prep station — it assembles complex dishes from raw ingredients before the waiter picks them up.
In a well-designed telco channel architecture, these three layers work together:
Request Flow: Channel → Backend
Frontend Application
Channel LayerWeb app, mobile app, or partner system makes an API call.
API Gateway
Infrastructure LayerAuthenticates the request, applies rate limiting, routes to the correct BFF.
BFF
Channel LayerReceives the channel-specific request. Calls one or more Experience APIs or domain APIs. Transforms and aggregates the response for the channel.
Experience API (optional)
Integration LayerProvides a simplified, pre-aggregated view of a business capability. E.g., "Customer 360" API that combines CRM, product inventory, and billing data.
Domain APIs (TMF)
Backend LayerCore backend APIs: TMF629 (Customer), TMF637 (Product Inventory), TMF678 (Billing). Source-of-truth for each domain.
Experience APIs are justified when multiple BFFs need the same aggregated view. For example, if both the web BFF and mobile BFF need a "Customer 360" that combines data from CRM, product inventory, and billing, extract this into an Experience API to avoid duplicating the aggregation logic. However, do not over-engineer: if only one BFF needs a specific aggregation, keep it in the BFF. Experience APIs add a network hop and operational complexity.
GraphQL vs REST for Channel APIs
The choice between GraphQL and REST for BFF-to-frontend communication is a frequent debate in telco architecture. Both have legitimate use cases. TMF Open APIs are REST-based, but that does not mean the channel layer must also be REST.
GraphQL vs REST for Telco BFFs
| Criterion | REST | GraphQL |
|---|---|---|
| Data fetching efficiency | Fixed response shapes. Over-fetching or under-fetching is common unless you design bespoke endpoints. | Client specifies exactly what fields it needs. No over-fetching. |
| Caching | Excellent HTTP-level caching (CDN, browser cache, ETags). Well-understood. | Complex. No URL-based caching. Requires application-level caching (Apollo, Relay). |
| Real-time updates | Requires WebSockets or SSE as separate mechanism. | Built-in subscriptions for real-time data. |
| API evolution | Versioned endpoints (v1, v2). Breaking changes require new versions. | Additive schema changes. Deprecated fields coexist with new ones. |
| Tooling maturity | Extremely mature. Swagger/OpenAPI, Postman, wide library support. | Maturing rapidly. Apollo, Relay, GraphQL Playground. Narrower telco-specific tooling. |
| Team familiarity | Universal. Every backend developer knows REST. | Growing but not universal. Requires training investment. |
| TMF alignment | TMF Open APIs are REST-based. Direct backend integration is natural. | Requires a translation layer between GraphQL schema and TMF REST APIs. |
| Complex queries | Requires multiple endpoints or bespoke query parameters. | Single query can traverse related entities (customer → products → services). |
A REST BFF for the mobile app might expose these endpoints:
GET /api/mobile/v1/dashboard— returns pre-aggregated dashboard (products, bill summary, usage)GET /api/mobile/v1/products— returns active product list with compact fieldsPOST /api/mobile/v1/topup— initiates a prepaid top-upGET /api/mobile/v1/usage/current— returns current billing cycle usage summaryGET /api/mobile/v1/support/tickets— returns open support tickets
Each endpoint is purpose-built for the mobile experience. The BFF internally calls TMF629 (Customer), TMF637 (Product Inventory), TMF678 (Billing), and other backend APIs.
Digital Channel Architecture Patterns
Beyond the BFF layer, telcos must design the overall digital channel architecture. This includes how frontends are built, how they communicate with BFFs, and how the experience is kept consistent across channels.
Micro-Frontend Pattern
Micro-Frontends for Telco Portals
Large telco self-service portals can be decomposed into micro-frontends — independently deployable frontend modules, each owned by a domain team.
Omnichannel Consistency
Customers expect a consistent experience regardless of channel. If they start an order on the web and continue in a retail store, the order state must be shared. Omnichannel consistency requires careful architecture.
- Shared backend state — order, cart, and interaction state must live in backend systems, not in channel-specific storage
- Channel-agnostic order API — all channels submit orders through the same COM API (TMF622), regardless of which BFF they use
- Interaction context — when a customer switches channels, the new channel must access the full interaction history
- Unified customer identity — single sign-on or token exchange across channels ensures the same customer identity is used everywhere
Partner API Pattern
Partner APIs (for MVNOs, wholesale partners, enterprise customers) are a special case of channel API. They require additional concerns beyond a standard BFF.
Partner API Additional Concerns
| Concern | Description | Implementation |
|---|---|---|
| API versioning | Partners cannot be forced to upgrade simultaneously. Multiple API versions must coexist. | URL-based versioning (/v1, /v2) with long deprecation windows (12+ months) |
| Rate limiting | Partners have different usage tiers. High-volume partners get higher limits. | Per-partner API keys with configurable rate limits in the API gateway |
| Data isolation | Partner A must not see Partner B's data. Strict tenant isolation. | Tenant-aware APIs, data partitioning, access control at the API layer |
| SLA enforcement | Partners have contractual SLAs. API performance must be monitored against them. | API analytics, SLA dashboards, automated alerting on breach |
| Self-service onboarding | Partners need a developer portal to discover, test, and subscribe to APIs. | Developer portal (e.g., Apigee, Azure APIM) with sandbox environments |
| Webhook notifications | Partners need asynchronous notifications (order complete, service activated). | TMF Hub/Listener pattern. Partners register webhooks for event types. |
TM Forum Perspective on Channels
Channel Architecture: Who Owns What
Channel Architecture Ownership
| Entity | System of Record | System of Engagement | System of Reference | Notes |
|---|---|---|---|---|
| Frontend Application (Web/Mobile) | Channel Team (Web Team, Mobile Team) | Customer (end user) | — | Deployed independently. Uses channel-specific BFF. |
| BFF Service | Channel Team | Frontend Application | — | One per channel. Owned by the team that owns the frontend. |
| API Gateway | Platform / Infrastructure Team | All channels | — | Shared infrastructure. Routes, secures, rate-limits all channel traffic. |
| Experience API | Integration / Platform Team | BFFs (multiple channels) | — | Shared business logic. Only created when multiple BFFs need the same aggregation. |
| Partner API Portal | Partner / Wholesale Team | External partners | — | Developer portal, documentation, sandbox. Managed by partnership team. |
| Domain APIs (TMF) | Domain Teams (Catalog, Order, Billing) | BFFs, Experience APIs | All consumers via API gateway | Source-of-truth APIs. Do not expose directly to frontends. |
Common Channel Architecture Mistakes
Section 8.3 Key Takeaways
- BFFs sit between frontends and backend domain APIs, aggregating and transforming data for each specific channel
- Each telco channel (web, mobile, retail, partner) has different data requirements — one API does not fit all
- API Gateway handles infrastructure concerns (routing, auth, rate limiting); BFF handles business aggregation; Experience API handles shared cross-channel logic
- For large telcos: one BFF per channel, owned by the channel team. For small telcos: shared BFF with GraphQL may work.
- Use REST for simple, cacheable, partner-facing APIs. Use GraphQL for complex, interactive frontends.
- Never expose TMF domain APIs directly to frontends — always use a BFF or experience layer
- Partner APIs need special attention: versioning, rate limiting, data isolation, and self-service onboarding
- BFFs should aggregate and transform, not implement core business logic