← Back to Articles

We Replaced Salesforce. Here's What It Actually Takes.

April 2, 2026

SalesforceSF MigrationCase Study

There's a moment in every Salesforce org's life when someone asks a simple question and nobody can answer it.

For us, it was: “Why does this vendor show as non-compliant when their insurance is current?”

The answer involved a formula field, two Flows, an Apex batch job that ran nightly, and a race condition between them. Six components across three layers of automation, and nobody could trace the full evaluation chain. The status was wrong, and every fix risked breaking something else.

That was when we knew we weren't going to fix Salesforce. We were going to replace it.

What Salesforce Was Actually Doing

This wasn't a CRM. It was an operational system — vendor management, compliance tracking, insurance verification, and onboarding workflows — running on a platform designed to track leads and close deals.

The numbers: 1.5 million records across 51 custom objects. 9,500 vendor accounts. 608 active business-logic components, including 37 Flows, 15 Triggers, 387 Apex classes, 132 Lightning Web Components, 33 batch jobs, and 90+ formula fields.

Only 12 of those 37 Flows were active. The other 25 were marked obsolete but still deployed, like landmines nobody dared remove.

The Account object did triple duty for clients, vendors, and insurance brokers. Every rule had to ask what kind of account it was before doing anything.

We were paying north of $200K a year for a tool that had become the most expensive spreadsheet in the building.

Why We Didn't Stay

Conventional wisdom says to fix what you have: hire a better admin, refactor the Flows, clean up Apex. We considered it.

But implementation quality wasn't the root problem. Salesforce's data model didn't match the business domain. Better Flows cannot fix Account polymorphism or make scattered, order-dependent compliance logic deterministic.

The cost of staying wasn't just licensing. It was the three-month estimate for every feature, logic nobody could explain, and manual workarounds created because the automation didn't automate.

What We Built

We replaced 608 Salesforce components with a 12-bounded-context system on commodity open-source infrastructure: PostgreSQL, FastAPI, React, Temporal, Celery, and Redis.

The compliance engine became a single pure-Python evaluator using CEL for conditional rules. One file. Testable in isolation. Deterministic. It produces structured gap reports explaining exactly why a vendor is non-compliant.

Every architecture decision is documented in 37 ADRs, because the next team shouldn't have to reverse-engineer this system the way we reverse-engineered Salesforce.

The migration moved 509,000 records through an eight-wave ETL pipeline. Every wave is idempotent, transactional, and validated with row counts, foreign-key checks, and business-rule assertions.

More than one million lines of Salesforce export were analyzed to map the full dependency graph.

The Hard Parts

I'll be honest about what nearly broke us.

The junction-table problem. We expected client-vendor relationships in the junction table. It held two records. The actual 9,518 relationships were hidden in an Account lookup field. Missing that would have launched the system without 99.98% of its relationships.

Formula fields as truth. Formula fields look like data, but they are computed values. We had to reverse-engineer 90+ formulas to recover the intended business rules and implement them as explicit, testable code.

Encrypted field migration. Tax IDs, payment data, and W-9 information needed application-level encryption. A staging-first architecture held plaintext only during migration, encrypted it on flush, then truncated staging tables.

The “obsolete” Flows that weren't. Three of 25 obsolete Flows were still triggered by other automation. Removing them would have broken compliance updates for about 800 vendor accounts. We found them by tracing every execution path.

The Outcome

The new system has 4,000+ backend tests at 98% coverage. The formerly unexplainable compliance engine now returns a structured report in milliseconds. Features that took three months now take days.

The migration pipeline is a tool, not a project. We dry-ran it dozens of times before a discrete cutover instead of operating two systems for 18 months.

Salesforce licensing disappears entirely. The new system runs on standard Docker infrastructure deployable to any cloud.

The full build — schema, ETL, compliance engine, workflows, frontend, and tests — took roughly 30 working sessions. Not 30 months. 30 sessions.

Should You Do This?

Not everyone should. If you use Salesforce as a CRM for pipeline, forecasting, and opportunities, stay where you are. That's what it was built for.

But if you recognize your situation below, we should talk:

  • You have 20+ custom objects and every change takes months
  • Your business logic is spread across Flows, Apex, formulas, and batch jobs, and nobody can explain the chain
  • You're paying per-seat pricing for an operational tool that isn't a CRM
  • Your vendors or partners need a real portal, not Experience Cloud
  • Your Salesforce org is technical debt everyone is afraid to touch

The sweet spot is companies with 50–500 employees and $150K–$800K in annual Salesforce spend, in regulated B2B industries where compliance or vendor management is a core process.

Start with a fixed-price, read-only Salesforce Operational Audit. It maps the org, traces critical dependencies, and gives you an honest feasibility report — valuable even if you do not migrate. Book a 30-Minute Assessment

We've done this. We have the patterns, pipeline architecture, and scar tissue. Your migration doesn't have to be an 18-month odyssey.

Ready to explore migration?

Start with a fixed-price Salesforce Operational Audit.

Book a 30-Minute Assessment Call