Quantum · Technical CRM Executive

Stage 3 — Final Interview + Skills Task

Tue 21 Jul 2026 · 14:00–15:30 BST On-site · N5 2EF Panel: James Edwards + Nicola Barnett The gate for the offer
PassedStage 1

Talent Screen

Fit, motivation, logistics. Won on clarity.

PassedStage 2

Hiring Manager

James Edwards. Capability + working style.

You are hereStage 3

Final + Skills Task

Live task, on-site, two-person panel.

The one reframe that matters This stage verifies the claim you can't AI your way through. In Stages 1–2 you said "solid fundamentals, comfortable with SQL, I level up fast — including with AI." Tomorrow, in a room, probably with no AI, no Copilot, maybe no internet, they watch you do it. Tonight's job is not to learn SFMC cold — it's to be fluent enough to write a basic SQL audience, spot an Outlook HTML break, and reason through a broken journey unaided, out loud, calmly. The substance is already yours. This is reproducing it from memory and narrating.

1 The room — this is the big shift

James is a returning ally. Nicola is the person you need to win.

JE
Already in your corner
Technical CRM Manager · future boss
James Edwards

Interviewed you at Stage 2 and advanced you — he already believes you can do the work.

  • Don't re-pitch from scratch. Warm continuity: "Good to see you again, James."
  • With him: just do the task well and show you'll take load off his plate.
  • He reads: technical depth, how you work, calm under a live task.
NB
The one to win
CRM Director · senior stakeholder
Nicola Barnett

A level up, and wasn't in Stage 2 — this is her first impression of you. LinkedIn

  • She is not reading whether you can write a JOIN.
  • She reads: judgment, business impact, communication, "do I want this person on my team."
  • Aim your intro, first-90 thinking, and best questions at her.

2 Opening — Nicola wasn't there, so give her the 30 sec

"For context, since you and I haven't met — I'm an email/CRM technical specialist, ~10 years building personalised campaigns at scale for VW Group, O2, Virgin Media: multi-brand, multi-market, up to 3 million recipients. Most recently six years deep in Braze, which maps almost one-to-one onto SFMC, so I ramp fast. What I'm here to do is be the hands-on technical person who takes QA, troubleshooting, module-building and deliverability off the team's plate — and grows into the newer channels you're building, like SMS and WhatsApp."

Then to James, lighter: "And good to pick up where we left off."

3 Live-task playbook — how to perform it

They said it themselves: thinking > polished output. Make your reasoning audible.

The framework — say it, use it Clarify → Reproduce → Isolate → Fix → Verify → Document.
  1. Clarify first (never skip). "Before I start — can I confirm a couple of things?" Field names, what "active" means, the data model, edge cases. Signals seniority and stops you solving the wrong problem.
  2. State assumptions out loud. "I'll assume opt-in lives on the subscriber DE and opens are in the _Open data view — tell me if it's structured differently."
  3. Narrate as you build. Say why, not just what. Trade-offs, not just answers.
  4. Sanity-check at the end. Row counts, edge cases, "what I'd test before this went live."
  5. If stuck: think aloud, don't freeze. "I'd normally confirm this syntax against the SFMC docs — my approach would be…" Honesty about method beats bluffing.

The 4 likely task types + your line of attack

TaskFirst moveWatch-outs to voice
Write a SQL audienceConfirm field names + what "active"/"opted-in" mean, then buildApple MPP inflates opens → offer clicks as truer "active"; dedupe; sanity-check row count
Debug / build an HTML moduleAsk target clients (Outlook?), isolate the broken blockOutlook = Word engine: tables not flex, inline CSS, VML backgrounds, bulletproof buttons, mso conditionals
Debug a broken journeyClarify scope (who / since when), trace one failing contact end-to-endEntry/re-entry rules · decision-split default path · suppression lists · status (unsub/bounce/held) · missing field
Data-quality scenarioDefine what "good" looks like, then a repeatable checkPre-send checklist, seed sends, validate dynamic fields + fallbacks, peer review for big sends

4 Practice drills — do these unaided tonight

