Skip to content

ADR-011: CRM approach — embedded in front end or external platform

Status Accepted
Date 2026-04-10
Deciders CTO, Head of Product, CCO
Affects repos bank-app, bank-risk-platform

Status

Accepted — 2026-04-10

Context

CRM capability in this bank covers: customer 360 view, interaction and contact history, case and complaints management, vulnerability flagging, next best action queues, customer health and churn scoring, segmentation, campaign management, and consent/preference management.

The question is whether to build this capability in the bank's own back office front end (SD08 bank-app) — driven by Snowflake intelligence and Postgres operational data — or to use an external CRM platform (Salesforce Financial Services Cloud, HubSpot, Microsoft Dynamics) and integrate it with the bank's data.

This decision has already been partially explored in the planning sessions. The bank's back office design (documented in the CRM section of SD08) assumes an embedded approach. This ADR formalises and validates that assumption.


CRM capability map

Capability Customer 360 Interactions Cases NBA Health score Segments Campaigns Vulnerability Consent
Source Postgres + Snowflake Postgres Postgres Snowflake Snowflake Snowflake Snowflake Postgres Postgres
Real-time? Yes Yes Yes Near-RT Daily Daily Daily Yes Yes

All intelligence (health score, churn score, NBA, segmentation) is computed in Snowflake and served to the back office via the Snowflake read API (ADR-038 Tier 3). These values are never written back to Postgres for display purposes. Operational state (case status, vulnerability flags, consent) lives in Postgres as always. The CRM is a view over data the bank already owns — it does not need its own data store.


Options evaluated

Option A — Embedded CRM in back office front end (bank-app)

CRM capability built as a set of back office screens in the existing React/Vue application (ADR-004/ADR-007). Customer 360, interaction timeline, case management, and NBA queues are first-class features of the back office mode. Intelligence pre-computed in Snowflake and surfaced via the API.

Strengths: No additional platform; single UI for agents (no context switching between apps); all customer data in one place; full control over UX; agent actions automatically in audit trail (MOD-047); Snowflake intelligence directly surfaced; zero additional licensing; consistent design system.

Weaknesses: Case management and campaign management require significant build; no pre-built campaign execution engine; email/SMS delivery needs integration (SendGrid, Twilio); phone/call centre integration is a separate concern.

Option B — Salesforce Financial Services Cloud

Salesforce FSC is purpose-built for banking CRM. Pre-built financial account management, contact hierarchy, interaction capture, and campaign tools.

Strengths: Pre-built banking data model; mature case management and campaign tools; large ecosystem; phone/CTI integration available; well-understood by compliance and operations teams.

Weaknesses: Very expensive (FSC is one of the most expensive Salesforce products); significant implementation cost and timeline; data must be replicated to Salesforce — customer PII moves to a third party; integration with Snowflake intelligence requires middleware; agents use two systems (Salesforce + bank app); Salesforce UX is its own paradigm — not the bank's product experience; overkill for a startup bank.

Option C — HubSpot or Microsoft Dynamics

More cost-effective than Salesforce FSC but less specialised for banking.

Strengths: Lower cost than Salesforce; good campaign tools; some banking connectors available.

Weaknesses: Not purpose-built for banking; same data duplication and integration concerns as Salesforce; agents still context-switch between systems; integration complexity.

Option D — Hybrid: embedded 360/operations, external campaign execution

Embed the customer 360, case management, and operational CRM in the back office app. Use a lightweight campaign execution tool (Braze, Iterable, Customer.io) only for outbound campaign delivery — not as a CRM system of record.


Perspective evaluation

Perspective Embedded Salesforce FSC HubSpot/Dynamics Hybrid (D)
Usability ✓ No context switching ~ Separate system ~ Separate system
Strategy ✓ Own the experience ~ Vendor dependency ~
Evolution ✓ Full control ~ Salesforce roadmap ~
Integration ~ Data replication ~
Cost ✓ No licensing ✗ Very expensive ~
Capability ~ Must build ✓ Pre-built
Security ✓ PII stays in bank ~ PII to Salesforce ~ PII to vendor
Resource ~ Significant build ~ Salesforce skills ~ ~
Regulatory ✓ Data stays in jurisdiction ~ DPA required ~

See perspectives.md for how to use these evaluation lenses.


Principles alignment

Principle Assessment
AP-001 KISS Embedded is architecturally simpler; campaign execution tool for outbound is a pragmatic addition
AP-002 Data governance Customer PII stays in the bank's own infrastructure; no third-party CRM data replication
AP-005 Customer driven Agent has a single unified view; better service outcomes
AP-006 Cost effective No Salesforce FSC licensing; campaign tool (Braze/Iterable) is cheap per send
AP-007 Evolution Full control; Snowflake intelligence can be enhanced continuously

Recommendation (pending decision)

Option D — Embedded CRM with external campaign execution:

  • Customer 360, interaction timeline, case/complaints management, vulnerability flags, NBA queues, consent/preferences — all built in the back office front end (bank-app SD08). Design already completed in planning sessions.
  • Snowflake provides health scoring, churn scoring, segmentation, and NBA recommendations. Served via the Snowflake read API with API-layer cache (ADR-038 Tier 3) — never written back to Postgres.
  • Campaign execution — use Braze, Iterable, or Customer.io for outbound email/SMS/push delivery. These tools receive audience segments (not raw PII) from Snowflake and manage delivery, timing, and A/B testing. They are communication execution tools, not CRM systems of record.
  • Call/interaction capture — call recording and transcript feeds interaction timeline in bank-app. No Salesforce CTI required.

This approach keeps customer PII in the bank, gives agents a unified experience, and avoids Salesforce licensing. The build cost is real but the capability is already partially designed.


Relevant viewpoints

  • Functional viewpoint — Back office CRM capability map; campaign execution flow
  • System viewpoint — Snowflake intelligence → read API → bank-app back office; campaign segment → Braze/Iterable
  • Information viewpoint — Customer 360 data model; interaction history schema; consent management
  • Security viewpoint — PII handling; campaign tool data minimisation; consent enforcement

See viewpoints.md for guidance on producing these viewpoints.



Signoff record

Date Name Role Status
2026-04-10 Ross Millen CTO Approved
2026-04-10 Ross Millen Head of Architecture Approved
2026-04-10 Ross Millen Head of Data Approved

Capabilities

Capability Description Relationship
CAP-050 In-app customer support (chat + voice) enabled — interaction timeline and case management embedded in back office
CAP-063 Proactive financial insight engine governed — NBA recommendations from Snowflake surfaced via embedded CRM
CAP-103 Notification triggering enabled — campaign execution tool triggered by Snowflake audience segments
CAP-104 Channel selection & preference enabled — consent and preferences managed in embedded CRM
CAP-119 Customer 360 view (back-office) enabled — Customer 360 built into back office front end

ADR Title Relationship
ADR-002 Snowflake as the analytics and risk compute platform Snowflake provides health scoring, churn scoring, segmentation, and NBA
ADR-004 Single frontend codebase for customer and back office CRM is back office mode within the same codebase
ADR-021 Call recording, transcription, and CRM attachment call summaries attach to the CRM interaction timeline
ADR-038 Data access tier policy — Snowflake as the reporting and insight layer CRM intelligence is Tier 3 — served via Snowflake read API

All ADRs Compiled 2026-05-22 from source/entities/adrs/ADR-011.yaml