You want to know the thing I have heard most frequently when talking to clients about their Salesforce instance?  Something along the lines of “I just want to start over…  but I want to keep all my data”.  I’ve heard folks over at Salesforce use the analogy, most recently at TrailheaDX, that a customer org is a bit like a soup and that everybody loves their soup, right?  Now imagine you take that finished soup and you’ve got a super refined palette and can pick out individual ingredients just by tasting it.  Maybe you say, I really like this soup but I really don’t like paprika in my goulash.  How would you go about removing paprika from a finished product?  You wouldn’t.  But clients still wish there was a way to undo something that one consultancy did, or that one rogue developer they hired, or that one sales guy who got their hands on an admin account and really, really shouldn’t have…

Fortunately, Salesforce provides some referential checks when you try to clean up (delete) items controlled through the metadata api.  If that consultancy used a managed package, you can typically just uninstall the whole shebang.  If you try to delete an object field, used in a workflow rule or an email template – salesforce won’t let you, forcing you to ‘de-reference’ first.  Many coders have become adept at both code surgery and data surgery, skills developed by necessity and often in those dark ages before Force.com.  There’s a fine line between ‘hack‘ and data/code surgeon and that line is drawn based on intent – let’s assume you’ve hired/contracted people who themselves have the best intentions as it relates to you and your company!  Now – here’s what SFDC says publicly about ‘resetting an org‘.  Distilled, their guidance is make a few exploratory ‘cuts’ to see if you can triage and repair and if that proves exceedingly difficult, call support or consider procuring a totally new instance… but, please, back up your data first.  The guidance I’d give any potential client is that you should not treat your org like a junk drawer, but instead you should treat it like you would your workbench in your garage.  Make sure there is method to organization and that you value regular audits and refactoring, as they help maintain order.  Whenever you wish to layer in new tools, think about how they fit in to your garage in the most efficient way – that might mean throwing out another tool or moving it over to another shelf.

Fast forward to a future that will be around in a few years.  The SalesforceDX (sfdx) framework allows for decomposition of metadata controlled assets (objects, etc) into their most fine-grained parts (for objects, this is a field-level file asset), the porting of those elements to/fro with scratch orgs and the ultimate recombination into (unlocked) packages that can then be installed into other scratch orgs (testing the install process) and ultimately in a sandbox for User testing.  With this, in conjunction with the use of a distributed version control system (dvcs), it is theoretically possible to ‘turn back time’, much like using a revert command.