← Back to Case Study
Stage 4 of 5

Design & UX

I designed a Salesforce-native system with three custom objects, three record-triggered Flows, and a Lightning Record Page that guides campaigns from briefing to launch. Phase 1 uses Flows for automation. Phase 2 will integrate Agentforce agents for intelligent assignment and QA validation.

4.1 Design Principles

Five Core Design Principles

The PoC is built on principles that prioritize operational clarity, audit trails, and human control. These principles guide all decisions from data model to UX to automation.

1

Single Source of Truth

Everything lives in Salesforce. One data model (Campaign Intake), one record page, one status flow. No Excel tracking, no external systems, no data sync headaches. Enables audit trails and compliance.

2

Transparent Lifecycle

Every campaign has a clear status (Submitted, Not Ready, Ready for Assignment, Assigned – In Build, In QA, Ready to Launch, Launched) with entry/exit criteria visible to users. Path component shows progress. No hidden states.

3

Operational Automation Without Black Boxes

Flows automate intake validation, assignment, and SLA tracking. Users see what the system did in the activity timeline. Phase 2 will add Agentforce agents for smarter decisions, but always with transparent reasoning shown to humans.

4

Role-Based Views, Not Role-Based Objects

One Campaign Intake object. Different list views, Kanban boards, and dashboards for different roles (Ops lead sees SLA risk, builders see assignments, BU sees tracker). Same underlying data, different perspectives.

5

Audit Trail by Design

Master-detail relationships for QA Items, record-triggered Flows log changes, activity timeline captures human and system actions. Compliance ready from day one. No need to retrofit audit trails later.

North Star: Build a system ops lead, builders, and BU can trust to manage campaigns consistently, transparently, and at scale. Make it easy to see what's happening, why it happened, and who did it.
4.2 Data Model: Three Custom Objects

Salesforce-Native Data Architecture

The PoC is built on three tightly integrated custom objects. This design decouples the briefing system from the user directory, supports lifecycle tracking, and enables audit trails for compliance.

Core Objects

ObjectFieldsPurpose
Campaign Intake 26 fields: Name (auto-number CI-00001), Status, Path Stage, Campaign Type, Channels (multi-select), Launch Date, Budget, BU Owner, Builder Lookup, Rerun Change Type, Complexity Score, SLA Days, SLA Expires At, Created/Last Updated By/DateTime, Parent Campaign (if rerun), and read-only system fields (Assigned Builder, QA Status, Total QA Items Completed) Single record per campaign. BU-facing intake form + system-owned lifecycle tracking. Master object for campaign workflow.
Campaign Builder 4 fields: Builder Name (User lookup), Builder Type (picklist: Content / Journey), Active (checkbox), On Leave (checkbox) Decouples builder directory from user records. Supports availability tracking for auto-assignment. Separate table allows admins to manage capacity independently of user records.
Campaign QA Item 6 fields: Campaign Intake (master-detail), QA Stage (picklist), Result (picklist: Pass / Fail / Review), Comments (textarea), Completed By (User), Completed DateTime Child records of Campaign Intake. Audit trail for QA process. Cascade delete ensures clean data. Roll-up summaries possible (total items completed, last result).
Campaign Work Stage Designed but optional: Master-detail to Campaign Intake, Work Stage (picklist: In Progress / Blocked / Complete), Builder Assigned, Started Date, Expected Completion Date, Notes Future execution tracking. Enables detailed progress granularity. Deferred from Phase 1 PoC but ready for Phase 2 if work is sub-divided by team.

Campaign Lifecycle Statuses (8 Statuses)

The Status field on Campaign Intake drives the entire workflow. Each status represents a distinct phase with clear entry/exit criteria:

Submitted BU form submitted
Not Ready – BU Action Required Missing fields
Ready for Assignment Intake valid
Assigned – In Build Builder working
In QA QA checklist
Ready to Launch QA passed
Launched Campaign live

Path Component: 4-Stage Visual Tracker

The Record Page displays a Path component showing the campaign's journey through 4 execution stages:

Stage 1: BriefingStage 2: BuildStage 3: QAStage 4: Activated

The Path is driven by the Status field and provides visual clarity. Users see which stage they're on and what's needed to progress. This is distinct from the 8-status lifecycle and serves as a progress tracker for stakeholders.

4.3 Lightning Record Page & UI Design

How Users Interact With the System

