Journeys work hard for you—sometimes, a little too hard. 😅 Maybe you’re noticing a lot of users stuck in one tile, or some of your journey campaigns are sending more slowly than expected.
Here are some tips and tricks for making your journeys run as efficiently as possible.
In this article
- Evaluating journey performance
- Choose a streamlined audience list
- Add entry rules to the Start tile
- Combine chained User Profile tiles and Yes/No Split tiles
- Simplify your filter tiles
- Check what kind of lists you're using (if applicable)
Evaluating journey performance
It’s important to understand how to evaluate journey performance so you can determine whether there may be something you should do to improve it.
One way to see how a journey’s performing is to look at the user badge on a tile, like this one, which displays the number of users who are currently finished with that tile and are waiting to move on to the next one. A high user count might be a result of normal journey processing, or it might indicate there's something to address to improve a journey's performance.
When you see that users are waiting on a tile, consider the possible causes. For example, you may see this on a delay tile because users are waiting for the delay to expire. In other cases, if a significant number of users are added to a journey at the same time, you may just need to wait for the journey to finish processing the queue.
In the event that you see user counts that don’t decrease after refreshing the journey page, consider these other factors that might contribute to slower journey performance:
- The number of filter tiles in the journey
- How your filter tiles are set up
- The size of the lists you may be using in the Start or filter tiles
- Whether you're using static or dynamic lists in the Start or filter tiles
Here are some tips to keep your journeys running smoothly.
Choose a streamlined audience list
If you're using the Schedule entry source, one of the best ways to prevent journey slowdowns and potential deliverability issues is to select a streamlined audience list in the Start tile. Instead of adding many users to the journey and relying on filter tiles to remove ineligible users afterwards, select a list that only includes your desired audience for the journey. The upfront effort of creating a new list or filtering down an existing one will reduce unnecessary traffic in your journey and ensure eligible users move through it in a timely fashion.
Add entry rules to the Start tile
If you're using either the Event occurs, API call, or Other journey entry source, consider setting up entry rules in the Start tile to ensure that only your desired users enter the journey. This is much better for journey performance than allowing ineligible users to enter the journey and filtering them out afterwards.
Combine chained User Profile tiles and Yes/No Split tiles
Sometimes in a journey, you may want to make several updates to a user's profile at once or run multiple Yes/No checks before the user moves on to the next step of the journey. Instead of adding several User Profile or Yes/No Split tiles in a row, using a single User Profile or Yes/No Split tile — containing multiple filtering criteria or update calls — can reduce the load on your journey and prevent slowdowns.
COMING SOON — Improved Subscription Preferences tile
The ability to set up multiple subscription updates within a single Subscription Preferences tile will be available in an upcoming December 2023 release. If you don't see it yet, look for this update in the next few weeks!
Simplify your filter tiles
Filter tiles are incredibly powerful — but if they're not set up efficiently, they can take a lot of processing time and slow down your journey's performance.
Choosing the right comparator
When you add a filter to a journey, you'll want to pay attention to the types of comparisons you set up in your segmentation query.
There are six different options for setting up comparisons:
Is Set: A value has been set for the field (the field is not blank)
Equals: The field must exactly match the value you select
Does Not Equal: The field must NOT match the value you select
Starts With: The field must start with a certain word or phrase
Contains: The field contains a certain word or phrase
Matches Regex: Compares the field to a regular expression (RegEx) to find every instance of the same value (including all formatting variations)
Some of these comparators work better than others for building efficient queries:
|✅ Is Set
|❌ Starts With
|✅ Does Not Equal
|❌ Matches Regex
For example, to search for users whose email addresses match a particular
domain, use the
Equals operator, like this:
Don't use the
Contains operator. This query takes longer to run and could slow
down your journey performance.
Setting up event-based searches
Refining an event-based search (for example, searching for exactly 1 SMS open) adds to the intensity of your segmentation query. If you decide to do this, be strategic about how you set it up.
Let's say you want to search for users who have opened an email at least twice. Instead of setting up a query that checks for 2-5 opens, check for 2-infinity.
It may seem counterintuitive, but this is actually a shorter search—this tells Iterable to stop checking as soon as it finds 2 opens for a user. If you search for 2-5 opens, Iterable will keep searching until it can tell if the user opened the message 2, 3, 4, or 5 times.
Searching custom events vs. user profile fields
Segmentation queries that search user profile fields generally run faster than queries that search for custom events. When possible, set up queries to search user profile fields instead of custom events.
If you need to filter by a custom event, your segmentation query will run faster if you use the Only the event that triggers this journey option. If you select All user properties and events, your query will search every past event in your project, which may take longer.
Check what kind of lists you're using (if applicable)
If you're noticing slower performance than you expect in one of your journeys, it could be because of a list you're using in the Start tile or a filter tile. In the Start tile, you can select a list to add users to the journey (using the List Subscribe, List Unsubscribe, or Schedule entry source). And in filter tiles, you can check whether or not users belong to a particular list by searching for Contact Property > List Membership. If you're using a large or complex list in one of these places, it can impact processing times.
When you use Iterable's Segmentation tool, you can save your results as either a static or dynamic list.
Static lists include all users that match the segmentation query when the list is saved. Dynamic lists periodically refresh the results of the segmentation query, providing an up-to-date set of users. You can also build dynamic lists from other dynamic lists (this is called a nested dynamic list).
Just like filter tiles, dynamic lists are a powerful tool. But if your segmentation queries use overly complex search/filter logic, it can lead to performance slowdowns.
For optimal journey performance:
- Use static lists whenever possible.
- Avoid nested dynamic lists.
- Keep the segmentation queries that build your dynamic lists simple, especially for lists that will be used in journeys that run frequently. For example, if you have multiple groups of criteria in your segmentation query, remove any that may be repetitive.
To learn more about using dynamic lists in journeys, see Optimizing Dynamic User Lists.
For help troubleshooting one of your journeys, see Journeys: Frequently Asked Questions or reach out to your customer success manager.