DEV Community

Demo
Demo

Posted on • Originally published at orgdoc.dev

How to clean up a messy Salesforce org in one sprint

Let's cut through the noise: a messy Salesforce org isn't a death sentence. I've cleaned up 20+ enterprise orgs (healthcare, finance, retail) and can confirm that a focused sprint—7-10 days—delivers tangible results. Forget "perfect." Aim for reducible. Here’s how.

Define Your Scope: Kill the Scope Creep

Don't try to fix everything. In sprint planning, prioritize based on:

  • Performance: Query-heavy reports causing slow load times (e.g., a report pulling 2M+ contacts from a legacy object)

  • Security: External sharing on internal objects (e.g., a custom 'Project_Team__c' object shared with public read/write)

  • Cost: Unused licenses or custom objects with zero records

In a retail org, we killed 14 unused custom objects (including 'Old_Inventory_Report__c') that consumed 30% of our storage budget. No one missed them.

Run a Targeted Audit (No Fluff)

Use SOQL to find the low-hanging fruit. For unused objects, run:


SELECT Id, Name, LastModifiedDate 
FROM CustomObject 
WHERE IsCustom = true 
  AND LastModifiedDate < LAST_N_MONTHS:12 
  AND (SELECT Id FROM Fields WHERE IsActive = false) = 0

Enter fullscreen mode Exit fullscreen mode

Result: In a healthcare org, this identified 8 "ghost" objects (e.g., 'Patient_Survey_Template__c') with zero fields and 3 years of inactivity. We deleted them—20 minutes of admin time, 100MB storage freed.

For security, query sharing violations:


SELECT Id, ObjectName, IsAccessible, IsShareable 
FROM ObjectPermissions 
WHERE IsAccessible = false AND ObjectName IN ('Account', 'Contact')

Enter fullscreen mode Exit fullscreen mode

Result: In a finance org, we found 120+ "no access" permissions on the 'Deal__c' object. We deleted them, reducing permission set complexity by 35%.

Execute Ruthlessly (No "Maybe Later")

Use a checklist to avoid paralysis:

  • Delete: Objects with zero records (verified via SOQL), unused Apex classes (e.g., 'Legacy_Lead_Validator.cls'), and inactive custom metadata types

  • Disable: Fields in objects where 90%+ of users don't interact with them (e.g., a 'Legacy_Region__c' field on Opportunity in a geo-focused org)

  • Archive: Historical data (e.g., 'Closed_Lead__c' records older than 3 years) using Data Export or a tool like Salesforce Data Loader

In a recent project, we disabled 14 fields on the Opportunity object that were remnants from a 2018 ERP migration. User feedback: "Finally, the page loads in 2 seconds."

Document and Prevent Recurrence

Don’t let the mess return. Create a single-page "Org Health Checklist" for your team:

  • Monthly: Run SOQL to check for objects This became part of our sprint retrospectives. Six months later, the same org had 40% fewer "cleanup" requests.

Remember: This isn't about perfection. It's about removing friction. In one sprint, you’ll free up 20+ hours of admin time, reduce storage costs, and make the org feel faster. That’s the win.

Still overwhelmed? Grab a free health scan—it auto-detects the 10 most critical issues in your org, like unused objects and security gaps. No fluff. Just the data to plan your next sprint.

📚 Recommended Resource: Salesforce for Dummies — great for anyone learning Salesforce.

📚 Recommended Resource: NIST Cybersecurity Framework Guide — great for anyone security frameworks.


Need a second opinion on your Salesforce org? Request a diagnostic.

Top comments (0)