The core interface is a single Lightning Record Page for Campaign Intake with Dynamic Forms, conditional visibility, and a Path component. This keeps complexity low and adoption high—users work within Salesforce's familiar UX.

Record Page Architecture

Kanban Board & List Views

Beyond the record page, users navigate campaigns via:

4.4 Flow Architecture: 3 Record-Triggered Flows

No-Code Automation Engine

The PoC uses 3 record-triggered Flows to orchestrate the entire lifecycle. Flows were chosen over Apex for maintainability — admins can modify business logic without code deployment. Phase 1 is built entirely with Flows. Phase 2 may explore Agentforce agents for more complex decision-making if needed.

The Three Flows

Flow NameTypeTriggerWhat It Does
1. Briefing – Calculate Readiness and SLA Record-Triggered, Before Save Fires on Campaign Intake save when Stage = 1 – Briefing Validates BU fields (Campaign Type, Channels, Consent Type, Data Ready). Sets Briefing_Ready = true/false. Calculates Complexity Level (Low/Medium/High). Derives SLA Days (2-7). Sets SLA Start DateTime, SLA Target DateTime.
2. SLA Pause/Resume Record-Triggered Fires when Status changes to/from "Not Ready – BU Action Required" Pauses: sets SLA_Paused = true, records SLA_Pause_Start. Resumes: calculates paused minutes, extends SLA Target proportionally, clears pause fields.
3. Initial Assignment Routing Record-Triggered Fires when Briefing_Ready becomes true and Initial_Assignment_Done = false Queries Campaign Builder records for eligible builders (Active = true, On Leave = false). Selects builder with lowest complexity-weighted in-flight workload. Updates Assigned Journey Builder / Content Builder. Sets Status = "Assigned – In Build".

Flow Dependencies & Data Movement

The flows form a pipeline:

User Action: BU launches "BU Intake Screen Flow" → Creates Campaign Intake record (Stage = 1 – Briefing)
Auto Trigger: "Briefing – Calculate Readiness and SLA" runs → Validates BU fields → Calculates Complexity Level → Derives SLA Days → Sets SLA DateTimes → Sets Briefing_Ready = true
Auto Trigger: "Initial Assignment Routing" runs → Queries eligible builders → Selects lowest workload → Updates Assigned Builder → Sets Status = "Assigned – In Build"
Ongoing: "SLA Pause/Resume" watches Status changes → Pauses/resumes SLA countdown when Status enters/exits "Not Ready – BU Action Required"
During Build: Builder works. If Status reverts to "Not Ready", SLA pauses until Status changes back.
At QA Stage: Manual QA workflow. QA reviewer updates QA Items → Status changes to "Ready to Launch" or back to "Not Ready"
Launch: Status = "Launched" → Campaign complete. Metrics recorded for analytics.
Why Flows, Not Apex? Flows are maintainable by admins, version-controlled in source, and fast to iterate during PoC. If complexity grows in Phase 2, Agentforce agents could potentially enhance Flows for recommendation logic (e.g., skill-based assignment, QA prioritization).
4.5 Key Screen Designs

UX for Each Persona

Ops Lead Dashboard

The Ops lead's daily question: "What's at risk? Who needs support? What's the team's utilization?" This dashboard shows:

Campaign Operations Dashboard
Ops Lead View
3
Briefing
5
Content
4
Journey
2
QA
3
Activation
8
Live
⚠️ At Risk (2 campaigns): ABM Fortune 500 (SLA breach in 6h), Email Nurture (data load delay).
Phase 2 Vision — Agentforce Recommendation Suggest assigning "Content Gating" campaign to Jamie Wong (currently 12% loaded, has prior email exp). Confidence: High.
💡 Phase 1 uses Flow-based auto-assignment by workload. Phase 2 would add skill-matching intelligence via Agentforce.
Ops Lead: At-a-Glance Dashboard (Phase 2 would add Agentforce recommendations)

BU Campaign Tracker

The BU's daily question: "Where's my campaign? What do I need to do next?" Card-based view showing:

Content Builder Queue (Kanban)

Content builder's daily question: "What's assigned to me? What's blocking?" Kanban board with swimlanes:

Content Builder Queue
My Assignments
📋 Ready for Build (2)
Email Nurture Q1
Due: Feb 20
SLA: 3 days
LinkedIn Ads Refresh
Due: Feb 22
SLA: 2 days
🛠️ In Progress (1)
Content Gating
Started: Feb 15
60% done
⏳ Awaiting BU Approval (1)
ABM: Fortune 500
Waiting: Marcus Lee
4 days pending
✓ Approved → Handoff (1)
Webinar: AI Trends
Approved: Feb 14
Ready for journey
Content Builder: Kanban Queue (With SLA Countdown)

