Best practice for removing former admin user from all records, triggers and workflows?

I would suggest that best practice is typically to not re-assign ownership of all records across the board. The fact that a record is owned by a disabled user is not in itself a problem. If you're using that user as a generic "data admin" type user then I'd suggest you create a user for that sole purpose and re-assign all records to that, then you never have to worry about that user being disabled.

However I think you're asking about default workflow user, default case owner, portal admin, etc type settings whereby you can't disable the system admin user until you've re-pointed all of this configuration. Honestly I've been meaning to write a list of everything you need to change but haven't, so what I typically do is take the brute force approach. First change that user's email address to yourself. Second try to disable the user, you'll be warned that you can't for various reasons, fix each reason. Once disabled let the system do it's thing - since you changed the user's email address to your own you'll get notifications if any and then you can determine what else to change. Hope that helps.

Here's what I can think of off the top of my head:

  1. Default Workflow User
  2. Default Case Owner for Email2Case
  3. Default Case Assignment Rule user (if/as needed)
  4. Admin User for any Partner or Customer Portals
  5. You likely don't want to redeploy all Apex code, but to ensure uncaught Apex exceptions are emailed to the new admin, change the old admin's email address to your own (the last modified by user for Apex is the user that gets the emails)

You can’t use DemandTools to manipulate workflow rules or other processes (such as Web to Lead, etc...), just the records. For the records though, you can use Reassign Ownership and reassign the selected object and all the sub-objects, but there is no option to find ALL records on ALL objects owned by a single user at one time.

For example you can find all the Accounts owner by “Joe User” and reassign them and the related sub-objects to a new user or users. But you would need a separate pass for Leads and any other objects NOT related to the Accounts. Also, if the user could own Contacts, Tasks, Opps etc. on OTHER users Accounts then additional passes would be needed against those objects to find and reassign those etc.

Here is the link to the Reassign Ownership Help Docs:

http://help.crmfusion.com/DemandTools/default.aspx?pageid=Reassign_Ownership