Apex triggers on Contact and Account that normalize the address are the optimal way to implement this requirement. Apex triggers are the best option to perform logic on records before or after they are saved. Normalizing the address is a common logic that can be applied to both Contact and Account records, so it makes sense to have separate triggers for each object that perform the same logic. This way, the developer can avoid calling one trigger from another, which can cause recursion or dependency issues. The developer can also reuse the same code for normalizing the address by creating a helper class that is called by both triggers. Reference: [Apex Triggers], [Trigger Frameworks and Apex Trigger Best Practices], [Apex Code Best Practices]