QA Review Screen (Checklist-Based)

The QA checklist is standardized and lives in Salesforce (not Excel). Phase 2 could add an Agentforce QA Agent to assist reviewers:

QA Review: Email Nurture Q1
Standardized Checklist
Journey configuration validated
✓ Pass
Segment rules match brief criteria
✓ Pass
Test sends completed (all channels)
✓ Pass
Channel rules correct (email/SMS/in-app)
✓ Pass
Data Extension count matches expected
✓ Pass
Consent rules applied
⚠️ Review
Evidence screenshots uploaded
✓ Pass
Phase 2 Vision — Agentforce QA Agent Automated check complete. 6/7 items pass. 1 item needs manual review: Consent rules. Recommend reviewing CCPA opt-out segment logic.
Phase 1: QA is manual with a standardized checklist. Phase 2 would add automated pre-checks via Agentforce.
QA: Standardized Checklist (In Salesforce, Not Excel)

EXCO Dashboard

Executive's daily question: "How efficient is this process? Is the system working?" Key metrics:

4.6 Agentforce Phase 2 Integration

Scaling From Flows to Agents

Phase 1 PoC is designed with Flows. Phase 2 will migrate key Flows to Agentforce agents. This phased approach lets the team prove value with no-code before investing in AI agent tuning.

Phase 2 Agent Candidates

These Flows are best-suited for Agentforce replacement (higher complexity, recommendation logic):

In Phase 2, Flows become orchestration shells; Agentforce agents become the decision engines. Humans still override and approve all recommendations—AI surfaces intelligence, humans make final calls.

Phase 2 Vision: A campaign moves through intake → assignment recommendation (Agent) → automated QA checks (Agent) → human QA review (human) → launch. Humans remain in control; agents reduce toil.
4.7 Agentforce UX Patterns (Phase 2)

How Agents Will Show Up in Salesforce

When Agentforce agents are deployed in Phase 2, they will integrate into Salesforce as inline recommendations, notifications, and action panels. The pattern is always: show the recommendation, show the reasoning, allow override.

Agent Recommendation Card Pattern

Agentforce Intake Agent Campaign "Email Nurture Q1" is missing: Audience Segment (required), Budget Justification (required). Suggestion: Auto-fill Audience = "Enterprise Prospects" (guessed from campaign name). Manual review: Budget.
Confidence: Medium. Learn more about this recommendation.

Agent Activity Log Pattern

Every campaign has an activity timeline visible on the record. Agentforce actions are logged alongside human actions:

Feb 16, 10:23 AM — Agentforce QA Agent ran checks. Result: 6/7 items pass. ✓
Feb 16, 09:45 AM — Lerato M. approved Content stage. Status: Content Approved.
Feb 15, 3:30 PM — Agentforce Intake Agent validated completeness. Status: Validated. (Override: Campaign name too vague.)
Feb 15, 2:00 PM — Marcus Lee created campaign brief. Status: New.

Notification Design Pattern

Agentforce sends notifications via Salesforce standard channels (in-app + email digest option):

Pattern Rule: Every agent action is explainable. Humans can click to see the agent's reasoning, confidence level, and how to override.
4.8 Complexity Scoring & SLA

How SLA Days Are Calculated

Every campaign gets a complexity score that determines its SLA (Service Level Agreement). This is transparent and shown at briefing so BU knows their campaign's priority.

Complexity Formula

FactorOptionsWeight
Campaign Type New Campaign = 3 | Rerun = 1 | Modification = 2 Base weight
Channel Count 1 channel = ×1 | 2 channels = ×1.5 | 3+ channels = ×2 Multiplier
Change Types Content only = ×1 | Content + Logic = ×1.5 | Content + Logic + Audience = ×2 Multiplier
Final Score Type Weight × Channel Multiplier × Change Multiplier

SLA Days Lookup

Complexity Score RangeSLA DaysExample
1–3 3 days Rerun, 1 channel, content only (1 × 1 × 1 = 1)
4–6 5 days New campaign, 2 channels, content + logic (3 × 1.5 × 1 = 4.5)
7–9 8 days New campaign, 3 channels, content + logic (3 × 2 × 1.5 = 9)
10+ 12 days New campaign, 3 channels, content + logic + audience (3 × 2 × 2 = 12)

