🏗️ Real Projects · Real Challenges

Where Things Got Hard — and What Fixed Them

Not polished case studies. The actual problems, the dead ends, the 2 AM governor-limit errors, and the solutions that finally shipped. Every project below is one I personally built.

12+ Projects shipped
4+ Years on Salesforce
60% Avg. manual work cut
0 Data loss incidents
90s
Order sync latency
Down from 4-hour batch window
30%
MQL lift via Pardot scoring
Calendly signal integration
60%
Manual data entry reduced
MISMO XML Batch pipeline
0
Deployment rollbacks
Post Copado CI/CD adoption
🗂 Key Project Stories
⚡ LWC

Inline Editing Data Table for Sales Ops

🔴 Challenge: Sales ops team was copy-pasting between Salesforce and Excel to bulk-update 200+ records daily. Error-prone and eating 3 hours every morning.
🔵 Solution: LWC inline-edit data table with server-side pagination, SOQL wire adapters, and dirty-state tracking. Only changed fields sent to server.
🟢 Result: 3-hour daily task down to 20 minutes. Zero data errors reported in first 6 months of use.
🚀 DevOps

Zero-Regression Copado Pipeline

🔴 Challenge: 2–3 production hotfixes per sprint due to manual deployments. Developers afraid to push changes on Fridays. No automated testing gate.
🔵 Solution: Implemented Copado with 4-environment ring, mandatory PMD static analysis, and 75% test coverage gate before any promotion.
🟢 Result: Zero hotfixes in the 6 months following adoption. Deployment confidence high enough that Friday releases became normal.
📈 Marketing

Pardot + Calendly Behaviour Scoring

🔴 Challenge: Static lead scores weren't reflecting actual buying intent. Sales was ignoring MQLs because 60% were cold. Marketing and sales misaligned.
🔵 Solution: Webhooks from Calendly pushed booking signals into Salesforce in real time. Pardot score boosted +80 on any booking, triggering immediate sales alert.
🟢 Result: 30% MQL-to-pipeline lift in Q1 post-launch. Sales started trusting the queue again — follow-up time dropped from 48h to 4h.
⚙️ Apex

MISMO 3.4 Mortgage XML Pipeline

🔴 Challenge: Loan processors manually re-keying 80+ fields from MISMO XML into Salesforce per application. Taking 45 min per file, 20 files/day.
🔵 Solution: Batch Apex that parsed deeply-nested MISMO 3.4 XML using Dom.Document, mapped to custom objects, and surfaced validation errors in a review UI.
🟢 Result: Processing time from 45 min to under 2 min per file. 60% reduction in data entry errors in first month.
🛒 Commerce

Account-Based Pricing in B2B Commerce

🔴 Challenge: 500+ customers each with negotiated price books. Standard B2B Commerce pricing didn't support the complexity. Storefront was showing wrong prices for 30% of orders.
🔵 Solution: Custom Apex pricing extension that resolves the correct price book per account at checkout time, with a cache layer to avoid SOQL on every add-to-cart.
🟢 Result: Pricing errors dropped to zero. Page load time on cart maintained under 1.2s despite the custom pricing logic.
⚡ LWC

Governor-Safe Bulk Flow Launcher

🔴 Challenge: Ops team needed to bulk-enrol 5,000 contacts into an onboarding Flow. Native solution hit CPU time limits at ~200 records and silently failed the rest.
🔵 Solution: LWC with chunked processing (200 records/batch), Queueable chain for async execution, real-time progress bar via custom Platform Event, and failed-record download.
🟢 Result: 5,000 contacts processed in under 8 minutes with full audit trail. Zero governor limit errors since launch.
🔬 Deep-Dive: How Hard Problems Got Solved
🏭
🔗 Integration
The duplicate order problem
🔴 What went wrong: The WMS sent webhook retries on any non-200 response. Salesforce occasionally returned 202 (accepted but processing) which the WMS treated as failure and retried. We ended up with 3–4 copies of the same order record silently inserted.
🔵 How we fixed it: Changed the REST endpoint to always return 200 immediately with a job ID, then process asynchronously. Added a SHA-256 composite hash (orderId + timestamp bucket) stored as an External ID with upsert. Any duplicate payload now updates the existing record instead of creating a new one.
🟢 What we learned: Never trust the upstream system to handle idempotency. Build it into Salesforce regardless. The 20 minutes spent adding the hash field saved weeks of data cleanup.
Apex Upsert External ID REST Webhook
⚡ LWC
Why the data table felt laggy — and why it wasn't what we thought
🔴 What went wrong: After deploying the inline edit table, users reported it felt "slow to respond" when editing a cell. We assumed it was the wire call. We were wrong for long time.
🔵 The actual cause: The parent component was re-rendering on every keypress because we'd put the dirty-state map in a reactive property. Every single character typed triggered a full tree re-render. Fixed by moving dirty tracking into a plain (non-reactive) JS Map and only flagging reactive state on blur.
🟢 What we learned: In LWC, reactive properties are powerful but expensive. Keep internal component state in plain JS objects. Only promote to reactive when you actually need the template to re-render.
LWC Reactivity Performance
📄
⚙️ Apex
The MISMO field that silently mapped to the wrong object for 3 weeks
🔴 What went wrong: One specific MISMO field — the co-borrower's SSN last 4 digits — was being written to the primary borrower's record. The field path in the XML was identical except for an ancestor node. Our XPath traversal was grabbing the first match and stopping.
🔵 How we fixed it: Rewrote the parser to traverse the full DOM tree and track parent node context before assigning values. Built a unit test suite with 12 edge-case XML fixtures covering co-borrowers, joint applications, and missing optional sections.
🟢 What we learned: For deeply nested XML, always validate with real production samples — not the spec's simplified examples. The spec had 3 nesting levels; production files had up to 9.
Dom.Document Batch Apex Unit Testing
🚀
🚀 DevOps
The Copado deployment that passed all gates and still broke prod
🔴 What went wrong: A validation rule change passed 100% test coverage and PMD checks but broke a managed package's behaviour in production. Automated gates didn't catch it because managed package tests run in their own namespace.
🔵 How we fixed it: Added a manual regression checklist step in the Copado pipeline specifically for managed package touch-points. Also added a 30-minute post-deploy monitoring window with Slack alerts on any new error logs.
🟢 What we learned: CI/CD gates are not a replacement for domain knowledge. Automated checks catch what you've written tests for — human review catches everything else.
Copado Managed Packages Monitoring

Have a hard problem?

I work on complex Salesforce challenges — integrations, performance, architecture, and the bugs that have been "open for months". Let's talk about what you're building.