Chapter 3
The Hidden Complexity
Salesforce exits fail for one reason above all others: organizations underestimate what "getting the data out" actually means. Here's what makes it hard.
Relationships Are the Real Challenge
Your data doesn't exist as flat tables. Accounts have Contacts. Contacts have Activities. Opportunities have OpportunityLineItems which reference Products and PricebookEntries. Break one relationship and you lose referential integrity across the entire chain.
A typical enterprise org has 200+ lookup and master-detail relationships. Some are 4-5 levels deep. They all need to be mapped, extracted in the right order, and re-established in the destination system with new IDs.
Attachments Are Massive
Over the years, Salesforce has used three different file storage mechanisms: Attachments (legacy), ContentDocument/ContentVersion (modern), and Feed Attachments (Chatter). Most orgs have data in at least two of these. File extraction is slow (API limits apply), storage-intensive, and requires matching files back to their parent records.
We've seen orgs where attachments account for 80% of the total data volume but were barely considered in the exit plan.
History Tracking Doesn't Export Cleanly
Field History Tracking records are read-only and only accessible via API. They can't be exported through Data Loader or Reports. If your compliance requirements mandate preserving field-level change history, you need specialized extraction—and you need to plan where this history will live in your destination system.
Automation Contains Business Logic
Every Flow, Process Builder, Apex trigger, validation rule, and workflow rule represents business logic that lives inside Salesforce. This logic doesn't "export." It needs to be documented, understood, and rebuilt in whatever system you're moving to.
The risk isn't forgetting the automation exists. It's not realizing that a validation rule from 2019 is the only thing preventing duplicate records, or that a trigger handles a critical integration handshake that nobody documented.
Picklists Define Meaning
Field values like "Active," "Closed Won," or "Board Member" only mean something because of how they're used in reports, automations, and user workflows. When you move to a new system, you need to decide: do you keep the same values? Map them to new ones? Consolidate? Every picklist field is a decision point.