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
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.
# Reviewing journey performance recommendations
There are some common scenarios that can slow down journey performance, and Iterable can detect and auto-correct some of these issues in the Review panel.
To easily access recommendations for improving journey performance, enter a journey in Draft view and click the Review button in the top-right corner of the journey canvas. This opens a panel that displays a list of issues that need addressing before your journey can be published, and a list of performance recommendations based on the current state of your journey.
Currently, there are two recommendations that Iterable can detect:
- Combine your first Yes/No Split tile with the Start tile
- Combine linked Subscription Preference Tiles
Not all journeys will have performance recommendations in this panel, and new suggestions may be added to the panel in the future.
# Combine your first Yes/No Split tile with the Start tile
Iterable makes a recommendation to combine your first Yes/No Split tile with the Start tile sometimes if you're using the Schedule entry source. Instead of adding a Yes/No Split tile immediately after the Start tile, you can combine the two tiles into one.
By applying the recommendation, you'll move the Yes/No Split tile's criteria into additional entry criteria that define the Start tile's audience, or into a dynamic list. Iterable only creates a dynamic list when it's necessary because of the criteria for the filter tile it's coming from.
This way, you can set up your audience criteria in the Start tile and immediately filter out users who don't meet the criteria. This improves journey performance by reducing the number of users who enter the journey and need to be filtered out later.
# Combine linked Subscription Preference Tiles
This change can be helpful when Subscription Preference tiles in a sequence can logically be combined. For example, if a journey asks users to update their subscription preferences for multiple channels, you can combine these tiles into one.
This recommendation doesn't apply when you have different actions for each Subscription Preference tile, such as subscribing and unsubscribing, or when subscription preferences are set up for different subscription types (such as channel vs message type).
# Choose a streamlined audience list
To prevent journey slowdowns and potential deliverability issues, when you're using the Schedule entry source, select a list that includes only the desired audience for the journey.
Creating a new list or filtering down an existing one is more efficient than adding many users and removing them afterwards.
# 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 target audience enters the journey. This is much better for journey performance than allowing ineligible users to enter the journey and filtering them out afterwards.
To set up entry rules, open the Start tile, select one of the above entry sources, and click Add additional entry rule. The segmentation query builder will open, where you can set up your desired parameters.
# 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.
# 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 Yes/No Split tile to a journey, you'll want to pay attention to the types of comparisons you set up in your segmentation query. To learn about the different comparators and which ones work best for each use case, see Segmentation Reference.
# 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 user data versus event data
Segmentation queries that search for fields stored on user profiles generally run faster than queries that search for data fields from events. When possible, set up queries that search for user data fields instead of event data fields.
If you need to create a query that uses data from a custom event, it will run faster if you select 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.
# Questions?
For help troubleshooting one of your journeys, see Journeys: Frequently Asked Questions or reach out to your customer success manager.