Extend alongside, never inside Custom Apex and components live in your own namespace and call the package's supported surfaces. Nothing we write depends on the package's internals.
Prefer stable selectors Custom CSS targets the most stable selector available rather than a deep chain of generated markup — deep chains are what break on an otherwise harmless UI update.
Sandbox first, every time Package updates are applied and regression-tested in a sandbox before production. That requires a sandbox refresh discipline, which is a prerequisite we establish rather than assume.
A written regression checklist Each customization has a specific test in the upgrade checklist. "Test the forms" is not a checklist; "confirm the cross-field validation on the claims form still blocks submission" is.
A documented removal path Every customization records what it does, why it exists and what would need to change for it to be removed. Platforms catch up, and the register is how you notice when one has.
Periodic review The register is reviewed against current platform capability. Customizations that the product now does natively are retired rather than maintained out of habit.