• Ok, I have a problem with the approach from the word go, and it's this:

    "implement "ideal" auditing, where the app itself can recall all versions of the data that were ever entered into it;"

    *All* versions? 🙂

    You do realize this is physically impossible, yes? The storage requirements for a CRM system are already astronomical, and that's just for the *current* state of the data. Add in a requirement that you keep EVERY SINGLE CHANGE (presumably reversibly) and you've moved from engineering to magic.

    Given that, the rest of the approach is seriously suspect.

    Unless, of course, I misunderstood "all versions of data ever entered"...