I have done this in SPD by looping through the list once a day. Create a workflow that loops through each item in the list, and sends each email based on the date and then goes to sleep for 23 hours and 49 minutes.
Create another workflow for sending notifications, you can store the date when the first reminder was sent and can configure notification workflow to run everyday check when first reminder was sent if it was 3/5 days ago as per your choice, you can send a second reminder.
This is very basic requirement and here is to give you generic idea on how to implement.
Assuming you are on SharePoint online.
There are 2 options
Option 1. Create Microsoft flow with re-occurrence every day on timing like 9 AM, 4 PM and 6 PM, you need to implemented all your custom logic in flow to send on basis of your conditions like status is pending, ...
Create a flow that uses a timer as its trigger, and schedule the timer for once a day. After the trigger fires, have an action that gets the list items, filtered for the ones that need a reminder, and process those through a loop, sending the emails. Here is a microsoft doc that will walk you through the process of triggering a flow based on a schedule.
'Pause until' is unreliable and times out if the waiting period is long - this is what I have read, rather than experienced personally.
There are some good posts on this site already addressing this question & some answers that you might find useful - link1 and link2.
Possible alternative configuration
If it's a one-off task and the Reminder Date will ...
You can code a long running workflow that hits trigger points, or use a state machine to manage where in the process it lies. How difficult or cumbersome this is will depend on your particular version of SharePoint. If you are on 2013 - then 2013 workflows build thru VS work well for long running processes.
If you are on 2010 or 2007 than I would avoid ...
I may have to write in a parallel stage with the "Wait for change" action for Due date and the "Pause until" action until due date. Afterwards, you can determine if the change was made and go back to Stage 1 and wait again, or move onto the next stage.
You can write a workflow that runs on edit, pauses 24 hours, check conditions, and send a reminder. Then reset a flag which "edits" the item, relaunching the workflow. It's not the most reliable method, and you don't want to do this if you'll have large numbers of items this is running on. But with wss 3.0 you're fairly limited.
For that you need to create a site workflow. It will not be dependable on list items. Then you run it on schedule once a year. http://www.documentmanagementworkflowinfo.com/sharepoint-2013/sharepoint-designer-2013-create-start-site-workflow.htm
Your best choice would be to write a timer job. But if you can't, you could write a workflow that runs on create and on change. You would get the last modified date, pause until the day you want it send, send an email, and then restart the workflow.
To get a string representing day of week: Copy 2 characters from start of [Modified Date (as Long Date)] ...