Reading these teaches nothing. Attempt each out loud, narrating your reasoning — then reveal. This is the single highest-value hour of prep.

Drill 1 — SQL audience from a plain-English briefSQL

"Build an audience of email-opted-in UK subscribers who opened ≥1 email in the last 30 days but have not purchased in the last 90 days — a re-engagement audience of active-but-not-buying users."

Say your assumptions, write the query, then close with judgment. Attempt before revealing.

Worked solution

Narrate: "First I'd confirm field names and where opt-in lives. I'll assume a subscriber DE, the _Open data view, and a Purchases DE. 'Has not purchased in 90 days' is an anti-join — a LEFT JOIN with an IS NULL check."

SELECT s.SubscriberKey, s.EmailAddress
FROM   Subscribers s
JOIN   _Open o          ON o.SubscriberKey = s.SubscriberKey
                        AND o.EventDate > DATEADD(day, -30, GETDATE())
LEFT JOIN Purchases p    ON p.SubscriberKey = s.SubscriberKey
                        AND p.PurchaseDate > DATEADD(day, -90, GETDATE())
WHERE  s.OptInStatus = 'true'
   AND s.Country = 'UK'
   AND p.SubscriberKey IS NULL          -- the anti-join: no recent purchase
GROUP BY s.SubscriberKey, s.EmailAddress

Close with judgment: "I'd sanity-check the row count, and because Apple MPP auto-opens inflate open data, I'd sanity this against clicks before treating it as 'engaged.'" — the anti-join pattern + the MPP caveat are what impress here.

Drill 2 — "What breaks this in Outlook, and how do you fix it?"HTML

Read the snippet, list what breaks in Outlook desktop, and say how you'd fix each.

<div style="display:flex; background-image:url('hero.jpg'); background-size:cover;">
  <div style="padding:20px;">
    <a href="#" style="background:#e2007a; border-radius:6px; padding:14px 28px; color:#fff;">Play now</a>
  </div>
</div>

Name the failure, then the fix. Attempt before revealing.

Worked solution — Outlook renders with the MS Word engine
  • display:flex → unsupported. Layout collapses. Fix: rebuild with <table> rows/cells.
  • background-image on a div → ignored. Hero disappears. Fix: VML (<v:rect>/<v:fill>) fallback inside mso conditionals.
  • Padding on an <a> → unreliable; border-radius ignored (square button, usually fine). Fix: bulletproof button — padding on the <td>, VML roundrect for Outlook.
  • General: styles should be inline; add mso conditional ghost tables for width control.

Say: "I'd isolate the block, swap flex for a table, add a VML background + bulletproof button behind mso conditionals, then confirm in Litmus / Email on Acid across Outlook versions. This is ten years of my daily work."

Drill 3 — "A welcome journey fires on sign-up. Most get it, but ~15% never receive anything. Where do you look?"Journey

Walk the debug path out loud. Don't guess a cause — trace.

Attempt before revealing.

Worked solution — trace, don't guess

Clarify: "Which 15% — random, or a segment? Since when? Did anything change?" Then walk one failing contact's path:

  1. Entry — are they actually entering? (landing in the source DE / firing the entry event, criteria met)
  2. Data — valid email? null SubscriberKey? missing a required personalisation field → send error (very common cause of a silent slice failing)
  3. Subscription status — unsubscribed / bounced / held / global suppression
  4. Suppression / exclusion lists on the send
  5. Decision split — a branch quietly routing them to a no-send / default path?
  6. Send config — throttling, send window, publication status
  7. Trace one known-failing contact end-to-end, fix, re-test, document so it can't recur

The £200 answer: the 15% is almost never random — it's a shared attribute (held/bounced, or a missing field breaking the send). Name that instinct out loud.

Drill 4 — "This DE of ~480k sends tomorrow. You didn't build it. What do you check first?"Data QA

Sample rows from the send DE — spot what you'd catch, and the repeatable check behind each:

SubscriberKey | EmailAddress | FirstName | OptIn | Country
1001          | jo@brand.com | Jo        | true  | UK
1002          | (null)       | Sam       | true  | UK
1001          | jo@brand.com | Jo        | true  | UK
1003          | maria@@web   |           | false | UK
1004          | lars@web.de  | Lars      | true  | DE

