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 |
Related decisions¶
| 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