Race Conditions in Workflows (Unexpected Behavior)
While rare, a race condition is when two servers update the status of a contact within seconds of each other. One server updates the contact, and the other server overwrites the first one. This can result in duplicate messages or an action showing that it has been executed but does not reflect the contact. This can cause loop lockouts and other unexpected behavior to occur with workflows.
Please take a look at our Loop Lockout article, as it’s a related topic.
Common Race Condition causes:
- Multiple triggers for the same action
- Actions being executed at the same time for a contact
- Executions happening within automations for the same contact with similar timing
Example 1: Using both the Appointment Status and Customer Booked Appointment triggers to perform the same function will cause conflicts. Keep in mind that the Customer Booked Appointment trigger is deprecated, and you should use the Appointment Status trigger.
Example 2: Using opportunity changes and appointment triggers in the same workflow that fires off simultaneously.
Example 3: A contact tag being added at the same time in multiple workflows.
How do you know it's a race condition?
- Investigating workflow execution History/Status + Time and finding issues based on similar timing
- Repeating the same process and the tag is being added without it reflecting in the cont
- Duplicate messages and workflow history reflect a different trigger than intended due to timing
- Unexpected behavior due to timing
Example 1: A Contact tag trigger firing off instead of an appointment trigger because they are in the same workflow and happened at a similar time.
Example 2: You are adding the contact to a workflow with a tag, but you also have other workflows that will fire at the same time for the same contact. Using a Contact tag trigger and then expecting the appointment data to display correctly in an email using custom values. (Membership and Appointment custom values are dependent on their related triggers)
How can I prevent them from happening?
- Adding a 2 minute Wait step above the race-affected actions will allow the system to process the action correctly
- Do not use the same trigger or similar triggers on one/multiple workflows for the same actions
- Be specific with your filters and keep in mind the action the lead would take and how the workflow would fire when that happens.
- Do not use unspecific and similar triggers in one/multiple workflows
- Pay attention to the timing and watch out for triggers firing at the same time
- Use the PASS INPUT TRIGGER PARAMETERS with the Add To Workflow action when adding to another workflow when attempting to pass in values and data
Unexpected Behavior
- An execution showing that it happened in the workflow, but it does not reflect in the contact card
- Loop Lockouts
- Duplicated messages sending
- Multiple workflows firing off unexpectedly
- Membership or Appointment information not populating or displaying undefined in a message
Best Practices and Troubleshooting
- Check Enrollment History and Execution Logs inside the workflow
- Check the Added to Workflow execution in the workflow and the action details, especially regarding timing
- Add a wait step of 2 minutes before actions that may cause conflicts to offset these issues
- Pay attention to the timing and watch for triggers firing at the same time
- Get more specific with your filters as an example filter for a specific calendar when using appointment triggers
- Investigate multiple workflows that fire off the same or similar triggers that may fire at the same time when an action by the customer is taken
- Use unique trigger-to-action implementations instead of multiple workflows for the same actions
- If you need to pass data between workflows, remember passing data on to other workflows won't happen with an Add tag action and its related trigger in a separate workflow. Use the Pass input parameters toggle with the Add To Workflow action. This will take all the data in the workflow and pass it into the other workflow
- If you are using Zoom and see "undefined," Check that the Zoom user is integrated with their profile, and check if Zoom is added to the user's group calendar. After that, if race conditions apply, this may be due to the incorrect trigger adding a contact to the workflow.
- For appointments, use the Appointment Status trigger + correct filters, including STATUS
- Check added to workflow and what trigger was involved to know if data was passed correctly