A journey builder makes it easy to draw a line of boxes with waits between them. That is a schedule, not a journey, and it behaves the same whether the customer is delighted, furious or already finished. The symptoms are familiar: "complete your purchase" after the purchase, a reminder after the cancellation, three teams' messages landing on one person in one afternoon. All of them come from four structural decisions that nobody made explicitly. Make them first; write the content afterwards.

The four decisions, on one page#

What each decision protects you from

What ends it

A journey with no exit is a subscription nobody agreed to. Success has to end it too, not just unsubscribe.

What silence means

Silence is not consent to continue. Decide whether no reply means retry, branch or stop — before launch.

Which channel per step

Set at the step, not at the journey. A reminder and a receipt do not belong on the same transport.

The frequency ceiling

Across every journey a person is in, not within this one. This is the only one that needs a global view.

Three of these live inside the journey. The fourth cannot, and that is why it is the one that gets missed.

Decision one: what ends it#

Before drawing anything, define the exit conditions.

  • Positive exits: the outcome you wanted — booked, paid, replied, resolved.
  • Negative exits: complained, unsubscribed, asked for a human, marked as spam.
  • Neutral exits: the journey's purpose expired (the appointment date passed, the offer ended).

Every exit must remove the person immediately and everywhere, including from steps already queued in a sending system. A journey without exits keeps messaging people who have already done the thing.

Should this person still be in the journey?

  1. 01Did they do the thing — book, pay, reply, resolve?
    Yes
    Positive exit
    No
  2. 02Did they complain, unsubscribe, ask for a human, or mark it as spam?
    Yes
    Negative exit
    No
  3. 03Has the journey's purpose expired — the date passed, the offer ended?
    Yes
    Neutral exit
    No
    Stay in, and take the next step
Every exit removes them immediately and everywhere, including steps already queued in a sending system.

Decision two: what silence means#

Every wait needs at least two branches: it happened, or it did not. And "did not" is several situations:

Silence typeWhat it may meanSensible next step
Not deliveredWrong number, blocked, channel unavailableTry another channel you hold consent for, or fix the data
Delivered, not readNot now, or not this channelWait, then try a different channel
Read, no actionNot interested, or did it elsewhereCheck other systems for the outcome before sending more

(Read receipts exist on WhatsApp and RCS, and users can switch them off; SMS has none, so "not read" is often unknowable there.)

A workable default: silence at step one changes the channel; silence at step two changes the message; silence at step three exits. Log the exit reason, so somebody can count them later.

A workable default for silence

  1. 01Silence at step one

    Change the channel

  2. 02Silence at step two

    Change the message

  3. 03Silence at step three

    Exit — and log the reason, so somebody can count them

Decision three: the channel for each step#

The channel is a property of the step, not of the journey. A first notice and a final reminder can reasonably use different channels, because urgency changed and because you learned between them which channel this person reads. Any fallback re-checks consent for the new channel rather than assuming it — see choosing a channel per message.

Decision four: the frequency ceiling#

A rule above every journey that caps how many messages one person receives in a period, across all journeys and channels. It is the single control that prevents the most common failure in this field: three well-designed journeys, each reasonable alone, running on the same person at once.

What the ceiling needs to see

  1. Contact record

    The person, not the address. Two channels reaching the same human is still one human.

  2. Every active journey

    Including the ones another team owns. A ceiling that only sees your journeys is not a ceiling.

  3. Sends in the window

    Rolling, per person, across channels. Seven days is the usual unit and the usual argument.

  4. Priority class

    Which message wins when the ceiling is hit. A fraud alert beats a win-back, every time.

  5. Suppression log

    What was not sent, to whom, and why. Otherwise the ceiling is invisible and gets quietly raised.

  6. Consent ledger

    The ceiling is a courtesy; consent is a veto. They are different checks and both run.

The ceiling is a shared service. Implemented inside one journey it protects nobody, because the second journey does not know about it.

Whoever owns the ceiling must sit above the teams that own individual journeys. If every team can raise its own cap, there is no cap. This holds whether journeys run in a dedicated journey platform, a marketing tool or your own code: whatever runs them, the ceiling must see all of them.

A worked example#

A clinic network sends appointment reminders.

  1. Step 1 (72 hours before): WhatsApp utility template if WhatsApp consent exists, otherwise SMS. Buttons: Confirm / Reschedule.
  2. Branches: Confirmed → exit (positive). Reschedule → hand to booking flow, exit this journey. Not delivered → SMS if consented. No action after 24 hours → step 2.
  3. Step 2 (24 hours before): a shorter message on the other channel, if consent allows.
  4. Step 3: none. Silence after two attempts exits with reason "no response"; the front desk sees a flag.
  5. Global rules: a patient cancelling by phone triggers the cancellation exit through the booking system's event; the ceiling allows at most three non-urgent messages per patient per week; appointment reminders outrank marketing.

Before launch, the team set a review date three months out to check how many patients took each branch.

The clinic reminder, from first message to exit

  1. Step 1

    WhatsApp utility template if WhatsApp consent exists, otherwise SMS — Confirm or Reschedule

  2. Branch

    Not delivered goes to SMS if consented; no action moves to step 2

  3. Step 2

    A shorter message on the other channel, if consent allows

  4. Exit: "no response"

    No third step; the front desk sees a flag

Above it all: a cancellation by phone exits through the booking system's event, and no more than three non-urgent messages per patient per week.

Testing it#

The happy path is the one case that was designed deliberately, so it is the least useful to test.

  • Walk it as a person. Enrol yourself on a real phone. Reply oddly, reply late, ignore one step and answer the next.
  • Test the exits. Convert halfway and check messages stop. Unsubscribe at step two and check step three never fires.
  • Test overlap. Put one test person in three journeys at once. That is the case the ceiling exists for.
  • Name and count every branch. A branch nobody takes is either dead logic or a bug.

Tests the happy path will not run for you

  • Walk it as a person

    A real phone; reply oddly, reply late, skip a step

  • Test the exits

    Convert halfway; unsubscribe at step two and check step three never fires

  • Test overlap

    One test person in three journeys at once — the case the ceiling exists for

  • Name and count every branch

    A branch nobody takes is dead logic or a bug

Give every journey an end date#

Journeys outlive their reasons. Set a review or expiry date on launch day, with an owner. At review, look at branch counts, exit reasons and unsubscribes per step, and retire what no longer earns its sends.

Where to go next#

Next in this track: the support queue as a system, where many journeys end. For the consent checks every branch depends on, read consent architecture.