← Journey 2 front page
Journey 2, Engineering briefPack version: 3 Sep 2026, 23:20 (London)
The Engineering brief

What Journey 2 needs, and who owns it: two data paths, two app builds, one defect and one investigation

🔧 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: one arc per trip, and disruption yields everything. The arc opens at the upgrade purchase and closes at departure, refund or cancel; a swap re-anchors the same episode. The morning yield order (operational, then reassurance and wayfinding, then commercial) binds every send; anchored sends clamp to the 04:30 floor and T-45m latest; every commercial send suppresses on live disruption; and broadcasts stand down while the episode flag is set.
1The requirements

The native pushes, out of the app: which stay native, and which move to Braze

All 1 sends the app fires itself, out of the app, each with its call: 0 move to Braze, 1 stay native, the rest retire, need a decision or belong to another journey. These calls are this pack’s proposals, to be agreed with Engineering. The full reasoning per send is its card on the As-is tab; what each move is built from is the Braze developer’s list on the TO-BE journey map tab.

The sendWhen in the journeyThe callWho does the work
Booking and ticket confirmation view (in-app surface)
In-App
STAYS NATIVENo work
▸ What fires it, and why
What fires it
Live. The app's confirmation view shows the booked trip and the won upgrade. It is the only surface in the window that requires no marketing permission.
Why, in one line
Evolves into the persistent trip state: the consent-free home of the whole arc, the deep-link target of every send, and the entire journey for the non-contactable.
What decides or enables it
The Product surface decision; the interim platform and coach payload source, since the live rail feed integration is blocked and product-led.

One rule across the moved sends: a trigger that fires in the final minutes before a close is sent by the app, not Braze, so a delayed message can never land after the auction has closed. The release work sits on the switch-off row below.

8 rows: 5 new events and feeds, 0 sends moving into Braze, and 3 computed traits (Analytics builds, no engineering hours). The D badge is the walkthrough pin number, coloured by what exists today: BUILDABLE TODAY EXISTS, NOT USABLE YET DOES NOT EXIST YET. Delivery fixes and app defects follow in their own sections.

New events, feeds and close data

The events and payloads the arc fires on. Each row is the contract; the board carries the sized asks.

The data pointThe workWhat it must carryPhase · status · depends on
D1The arc's entry and anchor
upgrade_confirmed + departure timestamp
Nothing new: both are live, and the webhooks already fire on the departure offset.
Existing eventsThe arc's entry, and every anchored send's clock.PHASE 1
ships now
Nothing to build
Nothing.
▸ What exists today, and where it is used
What exists today
Live and console-confirmed.
Used where
Entry, and every beat's timing
D2The platform and coach payload
platform + coach, at fire time
The fire-time lookup for the wayfinding push and the trip state; the interim source pre the live rail feed.
Connected Content + the interim sourceThe wayfinding push without wayfinding is a sell slot in disguise: no payload, no send.PHASE 2
gated
Engineering confirms the source
The interim-source confirmation; the platform-change event.
▸ What exists today, and where it is used
What exists today
DOES NOT EXIST YET
Does not exist in Braze.
Used where
The wayfinding push and the trip state
D5The episode flag
trip / arc state, canvas-written
The canvas writes it at entry and clears it at exit; the seasonal weekly and successors exclude on it.
Braze configurationBroadcasts stand down inside the arc; one owner per customer, made real in audiences.PHASE 1
ships now
With the Braze developer
Nothing new.
▸ What exists today, and where it is used
What exists today
BUILDABLE TODAY
The shared convention exists; this journey's wiring lands with the build.
Used where
The broadcast stand-down
D6The disruption flag at fire time
live disruption, booked route
Checkable when a send fires, not at entry: every commercial send in the arc suppresses on it.
Live event / fire-time checkUntil it is readable, the yield rule cannot bind and nothing commercial launches inside the arc.PHASE 1
ships now
Launch gate, with Backend Engineering
Nothing else.
▸ What exists today, and where it is used
What exists today
Source and freshness unconfirmed.
Used where
Every send's eligibility
D8The Live Activity start token
start token, existing attribute
The canvas fires the pin's start webhook where the device and token allow.
Existing Braze attribute + webhookThe Phase 2 pin; the push stands where the start fails.PHASE 2
gated
With App Engineering, on the release train
The re-scope decision.
▸ What exists today, and where it is used
What exists today
The attribute exists; the surface build is the open scope.
Used where
The lock-screen pin

The engineering work to move native sends into Braze

No new data in this band: logic, integration and release work.

