← StrategyJourney 7 campaign brief
Journey 7, Engineering briefPack version: 15 Oct 2026, 18:22 (London)
Leave feedback
The Engineering brief

What Journey 7 needs, and who owns it: one payload extension carrying the propensity-to-return band, then a small event set

🔧 Open the marketing to engineering board
The board is the system of record: live rows, owners, status, and each row's today-vs-to-be.
The hard rules: two touches per episode, then a genuine close; the final attempt is once, ever, then the win-back ends (seasonal waves and the anniversary continue). Any session in the last 30 days suppresses the win-back (a returner is recognised, never chased); the low band gets no triggered touch; a win-back never carries a data-capture ask; and one lapse owner per customer holds across the day-60 hand-off.
1The requirements

No send in this journey is fired natively by the app itself, so there is no native-to-Braze migration roster here: everything that sends today already lives in the messaging platform or an external one, and each row’s call sits on the As-is tab.

8 rows: 5 data points and 3 computed traits (Analytics builds, no engineering hours). The D badge is the walkthrough pin number. Delivery fixes and app defects follow in their own sections.

Events, feeds and data points

The events and attributes the journey's triggers and ends ride. Each row is the contract: what fires, what it carries, who reads it. Nothing in this band gates the phase 1 welcome-back door.

The data pointWhat exists todayThe workWhat it must carryPhase · status · depends on
D4The lapse-threshold crossing event
lapse_threshold_crossed, on the day-60 boundary
Build the event so entry is trigger-driven; the batch-derived hand-off is the working interim.
BUILDABLE TODAY
Derivable in batch; no event exists.
New eventEntry by hand-off, not day-count: the event makes the hand-off real time instead of overnight.
Used where: Episode entry
PHASE 2
gated
Queued; the batch interim works
Nothing.
D6Final-attempt state events and the shared offer state
final_sent · final_answered · suppressed · offer_issued_at
Build the three events, written to the warehouse, plus the offer-issued-at attribute the seasonal journey reads before its touch-two offer.
DOES NOT EXIST YET
Do not exist.
New events and one attributeThe promise to stop is recorded as state, auditable and explainable to support; one offer per customer across this journey and the seasonal waves, one marketing credit redeemed per transaction.
Used where: The final attempt and its suppression
PHASE 2
gated
Promoted into phase 2's launch set
The shared journey_state build.
D7App open plus lifecycle state
session + lifecycle band, at read time
Nothing new: session recency is Braze-native and the band rides the sync extension. Stated so the organic-return suppression's contract exists once.
BUILDABLE TODAY
Session recency live in Braze; the band rides the sync.
ConfigurationAn organic return is recognised instead of chased: any session inside 30 days suppresses the win-back.
Used where: The organic suppression and the welcome-back trigger
PHASE 1
ships now
Configuration at build
The sync extension.
D2The ownership hand-off (journey_state)
journey_state, carrying the power-user marker
The first-slip journey's canvas writes the hand-off at day 60; this journey's canvas reads it. Both ride the shared journey_state build above: one attribute, every canvas writes it, every broadcast reads it.
DOES NOT EXIST YET
Does not exist as a shared attribute; campaign-written at build.
The shared build, then canvas wiringOne lapse owner per customer, and the power-user marker travels so the recognition register fires without a second lookup.
Used where: Episode entry and the register pick
PHASE 1
ships now
With the shared build; wiring at build, jointly with the first-slip journey
The shared journey_state build; the first-slip journey's go-live.
D8The grievance signal
support contact · one-star rating · app deleted, last 240 days
Export support-contact history and app-store ratings to the warehouse as a nightly flag; the board's support-contact row covers only the day-3 loss-recovery flag.
DOES NOT EXIST YET
No support or ratings export reaches the warehouse.
New feed, then one computed flagA leaver with a complaint is answered or handed to customer service, never knocked and never offered money; until the flag lands, support contacts are a guardrail read, not a gate.
Used where: The gate before the band, at every trigger
PHASE 2
gated
Not asked; raised 6 Sep 2026
Nothing.
▸ The 3 computed traits this journey reads: Analytics builds them, no engineering hours; and what is not listed, and why

Computed traits this journey reads · Analytics builds, no engineering hours

Named here so the full picture is one table. The contract is the row: what each trait computes, what reaches the sender today, and what remains to build.

