This article discusses the architectural challenges and solutions when a company's customer, partner, supplier, and employee portals evolve into a fragmented collection of independent systems. It advocates for moving towards a shared core architecture to manage identity, roles, organizations, and critical business entities, thereby reducing redundancy and improving consistency across an enterprise product ecosystem.
Read original on Dev.to #systemdesignAs businesses grow, it's common for different audiences (customers, partners, employees) to gain their own dedicated portals. While initially practical, this often leads to architectural fragmentation, where each portal maintains its own accounts, directories, statuses, permissions, and integrations. This siloed approach results in data inconsistencies, complex access management, and significant overhead when onboarding new roles or integrating new systems.
The core issue arises when a single business reality is represented in multiple, disparate systems. For example, a supplier's delivery date might differ between an ERP system and a customer portal, or a contractor might exist under various names across different products. This leads to:
Operational Signals of Fragmentation
The article highlights four key operational signals indicating architectural fragmentation: increased time to onboard new roles, a surge in support requests related to access or stale data, multiple systems capable of changing a single entity, and an expanding regression test scope before releases. These signals point towards a need for a more unified approach.
To counter fragmentation, the article proposes building a "shared core" layer. This layer would manage core business entities and process states, such as organizations, users, documents, payments, permissions, and events. This contrasts with simply implementing Single Sign-On (SSO), which only addresses authentication and doesn't resolve data consistency or authorization complexities.
The shared core should establish clear "systems of record" for each key entity, defining where the source of truth resides. This involves specifying the direction of data exchange and handling failure scenarios (e.g., using queues and idempotent operations for reliable event delivery). This architectural pattern allows for distinct interfaces for different user roles while ensuring consistency and a unified understanding of business reality underneath.
While building a shared core is an investment, it becomes critical when the account product handles money, documents, permissions, or is part of a critical customer path. The ultimate test of this architecture is whether a new role can be connected as a module, reusing existing identity, organization, data sources, and audit trails, rather than requiring an entirely new standalone launch.