Do we need

segments?

Jan (John) Linhart

Principal Software Engineer at

@john on Slack

Council, Security and Product team member at

"Ideas are like ghosts—once awakened, they never go to rest."

Plato

Chat GPT

What is a segment?

All contacts

Active contacts

Czechs

Active Czechs

Problem 1

Repeated work

Problem 2

Complex queries

SELECT
    count(leadIdPrimary) count,
	max(leadIdPrimary) maxId,
    min(leadIdPrimary) minId 
FROM (
	SELECT
    	DISTINCT l.id as leadIdPrimary 
    FROM leads l 
    WHERE (
    	(
        	(l.country = 'Czech Republic')
            AND
            (l.last_active >= '2024-11-04 10:37')
        ) OR (
            (l.country = 'Slovakia')
            AND
            (l.last_active >= '2024-11-04 10:37')
        )
    ) AND (
        l.id NOT IN (
            SELECT par4.lead_id 
            FROM lead_lists_leads par4 
            WHERE par4.leadlist_id = 3
        )
    )
) sss

Splitting contacts into batches

SELECT
	count(leadIdPrimary) count, 
    max(leadIdPrimary) maxId, 
    min(leadIdPrimary) minId 
FROM (
	SELECT 
    	DISTINCT orp.lead_id as leadIdPrimary, 
        orp.lead_id as id, 
        orp.leadlist_id 
    FROM lead_lists_leads orp 
    WHERE (orp.leadlist_id = 3) 
    	AND (orp.manually_added = '0') 
        AND (orp.lead_id NOT IN (
        	SELECT l.id 
            FROM leads l 
            WHERE (
            	(l.country = 'Czech Republic') 
            	AND
                (l.last_active >= '2024-11-04 10:38')
            ) OR (
            	(l.country = 'Slovakia') 
                AND
                (l.last_active >= '2024-11-04 10:38')
            )
        )
    )
) sss

Removing old contacts

Problem 3

Unnecessary rebuilds

Cron jobs

bin/console mautic:segments:update
bin/console mautic:campaigns:update
bin/console mautic:campaigns:trigger

Problem 4

Duplicated data

Contacts in a segment

bin/console mautic:segments:update

Contacts in a campaign

bin/console mautic:campaigns:update

Problem 5

Massive codebase

20%

of Mautic files contain

list or segment

Segment Problem Recap

  1. Repeated work
  2. Complex queries
  3. Unnecessary rebuilds
  4. Duplicated data
  5. Massive codebase

What to use instead?

Not ideal

Campaigns conditions

Segment

filters

over

Campaign features

Segment

features

Segment features are a subset of campaign features.

1. Repeated work?

Event based source(s)

2. Complex queries?

Event based source(s)

2. Complex queries?

SELECT
    count(leadIdPrimary) count,
	max(leadIdPrimary) maxId,
    min(leadIdPrimary) minId 
FROM (
	SELECT
    	DISTINCT l.id as leadIdPrimary 
    FROM leads l 
    WHERE l.date_modified >= '2024-11-04 10:42' # last campaign rebuild date
      AND (
        l.id NOT IN (
            SELECT par4.lead_id 
            FROM campaign_leads par4 
            WHERE par4.campaign_id = 3
        )
) sss

3. Unnecessary rebuilds?

Contact

Changes

Added to campaign

Campaign executes 

Contact removed from the campaign

Delays

Wait for

4. Duplicated data?

bin/console mautic:campaigns:update
bin/console mautic:segments:update

Segment members

Campaign members

4. Massive codebase?

What would you do

with free Fridays?

20% less code

There is more

Segments/Tags/Categories

Dynamic Email Content

Dynamic Email Content 😞

What is what?

Change order?

More than 6?

Manage by API?

Duplicated code

Dynamic web content

Why not use it in emails as well?

What is what?

Change order?

More than 6?

Manage by API?

Duplicated code

Point Actions

Point Actions

Point triggers

Point triggers

Form Actions

Form Actions

Mautic evolution

Mautic 4

Mautic 6

Mautic 5

The idea

= simpler to learn/use

= easier to maintain

= cheaper to host

Reduce duplicated

features in Mautic

deck

By Jan Linhart