CRM

CRM - Introduction & Executive Overview

Strategic architectural overview of the Customer Relationship Management (CRM) domain, exploring business drivers, relationship lifecycles, and cross-domain synergy.

Customer Relationship Management (CRM) Domain Design

Managing commercial relationships across the customer lifecycle is central to enterprise revenue growth. In modern multi-channel organizations, commercial engagement touches multiple functional departments: inbound marketing teams capture prospects from digital campaigns, sales representatives nurture qualified opportunities, solution architects structure deal parameters, credit officers assess commercial risks, and customer support representatives resolve post-sale issues.

The Customer Relationship Management (CRM) domain serves as the sovereign home for all enterprise commercial relationship data. It governs prospect lead scoring, sales opportunity pipelines, unified contact and organization directories, customer service tickets, SLA monitoring, and marketing attribution touchpoints.

By establishing an isolated Bounded Context, commercial relationship data remains strictly decoupled from transactional execution engines—such as billing and invoicing, general ledger postings, warehouse fulfillment, and inventory stock allocations.


1. Business Drivers & The CRM Entropy Problem

When enterprises manage customer relationships without strict architectural boundaries, commercial data quickly degrades into operational friction:

flowchart TD
    subgraph Antipattern["Without CRM Domain: Siloed Friction & Pipeline Drift"]
        DirtyData["Fragmented Contact Records<br/>Duplicate customer profiles scattered across sales spreadsheets, billing, and support tools"]
        LostAttribution["Unattributed Marketing Spend<br/>No verifiable link between inbound campaigns and downstream closed revenue"]
        StageTampering["Pipeline Forecast Manipulation<br/>Retroactive changes to closed deal values corrupting executive revenue forecasting"]
        BrokenSLA["Unenforced Support SLAs<br/>Customer tickets lost between ad-hoc inboxes without escalation or accountability"]
    end

    subgraph Solution["With CRM Domain: Disciplined Domain-Driven Architecture"]
        CanonicalDir["Deduplicated Relationship Hub<br/>Normalized, single source of truth for Contacts and Accounts"]
        ClosedAttribution["Deterministic Attribution<br/>Campaign and UTM parameter lineage linked directly to pipeline stages"]
        TerminalWon["Immutable Closed-Won Locks<br/>Terminal deal states sealed against retroactive tampering"]
        AutomatedSLA["Guaranteed SLA Escalation Gates<br/>Formal state machines enforcing priority thresholds and breach alerts"]
    end

    Antipattern -.->|Resolved By Domain-Driven Design| Solution

The Cost of Relationship Chaos

  • Fragmented Customer Identity: When customer records are maintained independently across billing, warehouse, and marketing databases, sales teams lack a unified view of accounts. Contact information is duplicated, resulting in conflicting communications and compromised customer experiences.
  • Unreliable Pipeline Forecasting: Without immutable stage transition rules, sales representatives can retroactively alter deal values, close dates, or probabilities. This skews revenue projections and misinforms executive resource allocation.
  • Support SLA Breaches: In informal support environments, customer inquiries fall through the cracks. In the absence of formal state machines, ticket priority and response time thresholds cannot be systematically enforced.
  • Disconnected Commercial Lineage: Marketing investments remain unmeasured because the system cannot correlate the initial anonymous lead capture with the eventual closed-won deal and downstream sales orders.

Domain-Driven Design restores order by defining strict relationship invariants, isolated aggregates, and explicit event choreography.


2. Core Strategic Pillars of the CRM Domain

The CRM bounded context is built upon seven architectural pillars:

flowchart TD
    CRM["CRM Domain Core"]

    P1["1. Contact vs. Account Dichotomy<br/>Independent Persons mapped to Legal Entities"]
    P2["2. Invariant Lead Qualification<br/>Disqualification audit trails & conversion gates"]
    P3["3. Sealed Closed-Won Finality<br/>Terminal deal status sealed against retrospective edits"]
    P4["4. Time-Guarded Support SLAs<br/>Automated warning & breach escalation state machines"]
    P5["5. Polymorphic Touchpoints<br/>Unified activity streams linked without database foreign keys"]
    P6["6. Multi-Channel Campaign Attribution<br/>Deterministic touchpoint lineage across pipelines"]
    P7["7. Append-Only Auditing<br/>Complete forensic change logs & compensating amendments"]

    CRM --> P1
    CRM --> P2
    CRM --> P3
    CRM --> P4
    CRM --> P5
    CRM --> P6
    CRM --> P7