The changeThe workPhase · status · depends on
▸ 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 standing pattern: computed nightly, synced as traits, never live lookups at send time (fire-time Connected Content is the deliberate exception, and only for the wayfinding payload).

The computed traitThe workPhase · status · depends on
D3The persona register label
persona_register + confidence, nightly
The register label for the day-before copy: register changes copy only, never timing.
Computed traitPHASE 1
ships now
With Analytics
The nightly sync.
▸ The contract
What it must carry
Three copy registers on the journey's biggest reachable beat.
What exists today
BUILDABLE TODAY
Derivable; the same classifier other journeys consume.
Used where
The day-before beat
D4Booked cabin and operator
cabin + operator, at fire time
Gates the per-operator inclusions and the Avanti First-against-Standard-Premium label.
Fire-time attributePHASE 1
ships now
Nothing to build
The per-operator content block (Design).
▸ The contract
What it must carry
The one place the class confusion (1,856 tickets a year) is resolved before travel.
What exists today
On the trip attribute.
Used where
The wait email and the inclusions block
D7The realised saving
saved_amount per trip, batch
Substantiate the figure first: the walk-up anchor is unconfirmed, and no figure renders on the modal until it lands.
Computed traitPHASE 2
gated
With Analytics
The substantiation.
▸ The contract
What it must carry
The value moment's number; a made-up saving at that moment would be the worst possible lie.
What exists today
Derivable; the anchor needs substantiation.
Used where
The on-board modal

Not listed because there is nothing to build: the purchase entry event and departure timestamp (live today, the webhooks fire on them), and the day-before family's trigger, kept unchanged as the control.

Six 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.

2Four delivery fixes

The builds and investigations the arc waits on: the two data paths that decide phases, the two app builds, and the estate's one unexplained send path.

The delivery fixThe fix we are asking forWho does itPhase
The interim platform-and-coach sourceEngineering confirms the interim source and its freshness; a platform-change event Braze can act on comes with it.BACKEND ENGPHASE 2
gated
▸ The problem today, and why it sits here
The problem today
The wayfinding payload does not exist in Braze today, and the live rail feed integration is blocked and product-led.
Why it sits in this journey
It decides the wayfinding row's phase: an existing attribute pulls it into Phase 1, a new feed holds it in Phase 2.
Refund and cancel events at BrazeConfirm the path and latency; wire arc suppression on both.BACKEND ENGPHASE 2
gated
▸ The problem today, and why it sits here
The problem today
Whether the events reach Braze fast enough for instant arc suppression is unconfirmed, and nothing consumes them today.
Why it sits in this journey
A cancelled trip must flip the state and suppress pending sends instantly, or the arc congratulates a dead trip.
The trip-state surface and the on-board modalProduct rules the surface; App Engineering builds both; the reskin is the smaller build.BACKEND ENGPHASE 2
gated
▸ The problem today, and why it sits here
The problem today
The persistent trip state (reskin or net-new is Product's call) and the consent-free on-board modal are the journey's two app builds.
Why it sits in this journey
The state serves the 18 percent with no proactive channel and is the deep-link target of every send in the arc.
The legacy swap push's callerIdentify the caller in the console with Lisa, confirm the rebuild covers its cohort, then retire under the archiving rule, reason recorded.BACKEND ENGPHASE 1
ships now
▸ The problem today, and why it sits here
The problem today
It fired daily through 13 August though its only known trigger stopped on 20 July: the estate audit's one unexplained send path.
Why it sits in this journey
A duplicate reminder from an unidentified trigger, in the window where contact pressure costs most.
3Two defects in the app itself

Live defects in the window: the swap-eligibility defect, and the legacy swap push firing with no known caller.

The defectThe fix we are asking for
The swap-eligibility defectThe fix date is with Product and Engineering.
▸ The problem today, and why it matters here
The problem today
The defect gates the seat-swap path inside the arc.
Why it matters here
Until it lands, the swap path stays closed for the won-trip cohort.
The unexplained send pathIdentify, confirm coverage, retire.
▸ The problem today, and why it matters here
The problem today
The legacy swap push fires with no known caller, outside every rule.
Why it matters here
A customer in scope for both can receive the same reminder twice in one morning.

Source: the console trigger pass of 14 to 16 August 2026, the 13 August pull, and the matrix spec. Board rows are the system of record for the sized asks.

Working detail
Leave feedbackThis pack is at Gate 1: the strategy review. The timing-test decision, the post-win slot ratification, the deleted recovery send and the catering call are the open decisions. Say what is wrong with the strategy, or what it is missing.
Pack version: 3 Sep 2026, 23:20 (London)