Solution 08: GreenGrid Energy Services
AI-Generated Content — Use for Reference Only
This content is AI-generated and has only been validated by AI review processes. It has NOT been reviewed or validated by certified Salesforce CTAs or human subject matter experts. Do not rely on this content as authoritative or completely accurate. Use it solely as a reference point for your own study and preparation. Always verify architectural recommendations against official Salesforce documentation.
Spoiler Warning
Attempt Scenario 08: GreenGrid Energy Services FIRST. Set a 180-minute timer and build your own solution before reading this.
Assumptions
- Energy & Utilities Cloud (Industries package) licensed
- Salesforce Field Service (SFS) replaces Oracle WAM
- MuleSoft Anypoint as enterprise integration layer
- Data Cloud for smart meter data ingestion and analytics
- Experience Cloud for customer portals (outage reporting, usage dashboards, solar)
- Single Salesforce org for all three business units (Electric, Gas, Renewables)
- SAP IS-U remains billing and metering system of record for the entire program
Key Architectural Decisions
Decision 1: Single Org with Business Unit Separation
I chose a single org with BU-based permission sets, record types, and sharing rules over multi-org.
Rejected multi-org for three reasons: (1) 2.68M customers frequently have both electric AND gas — multi-org requires cross-org sync for a unified customer view, adding latency and data integrity risk; (2) Field Service dispatch must see all technicians across BUs for emergency reallocation during storms — cross-org FSL coordination is architecturally painful; (3) maintaining three orgs triples DevOps burden for the 45-person team.
Implementation: Custom Business_Unit__c field on Account/Work Order/Case. Permission Set Groups per BU control visibility. Record Types differentiate workflows. Sharing Rules isolate third-party solar contractor access. A “Unified Customer View” Lightning page assembles cross-BU data.
Decision 2: Smart Meter Data — Data Cloud Summaries, Itron API for Detail
I chose Data Cloud for daily/monthly usage summaries (batch from Itron) and on-demand Itron REST API for 15-minute interval drill-down.
Rejected loading all 240M daily readings into Data Cloud because the raw volume (87.6B records/year) would consume credits rapidly with minimal operational value — agents need daily summaries, not 15-minute intervals.
Implementation: Itron pushes daily summaries via MuleSoft to Data Cloud. Calculated Insights generate high-bill alerts and usage anomalies. Agent workspace embeds CRM Analytics showing 12-month trends. “View Interval Data” action calls Itron REST API via MuleSoft for on-demand detail (sub-5-second). Meter event streaming (power-loss, tamper, voltage) flows via Itron webhooks to MuleSoft to Platform Events in real time.
Decision 3: Field Service for 1,800 Technicians
I chose SFS with offline mobile, Enhanced Scheduling and Optimization (ESO), and an Emergency Dispatch Console for storm operations.
Implementation:
- Offline: SFS mobile with offline priming at shift start — technicians download work orders, assets, map tiles. Completion data syncs on reconnect. Critical for rural KY/IN gaps.
- Scheduling: ESO considers skills, proximity (GPS), workload, equipment, and appointment windows. Dispatchers use the Dispatch Console map for real-time rebalancing.
- Storm Mode: Custom toggle activates emergency prioritization, enables mutual aid crew registration (temporary community users with limited permission sets), and switches to command-center view.
- Notifications: Work order completion triggers Platform Event -> Flow -> SMS/email within 15 minutes.
- Preventive maintenance: Maintenance Plans auto-generate work orders based on age, schedule, and condition scores.
Decision 4: SAP IS-U Integration via MuleSoft (Dual Pattern)
I chose MuleSoft for all SAP IS-U communication with pattern-matched integration flows.
- Real-time: BAPI call for customer identification during inbound calls (sub-second via MuleSoft Object Store caching)
- Near-real-time: SAP IS-U IDocs for account changes (new accounts, address, rate plan) transformed and upserted into Salesforce (< 15 min)
- Daily batch: Nightly IDoc batch of billing/payment/balance updates loaded by 6:00 AM
- Bidirectional conflict resolution: SAP IS-U masters billing/rates/meters; Salesforce masters interactions/work orders/cases. Address changes from Salesforce flow back to SAP IS-U via MuleSoft for validation before committing.
Critical Diagrams
System Landscape
graph TB
subgraph Legend
direction LR
NEW["🟢 NEW - Being Built"]
KEEP["⚪ KEEPING - No Changes"]
RETIRE["🔴 RETIRING - Decommissioning"]
INTL["🟠 INTEGRATION LAYER"]
end
subgraph SF["🟢 Salesforce - Single Org"]
SC["🟢 NEW: Service Cloud<br/>Customer 360 — 3 BUs"]
SFS["🟢 NEW: Field Service<br/>1,800 techs + offline"]
DC["🟢 NEW: Data Cloud<br/>Usage Summaries + Insights"]
EC["🟢 NEW: Experience Cloud<br/>Customer + Solar + Contractor"]
CRMA["🟢 NEW: CRM Analytics<br/>VP Dashboards + Regulatory"]
end
subgraph Int["🟠 MuleSoft Anypoint"]
API["🟢 NEW: API Gateway + ESB"]
end
subgraph External["External Systems — Keeping"]
SAP["⚪ KEEP: SAP IS-U<br/>Billing SOR — $400M/mo"]
ITRON["⚪ KEEP: Itron AMI<br/>2.5M meters — 240M reads/day"]
ADMS["⚪ KEEP: GE ADMS<br/>Grid Monitoring — 34 substations"]
GIS["⚪ KEEP: Esri ArcGIS<br/>GIS SOR — Asset Maps"]
end
subgraph Retiring["Retiring Systems"]
WAM["🔴 RETIRE: Oracle WAM<br/>Work/Asset Mgmt — replaced by SFS"]
IVR["🔴 RETIRE: Avaya IVR<br/>250K calls/mo — EOS in 2 years"]
OUTAGE_OLD["🔴 RETIRE: Custom Outage Mgmt<br/>12 yr old — no ADMS integration"]
end
SAP <-->|"BAPI real-time + IDoc batch nightly"| API
ITRON -->|"REST + webhooks real-time + batch daily"| API
ADMS -->|"REST real-time outage events < 2 min"| API
GIS -->|"REST batch daily delta"| API
WAM <-->|"REST bidirectional — transition period"| API
IVR -->|"CTI screen pop — replaced post-transition"| API
OUTAGE_OLD -.->|"Data migration → Salesforce"| API
API <-->|"REST + Platform Events"| SF
Integration Architecture
flowchart LR
subgraph Sources["Source Systems"]
SAP_I["⚪ KEEP: SAP IS-U"]
ITRON_I["⚪ KEEP: Itron AMI"]
ADMS_I["⚪ KEEP: GE ADMS"]
GIS_I["⚪ KEEP: Esri ArcGIS"]
WAM_I["🔴 RETIRE: Oracle WAM"]
IVR_I["🔴 RETIRE: Avaya IVR"]
end
subgraph MULE["🟠 MuleSoft Anypoint"]
GW["API Gateway"]
ESB["ESB / Orchestration"]
OBJ_STORE["Object Store Cache<br/>SAP account hot cache"]
MQ["Anypoint MQ<br/>DLQ + storm buffer"]
end
subgraph SF["🟢 Salesforce"]
CORE["Service Cloud"]
SFS_INT["Field Service"]
DC_INT["Data Cloud"]
EC_INT["Experience Cloud"]
end
SAP_I -->|"BAPI via RFC<br/>OAuth 2.0 client credentials<br/>Real-time — sub-second account lookup<br/>Cached in Object Store"| GW
SAP_I -->|"IDoc<br/>OAuth 2.0 client credentials<br/>Near-real-time — account changes < 15 min"| GW
SAP_I -->|"IDoc batch<br/>OAuth 2.0 client credentials<br/>Batch nightly — billing/payments by 6 AM<br/>~$400M/mo"| GW
ITRON_I -->|"REST webhooks<br/>OAuth 2.0 + HMAC<br/>Real-time — 15K events/day, 500K+ storms"| GW
ITRON_I -->|"REST batch<br/>OAuth 2.0<br/>Batch daily — usage summaries → Data Cloud"| GW
ITRON_I -->|"REST API<br/>OAuth 2.0<br/>On-demand — interval data < 5s SLA"| GW
ADMS_I -->|"REST<br/>mTLS + API key<br/>Event-driven — outage events < 2 min SLA"| GW
GIS_I -->|"REST<br/>OAuth 2.0<br/>Batch daily delta — asset coordinates"| GW
WAM_I -->|"REST<br/>Basic auth + TLS<br/>Near-real-time bidirectional — transition period"| GW
IVR_I -->|"CTI connector<br/>OAuth 2.0<br/>Real-time — 250K calls/mo screen pop"| GW
GW --> ESB
ESB --> OBJ_STORE
ESB --> MQ
ESB -->|"REST API<br/>Connected App OAuth 2.0<br/>Batch + near-real-time + events"| CORE
ESB -->|"REST API + Platform Events<br/>Connected App OAuth 2.0<br/>Real-time dispatch + WO completion"| SFS_INT
ESB -->|"Ingestion API<br/>Connected App OAuth 2.0<br/>Batch daily — usage summaries"| DC_INT
ESB -->|"REST API<br/>Connected App OAuth 2.0<br/>Real-time — outage map + portal data"| EC_INT
Examiner Focus
With 7 external systems, judges probe per-system: pattern, protocol, direction, error handling, and data ownership. “MuleSoft connects everything” will not score well.
Data Model / ERD
erDiagram
ACCOUNT ||--o{ SERVICE_POINT : "has service locations"
ACCOUNT ||--o{ CONTACT : "has contacts"
ACCOUNT ||--o{ CASE : "has cases"
SERVICE_POINT ||--o{ METER : "has meters"
SERVICE_POINT ||--o{ WORK_ORDER : "has work orders"
SERVICE_POINT }o--|| PREMISE : "at premise"
METER ||--o{ USAGE_SUMMARY : "has usage data"
WORK_ORDER ||--o{ SERVICE_APPOINTMENT : "has appointments"
WORK_ORDER }o--o| ASSET : "services asset"
CASE }o--o| OUTAGE_INCIDENT : "associated outage"
OUTAGE_INCIDENT ||--o{ OUTAGE_AFFECTED : "affects service points"
ACCOUNT ||--o{ SOLAR_SUBSCRIPTION : "has solar subscriptions"
SOLAR_SUBSCRIPTION }o--|| SOLAR_ARRAY : "allocated from array"
ASSET }o--o| SERVICE_POINT : "installed at"
ACCOUNT {
string OWD_Private "OWD: Private"
string Volume_2_68M "[LDV] LDV: 2.68M accounts"
string BU "Electric / Gas / Renewables"
string SAP_Account_ID "SAP IS-U master reference"
string Type "Residential / Commercial / Industrial"
}
CONTACT {
string OWD_Controlled "OWD: Controlled by Parent"
string Volume_3_5M "3.5M contacts"
}
SERVICE_POINT {
string OWD_Private "OWD: Private"
string Volume_4M "4M (multi-service addresses)"
string Service_Type "Electric / Gas / Solar"
string Premise_ID "SAP premise reference"
string GIS_Coords "ArcGIS lat/long"
}
PREMISE {
string OWD_Private "OWD: Private"
string Volume_2_8M "2.8M premises"
string Address "Validated service address"
}
METER {
string OWD_Private "OWD: Private"
string Volume_2_5M "[LDV] LDV: 2.5M smart meters"
string Meter_Number "Itron meter ID"
string Status "Active / Inactive / Tamper"
string Last_Read "Latest reading timestamp"
}
USAGE_SUMMARY {
string OWD_Data_Cloud "Data Cloud entity (no Salesforce OWD)"
string Volume_912M_yr "[LDV] LDV: ~912M/year (daily x 2.5M meters)"
string Period "Daily / Monthly aggregate"
string Source "Data Cloud calculated insight"
}
CASE {
string OWD_Private "OWD: Private"
string Volume_Rolling_2yr "Rolling 2 years on-platform"
string BU "Electric / Gas / Renewables"
string Type "Billing / Outage / Service / Solar"
}
WORK_ORDER {
string OWD_Private "OWD: Private"
string Volume_500K_yr "[LDV] LDV: 500K+/year"
string WAM_ID "Oracle WAM reference (transition)"
string Priority "Emergency / Scheduled / Preventive"
string BU "Electric / Gas / Renewables"
}
SERVICE_APPOINTMENT {
string OWD_Private "OWD: Private"
string Volume_500K_yr "500K/year"
string Assigned_Tech "Technician + GPS proximity"
string Offline_Sync "SFS offline capable"
}
ASSET {
string OWD_Private "OWD: Private"
string Volume_2_7M "[LDV] LDV: 2.5M meters + 180K poles + 45K transformers"
string Asset_Type "Meter / Pole / Transformer / Pipeline / Valve"
string GIS_ID "ArcGIS asset reference"
string Condition_Score "PM scheduling input"
string WAM_Asset_ID "Oracle WAM reference (transition)"
}
OUTAGE_INCIDENT {
string OWD_Public_RO "OWD: Public Read Only"
string Volume_Moderate "2K/year (varies by weather)"
string ADMS_Event_ID "GE ADMS correlation ID"
string Affected_Count "Estimated affected customers"
string ETA "Estimated restoration time"
}
OUTAGE_AFFECTED {
string OWD_Controlled "OWD: Controlled by Parent"
string Volume_Variable "Storm-dependent - up to 500K+"
}
SOLAR_SUBSCRIPTION {
string OWD_Private "OWD: Private"
string Volume_Low "10K initial, growing"
string Credit_Allocation "Monthly kWh credit"
string CO2_Offset "Environmental impact metric"
}
SOLAR_ARRAY {
string OWD_Public_RO "OWD: Public Read Only"
string Volume_Low "50 arrays"
string Production_vs_Forecast "Performance tracking"
}
LDV Strategy:
| Object | Volume | LDV Concern | Strategy |
|---|---|---|---|
| Account | 2.68M | High — above comfort threshold | Skinny tables on key CSR-query fields; selective indexes on Name, SAP Account ID, Service Address, Business Unit |
| Meter | 2.5M | High | Selective indexes on Meter Number, Service Point, Status; skinny table for agent lookup fields |
| Usage Summary (Data Cloud) | ~912M/year (daily x 2.5M meters) | Critical | Data Cloud stores summaries — NOT in Salesforce transactional tables. Calculated Insights for high-bill alerts. Rollup to monthly after 90 days. |
| Raw Interval Data (Itron) | 240M/day / ~87.6B/year | Critical — OFF-PLATFORM | Stays in Itron. On-demand REST API via MuleSoft for CSR access (< 5s SLA). 3-year retention in Itron. |
| Work Order | 500K+/year | High | Archive completed > 2 years to Big Object Work_Order_History__b; selective indexes on Service Point + Status + Date |
| Asset | 2.7M+ | High | Selective indexes on Asset Type, GIS ID, Service Point; ArcGIS remains GIS SOR — Salesforce holds operational subset |
| Billing History (SAP IS-U) | ~385M line items | Critical — OFF-PLATFORM | Stays in SAP IS-U. Rolling 12-month summary synced to Salesforce. On-demand SAP BAPI for detail. |
| Interaction History | ~9M (3 years) | Moderate | Migrate 2 years on-platform; older records referenced in archive with on-demand retrieval |
Role Hierarchy and Access Model
graph TB
CEO["CEO<br/>Full org visibility — all 3 BUs"]
CEO --> VP_CUST["VP Customer Ops<br/>All CSR + contact center"]
CEO --> VP_FIELD["VP Field Ops<br/>All 1,800 technicians + 34 centers"]
CEO --> VP_RENEW["VP Renewable Energy<br/>Solar program + contractors"]
CEO --> COO["COO<br/>All operations"]
VP_CUST --> CC_MGR["Contact Center Managers<br/>All agents in center"]
CC_MGR --> CSR["CSRs (420)<br/>Customer data — no cost/SCADA"]
VP_FIELD --> REG_MGR["Regional Field Managers<br/>Service centers in region"]
REG_MGR --> CTR_MGR["Service Center Managers<br/>Technicians in center"]
CTR_MGR --> TECH["Field Technicians (1,800)<br/>Assigned jobs only — no billing"]
VP_FIELD --> EOC["Emergency Ops Center<br/>All outages + crews + mutual aid<br/>Storm mode elevated access"]
VP_RENEW --> SOLAR_MGR["Solar Program Manager<br/>All solar arrays + subscriptions"]
SOLAR_MGR --> SOLAR_CONT["Third-Party Solar Contractors<br/>Assigned solar WOs only — no grid data"]
OWD Summary:
| Object | OWD | Rationale |
|---|---|---|
| Account | Private | Business unit isolation; third-party contractors cannot see non-solar customers; commercial/industrial accounts restricted to assigned reps |
| Contact | Controlled by Parent | Follows Account sharing |
| Service Point | Private | Tied to Account sharing; GIS coordinates and infrastructure details protected from external users |
| Meter | Private | Meter status and readings tied to Service Point sharing; tamper data restricted |
| Case | Private | CSRs see all customer cases via permission set; technicians see only work-order-linked cases; solar contractors excluded |
| Work Order | Private | Technicians see assigned only via SFS sharing; solar contractors see assigned solar WOs only via sharing rules; EOC sees all via permission set during storm mode |
| Asset | Private | Infrastructure vulnerability data protected; field techs see assets on assigned jobs; solar contractors see interconnection assets only |
| Outage Incident | Public Read Only | All internal users need outage context; customer portal shows outage map (unauthenticated zone) |
| Usage Summary | N/A (Data Cloud entity) | Data Cloud entity — no Salesforce OWD. Access controlled via Data Cloud permissions, CRM Analytics row-level security, and Connected App scoping. Customer portal shows own usage only; CSRs see during service calls. |
| Solar Subscription | Private | Subscribers see only their own credits/offsets; solar array-level data shared with program managers only |
| Solar Array | Public Read Only | General program data (production, capacity) visible to all internal users and solar portal subscribers |
Migration Strategy
flowchart TB
subgraph P1["Phase 1: Foundation (Months 1-6)"]
DATA_OWN["Data Ownership Model<br/>SAP IS-U = billing/metering master<br/>ArcGIS = GIS master<br/>SF = CRM/WO/case master"]
SAP_INT["SAP IS-U Integration<br/>BAPI real-time + IDoc batch<br/>Validate 15-min sync SLA"]
ITRON_INT["Itron Integration<br/>Webhooks + batch daily<br/>Data Cloud ingestion pipeline"]
ADMS_INT["ADMS Integration<br/>Outage event → incident pipeline<br/>< 2 min SLA validation"]
end
subgraph P2["Phase 2: Account + Asset Migration (Months 7-12)"]
ACCT_SYNC["Account Sync from SAP IS-U<br/>2.68M accounts → Salesforce<br/>Automated reconciliation daily"]
ASSET_MIG["Asset Migration from WAM + ArcGIS<br/>2.5M meters, 180K poles,<br/>45K transformers, pipelines, valves<br/>GIS coordinates linked"]
WO_HIST["Work Order History from WAM<br/>~2.5M WOs with labor + materials<br/>5 years — 2 years on-platform,<br/>older → Big Object archive"]
end
subgraph P3["Phase 3: Field Service Cutover (Months 13-18)"]
SFS_PILOT["SFS Pilot — 2 Service Centers<br/>Offline validation<br/>Parallel WAM operation"]
SFS_ROLL["SFS Rollout — 34 Centers<br/>Phased by region (OH → IN → KY)<br/>WAM bidirectional sync active"]
WAM_CUT["Oracle WAM Cutover<br/>Per-center go/no-go criteria:<br/>zero WO delta for 5 consecutive days<br/>Technician adoption > 95%"]
end
subgraph P4["Phase 4: Portal + Analytics (Months 19-24)"]
INTERACT["Interaction History<br/>~9M records — 2 years migrated<br/>Call recordings referenced in archive"]
PORTAL["Experience Cloud Launch<br/>Customer portal + solar dashboard<br/>Outage map (unauthenticated)"]
ANALYTICS["CRM Analytics + Regulatory<br/>VP dashboards, SAIDI/SAIFI/CAIDI<br/>CFO reconciliation SAP ↔ SF"]
OUTAGE_CUT["Custom Outage Mgmt Retire<br/>ADMS → SF pipeline validated<br/>Outage map fully on Experience Cloud"]
end
DATA_OWN --> SAP_INT
SAP_INT --> ITRON_INT
ITRON_INT --> ADMS_INT
ADMS_INT --> ACCT_SYNC
ACCT_SYNC --> ASSET_MIG
ASSET_MIG --> WO_HIST
WO_HIST --> SFS_PILOT
SFS_PILOT --> SFS_ROLL
SFS_ROLL --> WAM_CUT
WAM_CUT --> INTERACT
INTERACT --> PORTAL
PORTAL --> ANALYTICS
ANALYTICS --> OUTAGE_CUT
Identity & SSO Flow
sequenceDiagram
participant User as Internal User<br/>(CSR / Dispatcher)
participant Browser as Browser
participant AD as Active Directory<br/>(On-Premise AD + Azure AD)
participant SF as Salesforce
User->>Browser: Navigate to Salesforce
Browser->>AD: Redirect (SP-initiated SSO)
AD->>AD: Authenticate (MFA via Microsoft Authenticator)
AD->>Browser: SAML 2.0 Assertion
Browser->>SF: POST SAML to ACS URL
SF->>SF: Match Federation ID → User record
SF->>Browser: Session Cookie + Service Console
sequenceDiagram
participant Tech as Field Technician<br/>(1,800)
participant App as SFS Mobile App
participant AD as Azure AD<br/>(Corporate IdP)
participant SF as Salesforce
Tech->>App: Launch Field Service app
App->>AD: OAuth 2.0 + PKCE
AD->>AD: Biometric / PIN
AD->>App: Access Token + Refresh Token
App->>SF: API calls with Bearer token
SF->>App: Work order data + offline cache
sequenceDiagram
participant Cust as Customer<br/>(2.68M accounts)
participant Browser as Browser / Mobile
participant SF as Salesforce<br/>(Experience Cloud)
Cust->>Browser: Navigate to Customer Portal
Browser->>SF: Login page
SF->>SF: Email/Password + MFA (SMS OTP)
SF->>Browser: Session Cookie + Customer Dashboard
sequenceDiagram
participant Solar as Solar Contractor<br/>(Third-Party)
participant Browser as Browser
participant SF as Salesforce<br/>(Experience Cloud)
Solar->>Browser: Navigate to Contractor Portal
Browser->>SF: Login page (Experience Cloud)
SF->>SF: Username/Password + MFA (TOTP App)
SF->>Browser: Session Cookie + Limited Work Order View
Internal users (420 CSRs + dispatchers + HQ staff): SAML 2.0 SP-initiated SSO with on-premise Active Directory synced to Azure AD. Utilities typically maintain on-premise AD for NERC compliance and legacy system integration. Microsoft Authenticator for MFA. Emergency operations center staff use the same SSO with elevated emergency mode permissions activated by Flow.
Field technicians (1,800): OAuth 2.0 with PKCE flow via Azure AD for the SFS mobile app. Biometric authentication as primary factor for speed in the field. Refresh tokens enable offline session continuity — critical for rural OH/IN/KY areas with connectivity gaps. Token refresh occurs silently on reconnection.
Customers (2.68M): Experience Cloud native login for the customer portal. SMS OTP for MFA. Separate authenticated zones (usage data, billing, outage reporting) and unauthenticated zone (outage map, general info). Self-registration via account number + last 4 of SSN + service ZIP.
Third-party solar contractors: Experience Cloud Partner portal with limited access. Username/password + TOTP-based MFA. Access provisioned per contract term with automatic deactivation on contract expiry. Sharing rules restrict visibility to assigned solar work orders and interconnection details only.
Integration Error Handling
| Integration | Pattern | Retry Strategy | Dead Letter Queue | Monitoring | Fallback |
|---|---|---|---|---|---|
| SAP IS-U Account Lookup (real-time BAPI) | Sync REST via MuleSoft | 2 retries: 200ms, 1s backoff (sub-second SLA) | N/A (stateless lookup) | Alert on avg latency > 500ms; circuit breaker at 2s | MuleSoft Object Store cache returns last-known account data; “data may not be current” indicator |
| SAP IS-U Account Changes (IDoc near-real-time) | Near-real-time IDoc via MuleSoft | 3 retries: 1s, 5s, 30s backoff per IDoc | Failed IDocs → Anypoint MQ DLQ → SAP_Sync_Error__c | Alert if sync lag > 30 min; IDoc queue depth dashboard | Stale data displayed with “last synced” timestamp; CSR can trigger manual refresh |
| SAP IS-U Billing (nightly batch) | Batch IDoc via MuleSoft | Full batch re-run on systemic failure; record-level retry for individuals | Failed billing records → Billing_Error__c staging object | Alert if batch not complete by 6 AM; reconciliation count alert at > 0.05% variance | Previous day’s billing displayed; CSR redirects to SAP billing screen for current data |
| Itron AMI Daily Usage (batch) | Batch REST via MuleSoft → Data Cloud | Full batch re-run; individual meter failures logged and skipped | Failed meter summaries → Meter_Sync_Error__c | Alert if batch not complete by 7 AM; missing meter count alert | ”Usage data temporarily unavailable” for affected meters; CSR uses Itron portal directly |
| Itron AMI Interval Data (on-demand) | Sync REST via MuleSoft → Itron | 2 retries: 1s, 3s backoff (5-second SLA) | N/A (stateless query) | Alert on avg latency > 3s; circuit breaker at 8s | ”Interval data temporarily unavailable”; agent offered to email detailed usage report |
| Itron Meter Events (webhooks, real-time) | Event-driven webhooks → MuleSoft → Platform Events | 3 retries: 1s, 5s, 30s backoff | Failed events → Anypoint MQ DLQ; Platform Events 72-hour replay | Alert on event processing lag > 5 min; storm mode: alert on queue > 50K | Events queued; outage detection falls back to ADMS-only (no meter-level confirmation) |
| GE ADMS Outage Events (real-time) | Event-driven REST via MuleSoft (< 2 min SLA) | 3 retries: 1s, 5s, 15s backoff | Failed outage events → priority Anypoint MQ DLQ | Alert on ANY unprocessed outage event > 3 min; PagerDuty to network ops | Manual outage creation by EOC staff; Experience Cloud outage map updated manually |
| Oracle WAM Bidirectional Sync (transition) | Near-real-time REST via MuleSoft | 3 retries: 1s, 5s, 30s backoff | Conflict records → WAM_Conflict__c with both versions | Daily reconciliation report; duplicate work order alert | Unique external ID prevents duplicates; clear cutover criteria per service center |
| Esri ArcGIS (daily delta) | Batch REST via MuleSoft | Full batch re-run on failure | Failed asset records → GIS_Sync_Error__c | Alert if sync not complete by 5 AM; asset count reconciliation | Previous day’s asset positions; field crews use ArcGIS directly for map data |
Storm-Event Error Handling
During major storms, Itron generates 500K+ meter events (33x normal) and the Experience Cloud portal faces 85K concurrent sessions. MuleSoft rate-limits inbound Itron webhooks to prevent overwhelming Platform Events (hourly publishing allocation varies by edition — 250K/hour for high-volume platform events on Enterprise/Unlimited). Excess events queue in Anypoint MQ with FIFO processing. Platform Events enable 72-hour replay for any missed events. The Experience Cloud outage map uses Platform Cache + CDN with static page templates that remain functional even during extreme load. SAP IS-U batch billing continues on schedule — storm events do not affect billing pipeline.
Requirements Addressed
- Unified customer view (< 4 seconds) — Single org across 3 BUs; MuleSoft-cached SAP lookup; cross-BU Lightning page (Reqs 1, 2)
- Field Service for 1,800 technicians — SFS with offline mobile, ESO scheduling, emergency dispatch console (Reqs 6, 7, 8, 9)
- Smart meter data architecture — Data Cloud for daily summaries, Itron API for interval detail, Platform Events for real-time events (Reqs 3, 16)
- Outage management — ADMS-triggered incidents within 5 min, multi-channel reporting, proactive notifications (Reqs 12, 13, 14)
- Community solar engagement — Dedicated Experience Cloud views for credit allocations, production data, CO2 offsets (Req 4)
- SAP IS-U integration — Dual-pattern: real-time BAPI + batch IDoc; SAP remains billing/metering SOR (Reqs 15, 29)
- Storm scalability — Platform Events 72-hour replay, MuleSoft rate-limiting, CDN/cache, static templates (Reqs 30, 34)
- Third-party contractor access — Experience Cloud with limited sharing rules, contract-term-based provisioning (Req 24)
- Regulatory compliance — PUC audit trail, NERC reliability data, rate structure configurability within 90-day windows (Reqs 36, 39)
Governance & DevOps
flowchart LR
PLAT[Platform Team<br/>Dev Sandbox x4<br/>12 Staff] --> INT_ENV[Integration Test<br/>Partial Copy<br/>SAP/Itron/ADMS Test]
SI[Systems Integrator<br/>Dev Sandbox x4<br/>25 Consultants] --> INT_ENV
OPS[IT Ops<br/>Dev Sandbox x2<br/>8 Staff] --> INT_ENV
INT_ENV --> UAT[UAT — Full Copy<br/>2.68M Accounts<br/>Storm Simulation Data]
UAT --> PROD[Production]
REG[Regulatory Hotfix<br/>Dev Pro Sandbox] -.-> INT_ENV
Branching Strategy
Main + develop + feature branches with strict regulatory change management for a 45-person team across 3 groups.
main— production-ready. All deployments cut from here. Protected with 3 approvals (1 per group).develop— integration branch. All feature branches merge here. CI runs full validation suite.feature/*— short-lived branches (max 1 week). Clear ownership per team: platform features, integration flows, IT ops configurations.hotfix/*— regulatory changes with 90-day PUC deadlines. Fast-tracked through integration test with business owner sign-off per Req 36.release/*— bi-weekly release stabilization. Created 3 days before Sunday deployment window.
Sandbox Strategy
| Sandbox Type | Count | Purpose |
|---|---|---|
| Developer | 10 | 4 for platform team (12 staff), 4 for SI (25 consultants, paired dev), 2 for IT ops (8 staff). |
| Developer Pro | 1 | Regulatory hotfix environment for urgent rate structure / reporting changes with 90-day PUC deadlines. |
| Partial Copy | 1 | Integration test with connections to SAP IS-U test, Itron sandbox, GE ADMS test, Oracle WAM test, and ArcGIS dev. |
| Full Copy | 1 | UAT with 2.68M account dataset. Storm simulation data pre-loaded for volume testing. Refreshed before each major release. |
Testing Strategy
Environmental compliance and seasonal demand testing are unique requirements for a regulated utility.
- Apex unit tests: >80% coverage. SAP BAPI/IDoc mocks with realistic response payloads. SFS scheduling logic tests with emergency mode scenarios. Platform Event trigger tests with volume simulation.
- Integration testing: End-to-end SAP IS-U account sync (< 15 min SLA). Itron webhook processing for normal (15K events/day) and storm (500K+ events). ADMS outage-to-incident pipeline (< 2 min). Oracle WAM bidirectional sync with conflict resolution.
- Storm-event load testing: Simulate 500K+ Itron meter events, 85K concurrent portal sessions, and 300-500% call volume spike simultaneously. Validate Platform Events replay buffer, MuleSoft rate-limiting, CDN caching, and Experience Cloud static page fallback. Run quarterly before storm seasons (spring/winter).
- Seasonal demand testing: Load test with summer peak (AC load), winter peak (heating), and spring storm scenarios. Validate SFS scheduling handles 2x normal work order volume during seasonal spikes.
- Regulatory compliance validation: Verify SAIDI/SAIFI/CAIDI calculation accuracy against IEEE 1366. Validate rate structure changes propagate correctly from SAP IS-U through billing sync. Confirm PUC audit trail captures all billing/metering/notification changes.
- Oracle WAM parallel operation: Bidirectional sync testing with conflict scenarios (work order updated in both systems within sync window). Cutover criteria validation per service center.
- UAT: 4-week cycle given 3 business units and 7 integration systems. CSR supervisors, field ops managers, EOC staff, renewable energy team, and IT ops each validate their domain. Business unit-specific workflows tested (electric vs. gas vs. solar).
- Regression: Automated test suite covering outage lifecycle, work order lifecycle, customer inquiry flow, and portal self-service. Run on every merge to
developand before every production deployment.
CoE / Governance
VP of IT serves as executive sponsor with a dedicated Platform Owner reporting to the CIO.
- Post-go-live ownership: Transition from 25-person SI to internal team of 12 platform staff + 8 IT ops. SI retains 6 consultants for 9 months post-go-live. Clear handoff plan with documentation and knowledge transfer sessions.
- Change management: All changes affecting billing, metering, notifications, or regulatory reporting require documented business owner sign-off retained for PUC audit (Req 36). Metadata changes tracked in Git with full audit trail.
- Regulatory change process: Rate structure changes, reporting requirement updates, and notification modifications follow an expedited path with 90-day implementation windows. Developer Pro sandbox reserved for regulatory work. Business owner sign-off mandatory before deployment.
- Release cadence: Bi-weekly production releases during Sunday 2-6 AM maintenance window (Req 38). Zero-downtime for customer-facing channels using blue-green deployment pattern. Feature flags enable instant rollback.
- Emergency operations: Storm mode activation grants EOC staff temporary elevated permissions via Flow-triggered permission set assignment. Mutual aid crew registration provisions temporary community users with pre-configured limited permission sets. All temporary access auto-expires 72 hours after storm mode deactivation.
- Cross-system coordination: Joint release calendar with SAP IS-U, Itron, and GE ADMS teams. Integration contract changes require 4-week advance notice and regression testing. Oracle WAM sync monitored daily during transition with reconciliation reports.
Risk Assessment
| Risk | Likelihood | Impact | Mitigation |
|---|---|---|---|
| Storm-event scaling: 500K+ meter events + 85K concurrent portal sessions | Medium | Critical | Platform Events 72-hour replay buffer; MuleSoft rate-limiting/queuing; CDN + Platform Cache; static outage page templates |
| SAP IS-U integration exceeds 15-minute SLA for account changes | Medium | High | MuleSoft Object Store caching; IDoc processing parallelized; monitoring on queue depth; fallback: embedded SAP iframe |
| Field Service offline data conflicts on technician reconnect | High | Medium | SFS built-in conflict resolution (last-write-wins for status, server-wins for dispatcher overrides); offline priming reduces stale data |
| Oracle WAM bidirectional sync creates duplicate work orders | High | High | Unique external ID; MuleSoft idempotent processing; daily reconciliation report; clear cutover criteria per service center |
Domain Scoring Notes
D1 System Architecture (HEAVY): Single org is the correct answer — judges probe WHY. Shared customer base, shared dispatch, shared integration layer outweigh process differences. Storm-event scalability: Platform Events, CDN, caching, graceful degradation. SFS mobile with offline is non-negotiable. Experience Cloud with authenticated (usage data) and unauthenticated (outage map) zones.
Reporting Approach
CRM Analytics for VP dashboards (Customer Ops, Field Ops, Renewable Energy) with hourly refresh and 15-minute storm-mode refresh. Regulatory indices (SAIDI/SAIFI/CAIDI/MAIFI) calculated from outage data with IEEE 1366 major event day exclusions — built as CRM Analytics dataflows, NOT real-time reports against transactional data. CFO reconciliation dashboard compares SAP IS-U billing totals against Salesforce-synced records with variance drill-down.
D5 Integration (HEAVY): Pattern specificity for each of 7 systems — protocol, direction, frequency, error handling, retry. SAP IS-U dual-pattern (real-time BAPI + batch IDoc) is the canonical utility integration. Itron event handling with 33x storm spike. ADMS outage-to-incident within 2 minutes. Dead letter queues, circuit breakers, and alerting — especially for SAP billing sync affecting 2.68M customers.
What Would Fail
Critical Failures
-
Multi-org for 3 business units — unified customer base, shared field dispatch, and 7-system integration landscape demand a single org. Multi-org duplicates all integrations and requires cross-org customer sync.
-
Storing 240M daily meter readings in Salesforce — 87.6B records/year. Data stays in Itron with on-demand API access. Only daily/monthly summaries enter the Salesforce ecosystem.
-
No offline mobile strategy — rural connectivity gaps are explicit. SFS offline mode is a hard requirement for 1,800 technicians.
Scoring Rubric
| Criterion | Weight | What Judges Look For |
|---|---|---|
| System Architecture & Org Strategy | 25% | Single-org justification for 3 business units with unified customer base. Energy & Utilities Cloud selection. Field Service at scale for 1,800 technicians. Offline mobile strategy for rural connectivity gaps. Licensing model across business units |
| Integration Architecture | 25% | 7-system integration landscape with pattern specificity (protocol, direction, frequency, error handling). SAP IS-U dual-pattern (real-time BAPI + batch IDoc). Itron event handling with 33x storm spike. ADMS outage-to-incident within 2 minutes. Dead letter queues and circuit breakers |
| Data Architecture | 20% | Smart meter data kept external (240M daily readings never in Salesforce). Only daily/monthly summaries enter CRM. Data Cloud for meter data ingestion and analytics. Storage economics justified |
| Cross-Domain Thinking | 15% | Connections between field service dispatch, outage management, meter data, and customer service. Regulatory reporting (SAIDI/SAIFI/CAIDI/MAIFI). Storm mode escalation patterns. Multi-business-unit shared dispatch |
| Trade-off Articulation | 15% | WHY single org for 3 business units (shared field dispatch, unified customer base). WHY meter data stays external. WHY SFS over Oracle WAM. Clear acknowledgment of what the architecture does NOT do (e.g., real-time meter analytics in Salesforce) |
This is a personal study site for Salesforce CTA exam preparation. Built with AI assistance. Not affiliated with Salesforce.