1. Contact vs. Account Separation

CRM maintains an explicit distinction between individual people (Contacts) and corporate entities (Accounts). A contact represents a human stakeholder with canonical email and telephone keys, linked to one or more accounts through contextual business roles (e.g., Billing Contact, Technical Decision Maker, Executive Sponsor).

2. Guarded Lead Qualification

Leads represent unverified commercial inquiries. The domain enforces strict validation rules: an unqualified lead cannot convert into a qualified opportunity without capturing mandatory contact and company coordinates. Disqualifications require standardized business reasons for analytical auditing.

3. Sealed Closed-Won Deal Finality

Once an opportunity reaches Closed-Won, its commercial parameters are frozen permanently. The deal value, currency, close date, and participating stakeholders are sealed. Any subsequent adjustments require formal compensating records rather than in-place edits.

4. Time-Guarded Service Level Agreements (SLAs)

Customer support tickets operate under deterministic time envelopes. Ticket priorities dictate non-negotiable response and resolution targets. State machines monitor elapsed active business hours, automatically transitioning at-risk tickets into escalated states.

5. Decoupled Polymorphic Touchpoints

Customer interactions (calls, meetings, emails, support notes) are stored as decoupled polymorphic activities. Touchpoints attach to any CRM aggregate without hard database foreign keys, preserving cross-context independence.

6. Full-Funnel Campaign Attribution

Marketing campaigns capture multi-touch attribution. Every converted lead and won deal retains its original campaign source, channel type, and UTM coordinates, allowing accurate customer acquisition cost (CAC) calculations.

7. Forensic Auditability & Compensating Corrections

All mutations generate immutable audit logs capturing timestamps, actor identifiers, and before/after state diffs. Post-won commercial adjustments are conducted through compensating documents rather than destructive database modifications.


3. High-Level Inter-Domain Choreography

CRM serves as an upstream commercial engine within the enterprise ecosystem. It emits business events when opportunities mature or support thresholds are reached:

flowchart TD
    CRM["CRM Bounded Context<br/>Commercial Opportunities & Customer Care"]

    Sales["Sales / OMS<br/>Commercial Orders & Dispatch"]
    FMS["Accounting / FMS<br/>Customer Ledger & Invoicing"]
    Marketing["Marketing Automation<br/>Outbound Engagement"]
    PIM["PIM / Catalog<br/>Product Definitions"]

    CRM -->|"DealWon"| Sales
    CRM -->|"DealWon, AccountCreated"| FMS
    CRM -->|"LeadCreated, ContactOptIn"| Marketing
    PIM -.->|"ProductReference (via ACL)"| CRM
Integrating ContextSubscribed CRM EventDownstream Operational Reaction
Sales / OMSDealWonMaterializes draft sales orders or commercial quotes, binding customer addresses and agreed line items.
Accounting / FMSDealWon, AccountCreatedEvaluates customer credit limits, establishes accounts receivable customer master records, and opens billing profiles.
Marketing AutomationLeadCaptured, ContactUpdatedAdjusts nurture cadences, updates campaign segment memberships, and halts outbound sales cold sequences.
Support / Knowledge BaseTicketEscalatedDispatches on-call alerts, notifies account relationship executives, and opens priority escalation bridges.

4. Architectural Domain Blueprint Directory

Explore the tactical models, invariants, and workflows across the CRM domain chapters:

  1. Bounded Context & System Boundaries: Operational scope, out-of-scope boundaries, context mapping, and Anti-Corruption Layer (ACL) translation engine.
  2. Ubiquitous Language & Domain Glossary: Authoritative business vocabulary, entity definitions, and cross-domain linguistic translations.
  3. Structural Topology & Domain Model: Aggregate roots (Lead, Contact, Account, Deal, Ticket), entity hierarchies, and value objects.
  4. Domain Invariants & Business Rules (“The Law”): Non-negotiable identity deduplication, deal finality locks, SLA rules, and qualification gates.
  5. Operational Workflows & State Machines: Lead qualification, opportunity pipeline stages, and support ticket resolution state machines.
  6. Domain Events & Integration Contracts: Authoritative catalog of emitted domain events, downstream integration schemas, and payload specifications.
  7. Audit Trail, Governance & Compensation: Append-only audit logs, merge recovery protocols, and post-won compensating transaction policies.

Our Premium Sponsors

Obelaw is proudly open-source. Continued development, bug fixes, and community support are made possible by the generosity of our sponsors.

Sponsor Obelaw