Skip to main content

    Creative & Media: Photo Agency, 27 Years of History

    Twenty-seven years of agency history sat in a legacy Salesforce org held together by one shared login, and the business needed to move onto a supported edition without losing a record of how it had worked.

    Size
    5 users, 8 objects, 238,945 records
    Timeline
    7 weeks, plus 30-day support
    Layers touched
    4
    Records migrated
    238,945 at risk238,945 reconciled
    01 — GOING IN

    What the Business Looked Like

    A photo agency with twenty-seven years of operating history ran on a legacy Salesforce edition that was no longer sold. Access ran through a single shared login, roughly 150 reports had accumulated across the years, and around 77,000 legacy notes carried the institutional memory of the business. The move to a current edition had to happen, and the edition they were moving to was substantially more limited than the one they were leaving, with a hard ceiling of 25 custom fields per object and Contact already sitting near 20.

    02 — BREAKAGE

    What Broke and What It Cost

    An external ID field used as migration plumbing was required on create screens, so the team could not save new opportunities. 7,432 calendar events were invisible because import ownership landed on an admin login, 51,555 tasks carried the import date instead of real activity dates, and the Contact Roles picklist held Salesforce stock defaults instead of the 85 values the agency actually uses.

    Misconfigured required fields blocked the create screen, so work that was happening was not being recorded anywhere. A blank team calendar and import-stamped activity dates meant nobody could reconstruct what had happened when, and any careless remediation risked destroying the only record of a 27-year business. Internally there was already a voice arguing to revert to the legacy system, which made every unresolved fire an argument for going backwards.

    03 — BUILD

    What Was Built, in Dependency Order

    A documented and client-approved migration plan, a permanent full export locked as the recovery baseline, an import sequence with validation gates written into a build document, then a stabilization sprint that root-caused an encoding failure and a stale source export instead of patching symptoms

    1. 01Data-model audit, record counts, and field mapping
    2. 02Written migration plan approved before any data moved
    3. 03Import execution against a build document with validation gates
    4. 04Forensic stabilization, reconciliation, and client-side handoff
    04 — AFTER

    What Changed

    Five users on a supported edition at exactly five licenses with nothing over-purchased, calendars visible from every login, opportunities saveable, and every reconciliation closed against a named count.

    Ownership was reassigned off the admin login across roughly 128,573 records, ordered by object against the daily API cap. 51,555 activity dates were restored from source with an honest technical note about which timestamps cannot be backdated. 1,363 accounts were restructured in a single load after the field-options document was approved, moving geography out of the type field into a dedicated location field. The team runs it with an edition-limitations document, a self-serve picklist article, recorded walkthroughs, and passkeys enrolled for all five users with org-level MFA live.

    "The client reported 73 missing records. The diff found roughly 1,100, because the real problem was not the 73, it was the two-week-old export the migration had been built from."

    Client names are withheld. Industry, size, timeline, and metrics are drawn from engagement records.

    Other Engagements

    Medical Device

    Commercial-Stage Manufacturer

    Read case study
    Marine Services

    Dredging Contractor

    Read case study
    Legal

    Law Firm Membership Business

    Read case study

    This build started with a 30-minute call.

    System Builds and Migrations