As simple as the requirement can sound it might be tricky to create the most efficient and testable way how to notify your internal or external users/customers about upcoming Events, Campaigns or expiring Contracts.
The requirement I had in one of my projects was to send out 30, 14, 7 and 1 day(s) reminder before Campaign Event_Date__c (custom field).
Technically, we could go many routes here, but the most efficient, easiest to test and be sure that it will fire is a Workflow rule.
To achieve this functionality, I created a Workflow rule for every reminder. In the example below, you can see a Workflow rule that is firing every time it is 7 days to Event_Date__c.
And when I was setting up the workflow rule, I used formula as Workflow Criteria to make sure its meets both requirements i.e Status is 'Signed Up' for the event and it is 7 days till the event. Please see my formula below.
AND( ISPICKVAL(Status, 'Signed Up'),
Event_Date__c = TODAY()-7
Once this is setup, I have added an Immediate Actioon to fire an Email Alert.