Name the catch, then the check. Attempt before revealing.

Worked solution — define "good", then a check that repeats

Frame it: "I never send from a DE I didn't build without my own QA pass — on 480k, one bad field isn't a typo, it's a deliverability and reputation hit." Then the catches:

  • 1001 duplicated → dedupe on SubscriberKey (GROUP BY/DISTINCT) so no one's mailed twice.
  • 1002 null email → filter nulls; a null send errors and can slice the batch.
  • 1003 maria@@web → malformed (double @, no TLD) → format validation.
  • 1003 OptIn = false → non-opted-in record slipped in → consent filter is non-negotiable (GDPR + reputation).
  • 1003 no FirstName → personalisation needs a fallback, or it renders "Hi ,".
  • 1004 is DE, not UK → wrong market in a UK send → confirm the audience / market filter.

The repeatable check: "Dedupe → null + format validation → opt-in/consent scrub → global unsub & suppression check → confirm personalisation fallbacks → seed/test send → and for this size, a second pair of eyes signs off. A checklist I'd want standardised, not done from memory." The £200 answer: the bigger the send, the more a process beats a spot-check — the QA-culture instinct Nicola is listening for.

Drill 5 — "Personalise the greeting by first name with a fallback, and show a VIP line only to gold-tier."AMPscript

The Braze-Liquid → AMPscript move — say that out loud, it is your transferability pitch.

Write the block, name the fallback. Attempt before revealing.

Worked solution — AMPscript, with the fallback that saves the send

Narrate: "In Braze this is {{first_name | default: 'there'}} with a Liquid conditional. In SFMC it's AMPscript — same muscle, different syntax. Declare vars, read the attributes, guard the empty case, then a conditional block on tier."

%%[
  VAR @name, @tier
  SET @name = AttributeValue("FirstName")
  SET @tier = AttributeValue("LoyaltyTier")
  IF Empty(@name) THEN SET @name = "there" ENDIF
]%%
<p>Hi %%=v(@name)=%%,</p>

%%[ IF @tier == "Gold" THEN ]%%
  <p>As one of our VIP players, here's an exclusive bonus for you.</p>
%%[ ENDIF ]%%

Close with judgment: "The bit that matters is the fallback — I'd test with a record that has no FirstName so I see the fallback actually render, and confirm nulls are caught by Empty(). Rendering 'Hi ,' to 480k is the classic embarrassing miss, and it's entirely preventable." Naming the Liquid→AMPscript equivalence + the fallback discipline are what land here.

Drill 6 — "From a Transactions DE with many rows per subscriber, build one row per subscriber = their most recent purchase."SQL+

A dedupe-to-latest problem — the second-most-common SFMC SQL task after a basic audience.

Say the pattern first, then write it. Attempt before revealing.

Worked solution — rank, then keep rn = 1

Narrate: "Latest row per key is a ranking problem — ROW_NUMBER() partitioned by SubscriberKey, ordered by date descending, then keep rank 1. SFMC Query Activities support window functions."

SELECT SubscriberKey, PurchaseDate, Amount
FROM (
  SELECT SubscriberKey, PurchaseDate, Amount,
         ROW_NUMBER() OVER (PARTITION BY SubscriberKey
                            ORDER BY PurchaseDate DESC) AS rn
  FROM   Transactions
) t
WHERE rn = 1

Close with judgment: "If two purchases share a timestamp I'd add a tiebreaker (e.g. , TransactionID DESC). This is the pattern that feeds 'your last order' personalisation."

Drill 7 — "Open rates halved this week and more mail is hitting spam. Diagnose it."Deliverability

A sudden cliff, not a slow decay — walk the diagnosis out loud. This is the ownership you most want.

Attempt before revealing.