Transparency: The Briefing Flow calculates this score automatically when a campaign is submitted and displays it on the campaign record. BU sees "Your campaign has a complexity score of 6 (5-day SLA). Expected completion: Feb 22." No surprises.

4.9 Design Decisions & Trade-offs

Real PoC Design Choices

1

Auto Number for Record Names (CI-00001)

Chose: Auto Number instead of natural campaign names. Why: Human-readable (easy to reference in Outlook, email, tasks), guaranteed unique, works well in notifications and subject lines. Trade-off: Less friendly than "Email Nurture Q1", but operationally essential for identification and task tracking. Users see the auto number + campaign name together in lists.

2

Multi-Select Picklist for Channels

Chose: Multi-select over individual checkboxes. Why: Explicit selection (user must pick channels; no defaults), compact UI, allows counting for complexity scoring (1 channel = ×1, 2 = ×1.5, 3+ = ×2). A derived field "Is Multi-Channel" = CHANNELS count > 1, used for routing and metrics.

3

Separate Campaign Builder Object

Chose: Separate Campaign Builder object (not using User records). Why: Decouples builder directory from Salesforce user management, supports Active/On Leave tracking for auto-assignment, allows multiple builders per person (content + journey), and avoids modifying user records. Admins manage builder capacity independently.

4

Master-Detail Relationship for QA Items

Chose: Master-detail (not Lookup) for Campaign QA Item → Campaign Intake. Why: Cascade delete ensures clean data when campaign deleted, enables roll-up summaries (total QA items, completion count), provides strong audit trail, and prevents orphaned QA records. Trade-off: Tighter coupling, but appropriate for a child checklist model.

5

Flows Over Apex

Chose: Flows for all automation (Intake Validator, Auto Assign, SLA Pause/Resume, etc.). Why: No-code, maintainable by admins without deployment, version-controlled, appropriate complexity for PoC. Trade-off: Flows have limits (slower at massive scale, harder to debug complex logic), but Phase 1 doesn't need Apex. Phase 2 can move to Agentforce agents or Apex if needed.

6

Validation Rules Over Required Fields

Chose: Validation rules for conditional enforcement (e.g., "Rerun Change Type required only if Campaign Type = Rerun"). Why: Dynamic Forms + validation rules give flexibility. Required fields are static; validation rules adapt to status/type. Conditional visibility + validation rules together create a guided experience without hard blocks.

4.10 Stage Summary

What I Created in Stage 4

ArtefactWhat It Defines
Three Custom ObjectsCampaign Intake (26 fields: briefing + lifecycle), Campaign Builder (4 fields: directory + capacity), Campaign QA Item (6 fields: child checklist). Schema built for audit, assignment, and QA workflow.
Eight Status LifecycleSubmitted → Not Ready – BU Action Required → Ready for Assignment → Assigned – In Build → In QA → Ready to Launch → Launched. Clear state machine with entry/exit criteria.
Four-Stage Path ComponentBriefing → Build → QA → Activated. Visual tracker for stakeholders showing progress through execution phases.
Lightning Record Page ArchitectureDynamic Forms with conditional visibility, Path component, "BU Request" user-facing section, "System (Read-only)" ops section. Single source of truth for campaigns.
Three Record-Triggered Flows1. Briefing – Calculate Readiness and SLA (validates BU fields, sets Briefing_Ready, calculates Complexity Level, derives SLA Days). 2. SLA Pause/Resume (pauses/resumes SLA countdown based on Status changes). 3. Initial Assignment Routing (selects builder with lowest complexity-weighted workload, sets Status to "Assigned – In Build"). Orchestrates entire lifecycle.
List Views & Kanban BoardStatus-based Kanban, Ops SLA View (at-risk), My Content Builds, My Journey Builds. Role-based access patterns built into list views.
Phase 1 → Phase 2 RoadmapPhase 1: Flows drive automation. Phase 2: Agentforce agents replace key Flows (assignment, QA intelligence, SLA optimization). Humans always in control.
Six Design DecisionsAuto Number naming, multi-select channels, separate builder object, master-detail QA, Flows over Apex, validation rules over required fields. Each choice justified for PoC context.
✅ Decision: Design is complete. Data model is defined. Flows are architected. Record page UX is clear. Ready to move to Stage 5 (Build). The next stage implements these designs in a real Salesforce org with Data Cloud and Marketing Cloud.