Welcome back to another session of Power to the Power Users! In this series, we explore some common questions that pop up when taking the next step beyond becoming a Marketo Certified Expert and becoming a seasoned architect.
Last time around, we started talking about filter-level steps you can take to make your Smart Lists faster and more efficient. The natural follow-up question to that, though, is: how do I use that knowledge with multiple filters?
Filter combinations are one of the harder skills to master when it comes to using Marketo, because it's often not something we have to think about—after all, as long as you have all your criteria set out, you should be fine, right? Unfortunately, slow Smart Lists come back to haunt you when doing complex work. At the same time, this topic can be difficult to talk about, so I've grabbed a couple of examples from real-world users; we'll take a look at these and see how we can apply what we've learned to make speedy queries.
Once you've determined how to most effectively select your individual filters, you'll need to combine them together—after all, how often do you have just one filter in a Smart List? However, we'll want to take some of the same concepts from SQL best practices and use them here as well to maximize performance.
When you use multiple filters together, they're evaluated in order to constrain down to the list you're looking for. For example, if I have three AND filters for:
- Mailable Segment is Mailable
- Region Segment is LATAM
- Annual Revenue is greater than 100,000,000
This will, in turn, cause the query to:
- Select every record that has the Mailable segment as Mailable
- From that first selection, select the subset that has their Region Segment as LATAM
- From that subset, select the second subset that has Annual Revenue over 100,000,000
This makes the order that you place your filters in important, even if you're selecting ANY or ALL in your logic—because this will define how big or small your subsequent subsets are, and thus how long they'll take to evaluate. That generally means you'll want to:
- Place your fastest filters at the top of your filter lists, since they'll narrow down records faster than your slower filters.
- Choose fast filters that will narrow down more records first. For example, if you want to target people whose first name is Marina and live in Latin America, it makes more sense to go "First Name is Marina, Region Segment is LATAM", because statistically, there are probably fewer records with the first name Marina than are in your LATAM segment. Let's say you had 100 LATAM records, 8 Marina records and 4 Marinas in LATAM. Going from 8 Marinas to 4 Marinas in LATAM takes less time to process than going from 100 Latin Americans to 4 Marinas in LATAM.
- Avoid using nested Smart Lists whenever possible. A nested smart list is a filter using "Member of Smart List is [your list here]", and is a non-SARGable filter on steroids: first, Marketo must process everything in that Smart List to proceed to the next filter in your Smart List. Instead, either try to recreate the Smart List's criteria inside your Smart List or look at using segmentation or a special field if it's a recurring audience.
- Try to avoid using a lot of filters or complex groupings of filters when possible. While there is no hard and fast rule of "over X amount of filters will cause issues," it's worth examining why complex filters are being used—and if such combinations would be better served with static lists, segmentations, special fields, or other ways of consolidating who you're looking for.
- Custom objects are handled a bit differently in Marketo's architecture than other core Marketo items—person data, company data, activity data, and such—and as a result, have different performance levels than standard items being queried. The closest analog these filters have to traditional queries are inner joins in SQL, and so some of the same cautions apply. These should be treated as the slowest filters and placed as the last part of your filter criteria.
With all these rules in mind, how do you translate them into a faster Smart List? Let's take a practical look at this example:
Now, if we apply our rules here, we notice a few things immediately:
- There are "Member of Smart List" filters inside this filter, which causes slowdown
- There are Smart Lists that are mutually exclusive and could be broken down to an ongoing segmentation--Mailable and Bounced
- There are "Member Not in List", which is not a SARGable filter
- The filter order is inefficient
How would we fix this?
- Make a Mailable Segmentation (which removes Filters 2 and 4, as well as optimizes them from being Smart Lists).
- We can convert the criteria for "Newsletter Subscribe", which checks for people filling out newsletter subscription forms, into a Marketo-only field.
- Suppliers and HR Candidates likely can also be grouped into a Segmentation or share a field called "Record Type" to streamline the search
- We can reorganize this list to constrain records more effectively
The resulting Smart List would look something like:
- Mailable Segmentation is Mailable
- Newsletter Subscription is false
- Record Type is not Suppliers, HR Candidates
- Member of Program is False for "Make the Case for Content" with certain progression statuses
- Member of Program is False for "Active Play in Engagio" with "Added to Play" status
This setup is faster with the side effect of being easier for the marketer to read/understand as well as being simpler to create and iterate as needed. However, this is a straightforward example. What happens when we apply these same rules to a more complex query? Let's take a look at another example:
There's a lot to unpack in this list, but the following actions can be taken:
- Commit to good data hygiene and standardize Billing Country/Country values to consistently be some form of "United States" or "US" based on naming conventions.
- Group Job Category and Job Title together in a segmentation or in one field, as in this company's case the two are never conflicting values—they're just stored in different places and not every record has one or the other filled out. Again, this may also be solved with data hygiene.
- The filters for Corporate Activity Products and Company Name have multiple values, but can actually be distilled to use "Does not Start with" for 2-4 values each rather than the lists of "Is Not".
- The filter order is unoptimized, especially with a custom object "Has Sponsored Asset" and a Mailable segmentation out of order.
As this Smart List is today, it takes 49.86 seconds to process.
When we adjust this list to the following:
Advanced Filters: 1 and (2 or 3) and (4 or 5) and 6 and 7 and 8 and 9
- Mailable Segment is 'Mailable'
- Country is 'United States'
- Billing Country is 'United States'
- Job Title or Category Segment is 'IR'
- Corporate Activity Products is in (12)
- Vertical is 'Corporate'
- Account Type is not 'Consultant'
- Company Name is not (29)
- Has Sponsored Asset is false
This takes the Smart List performance down to 15.68 seconds—less than a third of the time of the original lists. If you do further optimization by changing the Corporate Activity Products is in (12) to start with "Share" and Company Name to not starts with (4), this takes the search down to 7.57 seconds.
That's over 85% faster than the original Smart List. Ultimately, the list retrieves the exact same records, but it does so in a much more database-friendly way. You can see how this sort of tweaking and optimization can really add up over time—as these rules can apply to anything needing a Smart List, and thus all sorts of programs you build throughout Marketo.
I'd encourage you to take these practices to heart when building your own Smart Lists in the future. Start small—apply one or two concepts—then iterate from there to optimize your work.
Have any best practice questions you'd like us to tackle? We're here to deep-dive on subjects that give you definitive answers to the questions you've got on day-to-day work. Just shoot us an email at email@example.com or contact us here and keep an eye out—you may just find the answers here!
About the AuthorFollow on Linkedin More Content by Courtney Grimes