Worked solution — start with "what changed?"
  • Recent changes first — new template / IP / sending domain / big volume jump / content shift. A cliff is almost always a change.
  • Authentication — do SPF / DKIM / DMARC still pass & align? A DNS edit can silently break DKIM.
  • Reputation & blocklists — check Google Postmaster + Microsoft SNDS; run the domain/IP against Spamhaus & co.
  • Volume spike — a sudden surge or a cold-list blast tanks reputation.
  • Content / spam traps — spammy copy, image-only, or an old list that hit a trap.
  • Engagement — mailing unengaged users drags inbox placement; tighten to engaged segments.

Say: "I'd lead with 'what changed this week', because a sudden drop is a change, not decay — then confirm auth and reputation. This is the deliverability piece I'm keenest to own."

Drill 8 — "Render the customer's 3 most recent transactions in the email from a related DE."AMPscript+

The pattern behind order confirmations & recommendations — a lookup, a loop, and an empty-state.

Attempt before revealing.

Worked solution — LookupOrderedRows → guard → loop

Narrate: "LookupOrderedRows to pull the top 3 by date, RowCount to guard the empty case, a FOR loop over Row/Field. Always an ELSE for the no-data path."

%%[
  VAR @rows, @row, @count, @i
  SET @rows  = LookupOrderedRows("Transactions", 3, "PurchaseDate DESC", "SubscriberKey", _subscriberkey)
  SET @count = RowCount(@rows)
]%%
%%[ IF @count > 0 THEN ]%%
  <table>
  %%[ FOR @i = 1 TO @count DO
        SET @row = Row(@rows, @i) ]%%
    <tr><td>%%=Field(@row,"PurchaseDate")=%%</td><td>%%=Field(@row,"Amount")=%%</td></tr>
  %%[ NEXT @i ]%%
  </table>
%%[ ELSE ]%%
  <p>No recent orders — here's what's popular right now.</p>
%%[ ENDIF ]%%

Close with judgment: "The discipline is the empty-state fallback — never render an empty table. In Braze this was Connected Content + a Liquid for loop; same shape."

Drill 9 — "Design a win-back journey for customers who haven't purchased in 90 days."Journey design

A build-from-scratch case — structure > detail. Sketch entry, splits, exits, and how you'd measure it.

Attempt before revealing.

Worked solution — entry → escalate → exit-on-convert → measure
  1. Entry — a scheduled SQL/automation populates a "lapsed" DE (no purchase 90d, still opted-in, not already in-journey); re-evaluate on a cadence.
  2. Message 1 — soft "we miss you", no discount yet.
  3. Wait ~5–7 days → decision split — purchased/engaged? If converted → exit.
  4. Message 2 — a real incentive (offer / code).
  5. Wait → decision split again → converted → exit.
  6. Message 3 — last chance + a preference/downgrade option; then suppress if still silent, to protect deliverability.
  7. Global — suppression lists, frequency caps, respect unsub/held.

The senior move: "I'd hold out a control group so we prove incremental revenue, not revenue we'd have won anyway." — that's the line that impresses Nicola.

Drill 10 — "Recipients report the email shows literal %%[ … ]%% code instead of their name. What happened?"Debug

Raw code in the inbox is the parser giving up — reason to the cause.

Attempt before revealing.

Worked solution — the AMPscript isn't being interpreted
  • Syntax error, most likely — an unbalanced delimiter (an unclosed %%[ / ]%% or %%=…=%%) makes the parser bail and print raw.
  • Wrong context — the code sits in a content area / version that isn't evaluated (e.g. a plain-text part, or pasted where AMPscript isn't processed).
  • No send context — a raw preview without the subscriber context that resolves attributes.

Debug: "Isolate the block, check the delimiters balance, test with one record in an interpreted content area, re-send. I'd hunt the unbalanced delimiter first — that's 90% of these."

5 Logic & problem-solving — reason out loud

Not SFMC recall — these test how you think under a curveball. The panel said thinking > output; this is where you show it. Answer with a structure, not a single fact.

Q1 — "A campaign to 300k went out an hour ago with a broken promo code. What do you do, and in what order?"Triage

Give an ordered answer. Attempt before revealing.