The computed traitWhat exists todayThe workWhat it must carryPhase · status · depends on
D1The propensity-to-return band
return_propensity_band · return_propensity_scored_at, daily, on change
Pipe the band and its scored-at date into the daily sync: the one launch gate. The frequency band populates it on day one; the model's output replaces it when it clears its backtest.
DOES NOT EXIST YET
Neither the frequency band nor any score is in the payload; the model is commissioned, not started.
Sync payload extension, Analytics-owned; Engineering registers the mappingWho is worth a knock and who is left in peace: the band gates every triggered send, orders the backfill, and draws the silence for customers likely to return anyway and customers unlikely to return.
Used where: Every triggered send
PHASE 1
ships now
With Analytics
The CDI payload extension; the frequency-band read for the cut-offs.
D3The usual route and the from-price
usual_route · from_price, nightly computed
Compute nightly on the standing pattern: never a live lookup, never an up-to claim.
DOES NOT EXIST YET
Computable; not built for this journey's cohort.
Computed traits, Analytics-ownedThe route anchor in every send, and the substantiated comparison figures (walk-up, paid, from-price).
Used where: Both knocks, the door card, the final attempt and the anniversary
PHASE 1
ships now
With Analytics
The CDI payload extension.
D5The anniversary trait
first_purchase_anniversary, nightly
Compute the anniversary date; the warehouse holds first and last purchase for the whole pool.
BUILDABLE TODAY
Derivable; not built.
One computed traitThe annual beat's trigger: for the mostly one-time pool the first and last purchase share a date.
Used where: The anniversary message
PHASE 1
ships now
With Analytics
The CDI payload extension.

Not listed because there is nothing to build: session recency (Braze-native, the whole phase 1 trigger), the transaction events that clear an episode, and the ownership flag the canvas writes.

Five changes the customer never sees: what is broken today, the fix we are asking Engineering for, and why it belongs in this journey rather than a general engineering backlog. None is a comm and none needs a decision from Marketing. Each one either loses a message this journey depends on, or decides whether something else can be built at all.

2Three delivery fixes

One plumbing extension carries the whole launch: the propensity-to-return band and its scored-at date into the daily warehouse-to-Braze sync, populated from the transaction-frequency band on day one and swapped to the model's output when it clears its backtest. The churn band is not read by this journey.

The delivery fixThe fix we are asking forWho does itPhase
The journey ownership flag (journey_state): the shared buildBuild journey_state once, estate-wide: one attribute carrying the owning journey, the episode id and the entry time. Every owning canvas writes it at entry and clears it at exit; every broadcast and wave segment excludes on it; it is mirrored nightly to the warehouse and readable at render by the home surface. The Braze developer wires the canvases and the exclusion segments, Engineering mirrors it to the warehouse and exposes the render read, Analytics keeps the state history. One board row carries it for all ten journeys.BACKEND ENGPHASE 1
ships now
▸ The problem today, and why it sits here
The problem today
Every journey's stand-down and hand-off assumes one owner per customer, and the flag those rules read is campaign-written today: invisible to broadcast segments, the warehouse and the app, so the rule cannot be enforced. Two live journeys can reach one customer in one week with clashing messages.
Why it sits in this journey
Here it brings the day-60 hand-off in from Journey 8 with the power-user marker (one lapse owner per customer), stands the seasonal waves down while a win-back episode is open, and hands the session to recognition on return.
The propensity-to-return band into the daily syncAdd two attributes to the daily warehouse-to-Braze sync on the standing pattern: the band (return likely, persuadable, unlikely; the transaction-frequency band on day one, the model later, no consumer change) and its scored-at date, written on change only so the data-point cost is the churn in bands, not the profile count. Analytics computes warehouse-side; Engineering registers the CDI mapping.BACKEND ENGPHASE 1
ships now
▸ The problem today, and why it sits here
The problem today
No score and no frequency band reaches the sender: the daily sync carries nine attributes and none of them. Every triggered send selects on the band.
Why it sits in this journey
This one extension is the whole phase 2 launch gate. The model is not launch-blocking: its first hard use is the offer at the final attempt.
The expiring magic-link doorFix the link lifetime or the retry flow, and measure login failures on first sessions back: a product fix, flagged from this journey because returners hit it hardest. The triggered episode does not fire on a failing door.BACKEND ENGPHASE 1
ships now
▸ The problem today, and why it sits here
The problem today
Magic links can expire before the code is typed: the sign-in door itself fails some returners.
Why it sits in this journey
Every send in this journey lands on a sign-in; a failing door taxes them all.
3Two defects in the app itself

Two live gaps. Neither blocks the door; both cost reads or returns.

The defectThe fix we are asking for
Content-card impressions and clicks do not registerFix the shared content-card instrumentation so impressions and clicks register.
▸ The problem today, and why it matters here
The problem today
The estate-wide instrumentation gap: the welcome-back card and the live incentive card both run blind.
Why it matters here
The phase 1 ship is a card; until the fix lands its read is indirect (sessions and conversions only).
The magic-link expiryProduct fix; flagged here because the welcome-back promise dies at a failed door.
▸ The problem today, and why it matters here
The problem today
The sign-in link can expire before the emailed code is entered.
Why it matters here
Returners are the cohort most likely to be signed out, so the defect concentrates on exactly this journey's audience.

Source: the 20 Aug 2026 data-availability sweep in the journey spec, the pins record, and the 30 Jul 2026 warehouse count. Board rows are raised from these contracts once sized.

Working detailPack version: 15 Oct 2026, 18:22 (London)