Do we need
segments?
Jan (John) Linhart
@jan_linhart on X
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
)
)
) sssSplitting 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')
)
)
)
) sssRemoving old contacts
Problem 3
Unnecessary rebuilds
Cron jobs
bin/console mautic:segments:update
bin/console mautic:campaigns:update
bin/console mautic:campaigns:triggerProblem 4
Duplicated data
Contacts in a segment

bin/console mautic:segments:updateContacts in a campaign

bin/console mautic:campaigns:updateProblem 5
Massive codebase
20%
of Mautic files contain
list or segment
Segment Problem Recap
- Repeated work
- Complex queries
- Unnecessary rebuilds
- Duplicated data
- 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
)
) sss3. 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:updateSegment 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
deck
- 66