Contain → Assess → Communicate → Fix → Prevent
  1. Contain — pause any remaining sends / journey steps still firing. Stop it getting worse first.
  2. Assess blast radius — how many received it, who, and is the code fully dead or partially working?
  3. Communicate up — flag stakeholders immediately with facts, not panic. Bad news travels best early.
  4. Fix — the remedy that protects trust: honour the intended offer via a corrected/apology send, or a follow-up with a working code.
  5. Prevent — post-mortem: how did a broken code clear QA? Add the check so it can't recur.

The signal: you stop the bleeding before you explain it, and you end on prevention — operational maturity Nicola will clock.

Q2 — "Of a 1,000,000 email send, roughly how many humans actually read it? Reason it out."Estimate

Decompose the funnel, state assumptions. Attempt before revealing.

Think in a funnel
  • Delivered ≈ 98% → ~980k (bounces/failures removed).
  • Inbox placement ≈ 85% of delivered → ~830k in the inbox (rest → spam/promotions).
  • Opens ≈ 25% → ~200k — but flag it: Apple MPP auto-opens inflate this, so "read by a human" is lower.
  • Clicks ≈ 2–3% of sends → ~20–30k — the truer measure of real attention.

The signal: not the exact number — that you break it into a funnel, state assumptions, and know which metric to trust (clicks over MPP-polluted opens).

Q3 — "One campaign shows a 90% open rate but almost no clicks. What's going on?"Root-cause

An impossible number means the measurement is wrong first. Attempt before revealing.

The opens aren't human
  • 90% is anomalously high → Apple MPP / bot prefetch / security scanners fire the tracking pixel without a real read.
  • Near-zero clicks is consistent with that — plus check the boring failures: broken/missing links, link tracking not wired up, or images blocked so the CTA never shows.

Conclusion: don't trust the open metric — validate against delivery and clicks, confirm the links render. The logic move: when a number looks impossible, suspect the measurement before the audience.

Q4 — "You can send this segment 2 emails this week. Marketing wants to push 4 things. How do you choose?"Prioritise

Optimise for the customer, not the wish list. Attempt before revealing.

Rank → Consolidate → Sequence → Weigh fatigue
  • Rank the 4 by business value × relevance to this segment — not by who shouted loudest.
  • Consolidate — one email can carry more than one message with clear hierarchy, so 4 asks may fit in 2 sends without spamming.
  • Sequence by deadline/urgency; honestly defer or drop the lowest-value one.
  • Weigh fatigue / unsub risk — over-mailing costs future reach, a real cost.

The signal: you protect long-term list health and the customer's inbox, and you make the trade-off explicit rather than trying to please everyone.

Q5 — "An A/B on subject lines: Variant B is 2% ahead on opens after 500 sends. Ship B?"Stats

Don't chase noise; pick the right metric. Attempt before revealing.

Not yet
  • 500 is a tiny sample and a 2% gap sits well inside the noise → not statistically significant. Needs proper sample size / confidence before calling it.
  • Open rate is a weak, MPP-polluted metric — judge on the metric tied to the goal (clicks / conversions / revenue), not opens.
  • Check confounds — was the split truly random? Same send time, same audience?

Conclusion: let it reach significance on the right metric, then ship. The signal: you don't act on noise, and you tie the decision to a business outcome — judgment James and Nicola are both testing.

The gotchas — same idea, turned up. Each hides a named trap; naming the trap is the answer.

Q6 — "Customers who get our SMS spend 3× more. Should we SMS everyone?"Selection bias

Spot the trap before you answer. Attempt before revealing.

The trap: selection bias

SMS opt-ins are already your most engaged, loyal customers — the channel didn't cause the spend, the customer type did. Rolling SMS out to everyone won't transplant that behaviour.

Answer: "Measure it properly — a randomised holdout: same customers, some get SMS, some don't, compare. That isolates the incremental effect from the selection effect." Naming the confound is the whole point.

Q7 — "Version A beat B overall, but B won in every single country. Which do you ship?"Simpson's paradox

Attempt before revealing.

The trap: Simpson's paradox

The aggregate is misled by uneven segment mix — A only "won overall" because more traffic landed in an easy segment. If B wins in every country, B is genuinely better.

