Skip to content

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

  1. Energy & Utilities Cloud (Industries package) licensed
  2. Salesforce Field Service (SFS) replaces Oracle WAM
  3. MuleSoft Anypoint as enterprise integration layer
  4. Data Cloud for smart meter data ingestion and analytics
  5. Experience Cloud for customer portals (outage reporting, usage dashboards, solar)
  6. Single Salesforce org for all three business units (Electric, Gas, Renewables)
  7. 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:

ObjectVolumeLDV ConcernStrategy
Account2.68MHigh — above comfort thresholdSkinny tables on key CSR-query fields; selective indexes on Name, SAP Account ID, Service Address, Business Unit
Meter2.5MHighSelective indexes on Meter Number, Service Point, Status; skinny table for agent lookup fields
Usage Summary (Data Cloud)~912M/year (daily x 2.5M meters)CriticalData 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/yearCritical — OFF-PLATFORMStays in Itron. On-demand REST API via MuleSoft for CSR access (< 5s SLA). 3-year retention in Itron.
Work Order500K+/yearHighArchive completed > 2 years to Big Object Work_Order_History__b; selective indexes on Service Point + Status + Date
Asset2.7M+HighSelective indexes on Asset Type, GIS ID, Service Point; ArcGIS remains GIS SOR — Salesforce holds operational subset
Billing History (SAP IS-U)~385M line itemsCritical — OFF-PLATFORMStays in SAP IS-U. Rolling 12-month summary synced to Salesforce. On-demand SAP BAPI for detail.
Interaction History~9M (3 years)ModerateMigrate 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:

ObjectOWDRationale
AccountPrivateBusiness unit isolation; third-party contractors cannot see non-solar customers; commercial/industrial accounts restricted to assigned reps
ContactControlled by ParentFollows Account sharing
Service PointPrivateTied to Account sharing; GIS coordinates and infrastructure details protected from external users
MeterPrivateMeter status and readings tied to Service Point sharing; tamper data restricted
CasePrivateCSRs see all customer cases via permission set; technicians see only work-order-linked cases; solar contractors excluded
Work OrderPrivateTechnicians 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
AssetPrivateInfrastructure vulnerability data protected; field techs see assets on assigned jobs; solar contractors see interconnection assets only
Outage IncidentPublic Read OnlyAll internal users need outage context; customer portal shows outage map (unauthenticated zone)
Usage SummaryN/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 SubscriptionPrivateSubscribers see only their own credits/offsets; solar array-level data shared with program managers only
Solar ArrayPublic Read OnlyGeneral 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

IntegrationPatternRetry StrategyDead Letter QueueMonitoringFallback
SAP IS-U Account Lookup (real-time BAPI)Sync REST via MuleSoft2 retries: 200ms, 1s backoff (sub-second SLA)N/A (stateless lookup)Alert on avg latency > 500ms; circuit breaker at 2sMuleSoft 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 MuleSoft3 retries: 1s, 5s, 30s backoff per IDocFailed IDocs → Anypoint MQ DLQ → SAP_Sync_Error__cAlert if sync lag > 30 min; IDoc queue depth dashboardStale data displayed with “last synced” timestamp; CSR can trigger manual refresh
SAP IS-U Billing (nightly batch)Batch IDoc via MuleSoftFull batch re-run on systemic failure; record-level retry for individualsFailed billing records → Billing_Error__c staging objectAlert if batch not complete by 6 AM; reconciliation count alert at > 0.05% variancePrevious day’s billing displayed; CSR redirects to SAP billing screen for current data
Itron AMI Daily Usage (batch)Batch REST via MuleSoft → Data CloudFull batch re-run; individual meter failures logged and skippedFailed meter summaries → Meter_Sync_Error__cAlert 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 → Itron2 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 Events3 retries: 1s, 5s, 30s backoffFailed events → Anypoint MQ DLQ; Platform Events 72-hour replayAlert on event processing lag > 5 min; storm mode: alert on queue > 50KEvents 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 backoffFailed outage events → priority Anypoint MQ DLQAlert on ANY unprocessed outage event > 3 min; PagerDuty to network opsManual outage creation by EOC staff; Experience Cloud outage map updated manually
Oracle WAM Bidirectional Sync (transition)Near-real-time REST via MuleSoft3 retries: 1s, 5s, 30s backoffConflict records → WAM_Conflict__c with both versionsDaily reconciliation report; duplicate work order alertUnique external ID prevents duplicates; clear cutover criteria per service center
Esri ArcGIS (daily delta)Batch REST via MuleSoftFull batch re-run on failureFailed asset records → GIS_Sync_Error__cAlert if sync not complete by 5 AM; asset count reconciliationPrevious 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

  1. Unified customer view (< 4 seconds) — Single org across 3 BUs; MuleSoft-cached SAP lookup; cross-BU Lightning page (Reqs 1, 2)
  2. Field Service for 1,800 technicians — SFS with offline mobile, ESO scheduling, emergency dispatch console (Reqs 6, 7, 8, 9)
  3. Smart meter data architecture — Data Cloud for daily summaries, Itron API for interval detail, Platform Events for real-time events (Reqs 3, 16)
  4. Outage management — ADMS-triggered incidents within 5 min, multi-channel reporting, proactive notifications (Reqs 12, 13, 14)
  5. Community solar engagement — Dedicated Experience Cloud views for credit allocations, production data, CO2 offsets (Req 4)
  6. SAP IS-U integration — Dual-pattern: real-time BAPI + batch IDoc; SAP remains billing/metering SOR (Reqs 15, 29)
  7. Storm scalability — Platform Events 72-hour replay, MuleSoft rate-limiting, CDN/cache, static templates (Reqs 30, 34)
  8. Third-party contractor access — Experience Cloud with limited sharing rules, contract-term-based provisioning (Req 24)
  9. 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 TypeCountPurpose
Developer104 for platform team (12 staff), 4 for SI (25 consultants, paired dev), 2 for IT ops (8 staff).
Developer Pro1Regulatory hotfix environment for urgent rate structure / reporting changes with 90-day PUC deadlines.
Partial Copy1Integration test with connections to SAP IS-U test, Itron sandbox, GE ADMS test, Oracle WAM test, and ArcGIS dev.
Full Copy1UAT 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 develop and 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

RiskLikelihoodImpactMitigation
Storm-event scaling: 500K+ meter events + 85K concurrent portal sessionsMediumCriticalPlatform 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 changesMediumHighMuleSoft Object Store caching; IDoc processing parallelized; monitoring on queue depth; fallback: embedded SAP iframe
Field Service offline data conflicts on technician reconnectHighMediumSFS 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 ordersHighHighUnique 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

  1. 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.

  2. 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.

  3. No offline mobile strategy — rural connectivity gaps are explicit. SFS offline mode is a hard requirement for 1,800 technicians.

Scoring Rubric

CriterionWeightWhat Judges Look For
System Architecture & Org Strategy25%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 Architecture25%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 Architecture20%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 Thinking15%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 Articulation15%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.