I understand that a protocol can emit events for any of the following reasons:
- Make it easier to do a data migration in the future (ie, copy-pasting storage mappings is much easier with events)
- Store data that a smart contract doesn't need to access in a cheaper location than storage
- Allowing indexing services to index such data
- Allow front ends to listen for updates
But, is there a hard-and-fast rule for exactly when you should emit an event?