Answer: "Ship B, or segment-target — I trust the per-segment result over the aggregate. When totals and segments disagree, the aggregate is usually hiding a composition effect."

Q8 — "Our churn model is 95% accurate. Spend the whole retention budget on everyone it flags?"Base rate

Attempt before revealing.

The trap: base rate + wrong metric

If only ~5% actually churn, a model that always says "won't churn" is also 95% accurate — accuracy is nearly useless here. And every false positive wastes an incentive on someone who'd have stayed.

Answer: "I'd ask for precision & recall, not accuracy, and weigh the cost of a false positive. Target where the expected saved value beats the incentive cost — not everyone with a flag."

Q9 — "'Best send time' analysis says 6am — everyone opens then. Move all sends to 6am?"Measurement artifact

Attempt before revealing.

The trap: the metric is an artifact
  • Opens are timestamped when the mail is fetched — MPP prefetch & overnight batches distort "time of open".
  • Survivorship — you only see openers, not the segment that never opens at all.
  • Herd effect — if everyone ships at 6am, the inbox is crowded and you lose the edge.

Answer: "Don't move on that number — run a proper randomised send-time test per segment measured on clicks/conversions, not raw open timing."

Q10 — "Leadership wants the unsubscribe rate at zero. How do you get there?"Goodhart's law

This one's a test of judgment, not tactics. Attempt before revealing.

