All postsCustomer story · 8 min read

Salesforce migration case study: 500 users, 4 months, code they own

Leaving an entrenched CRM is the migration everyone postpones. Here's how a 500-user enterprise moved off Salesforce onto code they own — in four months.


A Salesforce migration is the project teams put off for years. The data model is deep, the workflows are load-bearing, and the switching cost is exactly what keeps the renewal invoice coming. This is the story of a 500-user enterprise that decided the lock-in had become the bigger risk — and moved off Salesforce onto Dual7 in four months, onto code they now own outright.

Why they decided to leave

The pattern will be familiar to anyone who has run a CRM at scale: costs that rose every renewal with no leverage to push back, a roadmap they didn't influence, and a system that increasingly fit the vendor's business better than their own. Customization meant more proprietary configuration — which meant deeper lock-in, not more ownership.

What they wanted on the other side wasn't simply a cheaper CRM. It was software they controlled: their data model, their workflows, in a standard codebase they could read, extend, and host themselves.

How the migration worked

Rather than a single high-risk cutover, the rebuild went feature by feature — the unit Dual7 is designed around. Each core object and workflow was vibe-coded fast to match the existing behavior, then certified through the seven agents before it went live.

  • Core objects (accounts, contacts, opportunities, activities) were modeled in multi-tenant Postgres with row-level security from the start.
  • Role-based access mirrored the org's existing permission structure, enforced at the data layer.
  • Workflows and approvals were rebuilt as certified features, each with an audit trail.
  • Integrations to the surrounding stack were re-established with typed clients and proper secret handling.
  • Every certified feature shipped into a repository the team owns and can export.

Why governance mattered here

For a system of record holding customer data, the controls weren't optional. Because tenant isolation, RBAC, audit logging, and human sign-off are defaults of Governed Mode rather than features to bolt on, the security and compliance requirements were satisfied as a by-product of how the app was built — not as a separate workstream.

Where they landed

Live in production today, serving 500+ users, on a codebase they hold in full. The numbers that mattered to them were simple: four months end to end, and 100% of the code owned and exportable. No runtime they rent, no backend they can't touch — and no vendor who can dictate next year's price.

Build fast with AI. Own forever with architecture you control.

The lesson isn't that migrations are easy — it's that the thing making them hard, lock-in, is also the strongest reason to do them. Rebuilding on owned code turns a recurring liability into an asset you control.

Build once. Own forever.

Vibe-code at full speed. Certify the features that ship. Same project, no rebuild.