Recently I was working with a client that had a large backlog of campaigns in its Marketo Campaign Queue. The backlog started with a large file upload, but the number of trigger campaigns and segment processing was the real cause of the slowdown.
I’ve been investigating ways to improve performance in any Marketo instance, and decided to share some best-practice design ideas that will help to improve Marketo performance.
A trigger runs the campaign when some event happens. A common trigger used by many organizations is “Lead is Created”. This means that if you have 200 new leads on a particular day, and 20 campaigns that trigger on a new lead being created, then you have 4,000 campaign runs that day.
If some of those campaigns can be run on a schedule, say once per night when the system is not being used too much, then the system overhead for peak hours can be reduced.
Some filters use Marketo’s log file to determine inclusion or exclusion of a lead in the campaign’s flow. For example, activity information that is not on a lead record, including email clicks or web page visits, can only be found in the log file. When these filters are used, Marketo must search through the log file to find its answers. This is time consuming.
Constraints can be used to limit the amount of searching. For example, a time frame like “Last 7 days” can tell Marketo how far back in the log to check, but it still has to read the log for the information.
Lastly, minimize use of Inactivity filters, including “NOT Clicked Link on Web Page” or “NOT Filled Out Form,” because these consume more resources. For example, a “Clicked Link on Web Page” filter will search the log until it finds a match. It will then stop. A “NOT Clicked Link on a Web Page” filter has to search all the way to the end of the log (or until the end of the date range if a constraint is used) to determine that the activity did not happen.
While anonymous leads cannot become members of a program, Marketo campaigns can still trigger on anonymous leads. There are usually many more anonymous leads than known leads, so filtering out the anonymous leads with an “Is Anonymous” = FALSE filter will suppress the trigger for those leads–resulting in fewer resources being consumed.
Smart Lists are database queries that are executed when the campaign is run. A smart list with many complex filters will take longer to find the solution set than a smart list with fewer, or simpler, filters.
Nested smart lists, where one smart list calls to another smart list, will be especially resource intensive. These should be avoided whenever possible.
When using hundreds of values in a filter, divide campaigns into smaller campaigns that use fewer values in the filter
Marketo’s flexibility is a blessing for Marketers trying to solve complex problems, but it can also be a curse when poorly designed programs and campaigns become widespread. When there are multiple ways to solve a problem, the first solution may not always be the best.
We will discuss other Marketo performance enhancing design ideas in future blogs. Stay tuned.