The trap: gaming the proxy (Goodhart's law)

You could hit ~0 by mailing less or hiding the unsub link — but that's worse: a hidden unsubscribe becomes a spam complaint, which hurts deliverability far more, and it games the number without serving the business.

Answer — reframe it: "Zero unsubscribes isn't actually the goal — an engaged, consented list with low complaints is. I'd measure that instead, and push back constructively rather than optimise a proxy that backfires." That maturity is exactly what Nicola's listening for.

6 Must-reproduce-from-memory crib

No AI in the room — these need to come out cold and fast.

Braze → SFMC (say in 30s)

LiquidAMPscript %%=...=%% + personalisation strings
Connected ContentSSJS / HTTPGet
CatalogsData Extensions (relational)
SegmentsDEs + SQL Query Activities / Filters
Canvas (journeys)Journey Builder
Content blocksContent Builder
API triggersREST/SOAP · Transactional API · triggered sends
SMS / pushMobileConnect / MobilePush
Data views (memorise)
_Open · _Click · _Sent · _Bounce · _Unsubscribe — joined on SubscriberKey
SQL you write cold
SELECT…FROM…JOIN…ON…WHERE…GROUP BY; DATEADD(day,-30,GETDATE()); anti-join = LEFT JOIN … WHERE x.Key IS NULL; DISTINCT/GROUP BY to dedupe
SPF / DKIM / DMARC
SPF = which servers may send · DKIM = signature proving genuine + untampered · DMARC = ties them to From domain, sets policy + reporting. All three aligned before warm-up.
IP warm-up in one breath
Auth first → ramp volume ~4–6 weeks starting most engaged → watch Google Postmaster + SNDS → throttle if reputation dips. "The bit I'm most keen to own."

Fuller versions + all 7 STAR stories live in Quantum_Stage2_CheatSheet.md — skim once, don't re-memorise.

7 Best-practice cheat-sheets — email dev & journey builds

Ten each, short enough to recall. If they ask "how do you approach X", these are your bullet points — and they back your "ten years of daily work" line.

Responsive email dev — 10 deeper cuts (you know the basics)

  1. AMP for Email — live, interactive content (real-time odds, forms, carousels) via an x-amp-html part with an HTML fallback.
  2. CSS-only interactivity — the :checked checkbox/radio hack for tabs, carousels & galleries; always ship a static fallback.
  3. Kinetic / gamified email — scratch-to-reveal, spin-the-wheel, tap-to-reveal offers in pure CSS — made for iGaming promos.
  4. Advanced dark mode — declare color-scheme / supported-color-schemes; target Outlook.com swaps with [data-ogsc]; blend-mode logos survive forced inversion.
  5. Progressive enhancement — layer flex/grid via @supports / @media over the table baseline; enhance up, never break the fallback.
  6. Outlook content swapsmso-hide:all + <!--[if mso]> / [if !mso] to serve Outlook a static block and everyone else the rich version.
  7. Preview-text engineering — hidden preheader + zero-width / &zwnj; spacer so Gmail can't scrape body copy into the snippet.
  8. Motion accessibilityprefers-reduced-motion to stop animation on request; design the GIF so frame 1 stands alone (Outlook freezes it).
  9. Deep a11yrole="presentation" on layout tables, lang, logical reading order, aria-hidden spacers, WCAG-AA contrast — beyond alt text.
  10. Modular build + compiler — atomic, reusable blocks (SFMC ContentBlockByKey) compiled via MJML / Maizzle, version-controlled & QA'd once; RTL / localisation from one template.

CRM journey builds — 10 practices

  1. Goal + metric first — what behaviour you want, and how you'll measure it.
  2. Tight entry criteria + de-dupe — right people in, no double-entry.
  3. Deliberate re-entry rules — decide if/when a contact can re-enter.
  4. Map before you build — entry, waits, splits, exits sketched first.
  5. Exit on conversion — remove people the moment the goal's met.
  6. Honour status & suppression — unsub / bounce / held + global suppression lists.
  7. Fallback every personalisation — no "Hi ,"; a safe default path on each decision split.
  8. Frequency / fatigue caps — protect deliverability and the customer's inbox.
  9. Test end-to-end pre-launch — trace a real contact down every branch; seed sends.
  10. Holdout control + document — prove incremental lift, then monitor and iterate.

8 Why Quantum — the intel (and where it wins the room)

All from their own site + trade press (EGR, iGB Affiliate, Gambling Insider, Built In), Oct–Nov 2025. Drop these in naturally — they prove you did the homework and aim straight at Nicola.

Momentum
5 → 60 employees in the growth phase; tech team built 0 → 14 in-house in a year. Self-described "tech-led, AI-first, data-driven."
Financials (FY2024)
Revenue £20.59m, +59% YoY; EBITDA £4.85m. Profitable and scaling — not burning.
Standing
EGR Power Affiliates 21st → 15th (2025), #5 in the UK; shortlisted for 8 awards — incl. Employer of the Year & Affiliate of the Year.
Reach
20,000+ new customers/month to partners · 500+ partnerships · £5m+ commissions · 125% network YoY. UK/US/Ireland/South Africa; London + Skopje.

Each fact → a reason → a line to use:

One line for the room "You're at an inflection point — growing fast, moving from pure acquisition into retention and new verticals, and doing it data-first and compliance-first. That's exactly where a hands-on technical CRM person makes the most difference — and it's how I already work."

9 Questions to ask — split by who

Pick ~4 + the closer. Aim the strategic ones at Nicola, the technical ones at James.

For Nicola — director / strategic

For James — technical / day-to-day (fresh — the Stage 2 ones are already answered)

Closer ⭐ — to the room "Is there anything from today that gives either of you hesitation about me in this role? I'd rather address it now than leave it unsaid." — confident, invites the honest read, often converts a maybe.

10 Logistics, do/don't & checklist

Address
Unit 116, Screenworks, 22 Highbury Grove, London N5 2EF
On arrival
Call Rosita: 07775 022228
Route (RH19 → N5)
East Grinstead → Victoria (Southern), then Victoria line direct to Highbury & Islington, ~8 min walk. ~1h45–2h door to door.
Timing
Arrive ~13:30 (30 min buffer) → leave home ~11:15. Check live times tonight.

Do / Don't (live-task edition)

DoDon't
Clarify before codingFreeze silently
Think out loud · state assumptionsBluff syntax (say how you'd verify it)
Name the tech · sanity-check at the endOverclaim "expert" anything
Stay calm if stuck (narrate method)Lead with AI · reopen salary (£50k settled)
Relax with James — he's in your cornerForget Nicola is the fresh judge

Tonight

Morning of

One line to carry in "James already knows I can do this — today I just do it calmly and out loud, and I win Nicola on judgment and impact."