The Second Order
For DTC founders and operators

THESECONDORDER

How to turn first-time buyers into second-time buyers, and what to build first.

Andrew LauchnerGrowth and retention at Gallery Furniture, 3Commas and BinanceSeptember 2026 · 24 chapters · About 100 minutes

A note before you start

What your customer buys first predicts whether they come back.

13.8%
bought again after starting on the full-size facial (n = 486)
1.9%
bought again after starting on the travel size of the same facial (n = 476)

Same facial, two sizes, in one skincare brand's six-year order file. Of 489 customers who started on a travel or intro size, one later bought a full size. The full table is in Cost per Returner.

The odds on that second order were set before the first email went out. Yet the standard retention build starts in the inbox: a welcome series, then a winback, then a loyalty widget. Six months in, there's a flow for everything and the repeat rate hasn't moved a point.

If your first order barely covers what the customer cost you, you don't make money selling. You make money selling again.

The second order is decided in your order file before it's decided in your inbox.

This book shows you how to read that file (what customers bought first, when they run out, what you've taught them to pay) and what to build from it, in order. It's for DTC founders and the people who run their email, SMS and retention.

It covers the order file, email and SMS, not paid media, and none of it rescues a product people don't like. Most of it runs on the order export and the email platform you already pay for. Twenty-four short chapters, each ending on a task.

How to read it

Start with The Forty-Minute Audit. Your score sends you to the part you need. Then pick a path.

If you sell subscriptions, trades or memberships, read order as the second paid event: the second month, the second trade, the renewal. If you run lifecycle inside a larger company, start with Subscriptions, Your Top Ten Percent, Attribution Isn't Proof and Who Owns the Second Order.

What's proven and what isn't

Evidence comes in three kinds, each labeled.

Invented examples say so in their first line. Forecasts say "forecast."

Rules as of September 2026

The legal lines in this book were checked in September 2026, for US sellers. They move. The FTC's click-to-cancel rule was struck down in 2025 and is being rewritten. The FCC is rewriting its text opt-out rules. States add rules every year.

Treat each rule here as a floor, and have counsel read your checkout, consent forms and text program before they ship. Selling into Canada, the UK or the EU? Their rules are stricter. None of this is legal advice.

Andrew LauchnerScottsdale, Arizona
Front

TWELVE POSITIONS

What this book argues, one line each, and where each one is tested.

A pitch tells you what it can do. A position tells you what would prove it wrong.

Each position links to the chapter that argues it. That chapter ends with the result, on your own file, that would prove it wrong for you.

  1. The leak sits between the first order and the second, and a better channel won't close it.Your One-Time Buyers
  2. Price a second order in dollars, never in repeat-rate points.What a Second Order Is Worth
  3. Your entry offer is your retention program. Choose it on what a returning customer costs, not on cost per acquisition.Cost per Returner
  4. Pull the order file before you build another flow. It decides what comes first.The Build Order
  5. Time every reorder message to the interval customers keep, not the one on the label.The Kept Interval
  6. Count the second orders that arrive while your team is on holiday. Grow that share before anything else.Structural Share
  7. Every discount teaches customers what your price is.Margin Is a Retention Metric
  8. Rank flows on revenue per recipient. Fund them on a holdout, never on attributed revenue.Attribution Isn't Proof
  9. If a test can't expect ten conversions per arm, don't run it. Decide on judgment and say so.The Single-Digit Stop
  10. One named person owns the second order and can change an offer without joining a queue.Who Owns the Second Order
  11. Lead every budget ask with the forecast you'd defend, and label it a forecast.The Budget Ask
  12. Never pay for an order you already own.The Doorway Rule
Start here · Chapter 1

THE FORTY-MINUTE AUDIT

Ten checks, twenty points, forty minutes. Your score tells you which part to read first.

Open your email platform and a notepad. Leave every dashboard closed for now.

Ten checks, 0 to 2 points each. Score 0 if it failed or you can't answer it, 1 if it's partly true, 2 if it's clean. Don't read the scoring bands until you've scored all ten.

Before you score, skim the ten check names and write down the two you expect to fail. The same checks fail at a furniture showroom, an inherited retail file and a regulated cannabis brand. Category won't protect you.

Check 1 runs first, from memory, because it tests what your team carries in its head. A number that lives only in a report isn't steering any decision, so the gap between the guesses and the file is the finding.

If you had to go looking for the answer, score it zero.

The ten checks

  1. The one-and-done rate, from memory · 4 minLook at: Nothing yet. Ask the founder, the growth lead and whoever runs email what share of customers have bought once and never again, and write the answers down before anyone opens a report.
    Good: Three answers within five points of each other and of the file.
    Cost if wrong: In an invented example, the room guesses 40% and the file says 70%. This year's acquisition budget was set for a business that doesn't exist.
    Read next: Your One-Time Buyers
  2. Your mail arrives · 6 minLook at: Google Postmaster Tools for domain reputation and user-reported spam rate, your spam and unsubscribe rates, and click rate by recipient domain, never open rate. After that, send one flow message to seed addresses at Gmail, Outlook, Yahoo and iCloud.
    Good: Nothing in spam or junk at any provider. Gmail in Primary, Promotions or Updates, all three of which are inbox. Postmaster Tools reputation High or Medium, spam rate under 0.1%. Click rate within a few points across Gmail, Yahoo, Outlook and Apple domains.
    Cost if wrong: Mail in the spam folder still counts as delivered, so a program can report steady opens while Gmail users never see it. Since September 2021, Apple Mail can load your images whether or not anyone opens the email, so open rates overstate engagement; judge engagement on clicks, site visits and orders.
    Read next: Prove the Mail Arrives
  3. Repeat rate by first product exists, with n · 4 minLook at: A table of second-order rate by the product on each customer's first order, with the customer count beside every rate.
    Good: It exists, every row has its n, and someone has read it this quarter.
    Cost if wrong: You rank entry offers on cost per first order and never see who came back.
    Read next: Cost per Returner
  4. Duplicate and overlapping flows · 4 minLook at: Every live flow with its trigger and its first three subject lines, sorted by subject line.
    Good: One flow per trigger, and no two flows that can fire on the same event for the same person. Each flow excludes anyone already in an overlapping one.
    Cost if wrong: A $21.8K-a-month brand ran eight flows, and four of them sent the identical 17-email sequence on different triggers. Nothing stopped one customer from entering more than one.
    Read next: Structural Share
  5. Audiences with no consumer · 4 minLook at: Every list and segment by size, with the flow or campaign that uses it written beside it. Filter flows to Draft as well, and note any whose trigger is a populated list or segment.
    Good: Every list or segment over 1,000 profiles has a named consumer or gets deleted. No draft flow holds a live audience: publish it or detach the audience.
    Cost if wrong: At the same brand, the largest segment held 18,184 profiles and fed a flow that had never been switched on. Another 10,732 subscribers sat on orphaned lists, receiving nothing.
    Read next: The Data Contract
  6. Flows ranked per recipient · 5 minLook at: Is revenue per recipient, on a click-based attribution window, the default sort in the report your team reviews? Check the window setting first.
    Good: No marketing flow with more than 1,000 sends and zero attributed revenue, unless its job isn't revenue. Sunset, re-permission, how-to-use, review-request and gift-check flows are judged on their own outcome: suppression carried out, reviews collected, a return to the site. Everything else earns or gets turned off.
    Cost if wrong: At the same brand, email earned $1,416 of $21,812 in monthly revenue, or 6.5%. One post-purchase flow brought in 96.5% of that, and no campaign had ever been sent.
    Read next: Attribution Isn't Proof
  7. Winback before replenishment · 3 minLook at: The trigger delay on your winback flow and on your replenishment flow, beside the median days between a customer's first and second order.
    Good: Replenishment fires first, and both delays come from the order file, never a platform default.
    Cost if wrong: The winback tells a healthy customer they've lapsed and hands them a discount on an order they were about to place at full price.
    Read next: The Kept Interval
  8. Discount depth · 4 minLook at: Discount depth by month: total discounts as a share of gross sales, and the share of orders carrying any discount (code, automatic, markdown or subscription price), each type on its own line. The trend, not the average.
    Good: Both lines flat or falling, with full-price orders still arriving between sales.
    Cost if wrong: When the discounted share climbs and order count doesn't, each sale is lowering the price on orders that were coming anyway.
    Read next: Margin Is a Retention Metric
  9. Subscription share of consumable orders · 3 minLook at: Of orders containing a consumable, the share placed on subscription. Divide by consumable orders, not all orders, or your durable catalog hides the gap.
    Good: You know the figure to the point. Every consumable with a predictable runout offers subscribe, listed first and never selected by default.
    Cost if wrong: A product with a predictable runout, left on manual reorder, turns every second order into a memory test. Customers who fail it don't complain; they stop ordering.
    Read next: Subscriptions
  10. A randomized holdout exists · 3 minLook at: A group of customers, chosen at random and fixed, who get no marketing email or text, and a date on which someone reads it.
    Good: It exists and holds 5–10% of customers, or more on a small file. A leak check shows nobody in it was mailed last month.
    Cost if wrong: Every result your platform reports is attribution, and you can't say how many of those orders would have come anyway.
    Read next: Attribution Isn't Proof

Read your score

ScoreWhat it meansRead next
17–20The plumbing holds. Prove what it earns before you build more.Part four, starting at Attribution Isn't Proof, then Part five
12–16The structure exists and leaks. Fix every zero first.Part three, starting at The Build Order
7–11One flow carries the program. Protect it, then build the second.Part two, starting at Cohort Tables
0–6You own a tool that sends email.Your One-Time Buyers, then Week 1 of The Build Order

Fix the low checks in check order, because the early ones produce what the later ones read. A flow can't be ranked per recipient until you know the mail arrives, and a discount can't be priced until you know who came back. Score all ten again each quarter, with the same three people answering check 1.

Do this

Part one · Chapter 2

YOUR ONE-TIME BUYERS

Most customers buy once. Sort the file by order count before you trust any average.

Sort your customers by how many times they've ordered. Look at the first row: one order, then nothing. A huge first row is the ordinary shape of a consumer brand doing fine.

The first row also breaks your averages. In one skincare brand's six-year order file, the blended average customer is worth $142 in lifetime revenue. The top 20% of customers start at $157, so the average customer wouldn't make the top fifth. The median customer bought once. $142 is nobody.

The skincare file, sorted

The skincare file holds 18,319 customers over six years, a file small enough to print. That size is deliberate: you can check every number in it by hand, and so can your finance lead.

Customers whoCustomersShare of customersAvg lifetime revenueShare of revenue
Bought once13,52674%$6634%
Bought two or more times4,79326%$35766%

Measured. Blended average: $142. The top 20% of customers start at $157.

A customer with two or more orders is worth 5.4 times a one-order customer. Three in four customers sit in the first row and bring in about a third of the revenue. The other quarter brings in two thirds. Because 74% of the file sits in one row, the median customer sits there too, and the mean lands in the gap between two groups that behave nothing alike.

Any average you report about customers belongs beside the two rows it came from. Report it alone and the room will picture a typical customer who doesn't exist.

A mean without a shape is a rumor with a decimal point.

Where the average does damage

The blended average does its damage in one place: your acquisition budget. Put $142 next to your acquisition cost and it looks like headroom. So your team bids harder, widens targeting and accepts worse traffic. Three times out of four, that spend buys a $66 customer who never comes back.

You're running two businesses: a trial business and a repeat business. Bid off the decomposed table, never the average. The same error reaches payback math. A blended lifetime value prices every new customer at $142, when three in four customers in the skincare file were worth $66.

If the first row holds more than half your customers and less than half your revenue, the two businesses need separate math. A file with a small first row can keep buying strangers. A file with a large one has bought most of the strangers it can afford, so its next dollar belongs to the first row.

The returning-customer rate on your storefront dashboard won't warn you. It's an order metric, not a customer metric: it divides the period's buyers who had ordered before by everyone who bought in that period. Cut acquisition and it rises, because the denominator lost its strangers. The rate can climb for two quarters while the file shrinks underneath it.

What the Monday meeting misses

Sit in a Monday growth meeting and watch where the questions go. The media buyer has last week's spend and return by channel, and every number on that screen has a person who will be asked about it. Late in the meeting the founder asks how repeat looks. Someone says the post-purchase flow is live and the open rates are good.

The number that would change that meeting is the share of last quarter's new customers who came back. It sits in the order table, uncomputed, because computing it is on nobody's job description. Acquisition gets a number every week, while the first row gets an anecdote. Bring the two rows into that room and the question moves from whether the flow is live to what the first row is worth.

Pull the two rows

Work from the order table, net of refunds and cancellations, never from a dashboard report. The pull is in For Your Analyst.

Sort by order count, never by dollars. The two populations separate on frequency, and spend follows from it. A dollar band lumps a one-time buyer who bought a big bundle in with a regular who buys small, and it hides the row you need to price.

An afternoon if your customer IDs are clean; a few days if they aren't. Resolve identity first either way. One customer split across two email addresses reads as two one-time buyers, which inflates the first row and shrinks the second. Match on customer ID, then normalized email, then phone, so every person is counted once.

Read the first row's share only for customers old enough to have had a fair chance to come back. Last month's buyers haven't had one, and counting them makes the first row look worse than it is.

Wrong for you if

Your one-and-done rate is already low for your category, your second-order interval is stable, and you still miss your number. Then the leak is elsewhere, and the problem goes back to acquisition. Run the table first so it's allowed to come back negative.

Do this

Part one · Chapter 3

WHAT A SECOND ORDER IS WORTH

Price the second order in dollars, against customers with exactly two orders, then in payback months.

Your order file can price a second order in dollars. Pull average lifetime revenue for one-order customers and for customers with exactly two orders. The gap is the step-up: what one more order is worth per customer. Then restate it in payback months, the unit finance already uses for acquisition.

The step-up

In the skincare file, customers with exactly two orders average $155 in lifetime revenue, against $66 for one-order customers. The step-up is $155 minus $66: $89 per customer converted. A two-order customer is worth 2.35 times a one-order customer.

Measure against exactly two orders, never two or more. The two-or-more average includes your heavy buyers, so it inflates the gap. A founder's finance lead will find that inside a day. The strict version is smaller, and it survives the meeting.

Multiply the step-up by the first row. The skincare file has 13,526 one-time buyers, and at $89 each that comes to about $1.2M. Label it the ceiling, if every one-time buyer ordered once more. A forecast rate turns the ceiling into an ask, and The Budget Ask builds that table.

Treat the $89 as an upper bound for customers you win back with an offer: it compares customers who came back on their own with those who didn't, and customers with bigger first orders may be likelier to return.

When the second order is smaller

In this file the step-up was bigger than the average first order. In many DTC files it's smaller. In consumables, the first order carries the starter kit or the bundle, and the reorder is one refill. The step-up is still the number you price. It's smaller, and the third order matters more.

For example, take a brand whose first order is a $90 kit and whose reorder is a $40 refill. Its step-up is about $40, so the cost of winning that reorder has to sit well under $40. Its profit arrives on the third and fourth orders, so timing the reorder matters more than discounting it.

What the step-up pays for

Price orders in contribution, because revenue hides what each order costs to deliver. Contribution, everywhere in this book, means revenue less cost of goods, shipping, fulfillment, payment fees and the discount.

Take an invented brand: a $50 order, 60% product margin, $8 of shipping, fulfillment and fees per order, and a $40 acquisition cost. The first order contributes $22 and cost $40, so each new customer arrives $18 underwater. Every later order contributes $22. The business is paid on the second order, not the first.

In the invented brand, a second order from a one-time buyer contributes $22 with no new acquisition cost against it. You already paid for these customers, which is why the step-up belongs in the same meeting as the media plan.

Say it in payback months

Finance judges acquisition in months, so give them the second order in the same unit. Your payback month is the first month in which cumulative contribution per acquired customer reaches acquisition cost. Cut it by acquisition cohort and by entry product, because a blended payback month hides the same two populations a blended average does.

Continue the invented brand. Each customer starts $18 underwater. Each repeat order contributes $22, so a cohort needs about 0.8 repeat orders per acquired customer to pay back: $18 divided by $22 is 0.82. Say a cohort averages 0.4 repeat orders by month six, 0.8 by month thirteen and 0.9 by month fourteen. Payback is month fourteen, the first month its cumulative contribution clears $40.

Build it from your cohort table. For each acquisition month, add the contribution from every order to date. Divide by the customers acquired that month. The payback month is the first month that running total reaches what you paid per customer. A cohort too young to get there stays blank until it does.

The month tells you what the business can carry. For example, your cash plan tolerates twelve months and payback lands in month fourteen. You have two ways to close the gap: cheaper acquisition, or second orders that arrive sooner and more often. Entry product moves the month too, because some first products bring customers back and others rarely do.

Chassis For Men, a men's grooming brand, ran at a roughly $8 customer acquisition cost against an $82 average order (platform-reported), so it paid back on the first order. A brand in that position grows on first orders and banks the second. Most consumable brands sit closer to the invented one, where the second order sets the payback month.

Cut by entry product, payback shows which first products earn back their acquisition cost and which lean on the second order. That cut goes to the media meeting as Cost per Returner.

Run it on your export

  1. Count the first rowCustomers with one lifetime order, net of refunds and cancellations, after identity is resolved.
  2. Average two rowsAverage lifetime net revenue for one-order customers and for customers with exactly two orders. Use net revenue, because frequent buyers also return more.
  3. Subtract, then multiplyThe two-order average minus the one-order average is the step-up. The step-up times the first-row count is the ceiling, if every one-time buyer came back.
  4. Find the payback monthBy acquisition cohort and entry product, find the first month cumulative contribution per acquired customer reaches acquisition cost.
Wrong for you if

Pull the exactly-two row. If its average is under one and a half times your one-order average, the second order won't carry the business alone. Price the third order the same way before you fund a program on the second.

Do this

Part two · Chapter 4

COHORT TABLES

Most reports called cohorts are calendar windows. A real one has an empty corner.

Careful people build this report. Your platform offers it by default. A good analyst assembles it in an afternoon. Set the date filter to the last 90 days and read revenue per customer. Then 180. Then 365. Put the three numbers in one table and title it "cohort LTV."

Every number is true. The table is meaningless, because the 365-day window contains the 90-day window, and its customers have had four times as long to buy again. You're measuring the passage of time and calling it retention. Some platforms now build true first-order cohorts. Run the ten-second test below to find out which kind you're holding.

The ten-second test

Look at the customer count. If it grows as the window lengthens, you're looking at nested calendar windows. In a true cohort table the count can only fall as you ask for more observed age, because a customer who first ordered six weeks ago can't supply a twelve-month reading. Rising counts mean the table is measuring how long the window was open.

The second tell is smoothness. Every row improves on the one above it, no month disappoints, and every cell is filled. Tables built from customers are ragged: some months got off to a bad start, and the lower-right corner is empty because that time hasn't happened yet.

A table with no bad news in it was not built from customers.

The calendar-window table costs money. A team holding it concludes that customers grow more valuable the longer they stay, sets a payback window on that, and bids acquisition against a number that would have risen if they'd done nothing. In a seasonal category the 365-day row swallows the whole peak while the 90-day row shows only the quiet months, and the table calls the difference customers maturing.

Build it from first orders

Each row is a first-order month: the month of a customer's first paid order. Freeze it, so a customer never changes cohort. Measure every later order in days since that customer's own first order, and group the days into 30-day months. The denominator for every cell in a row is that row's customer count at month zero, and it never moves.

Write down which numerator you're using. Cumulative repeat counts customers with two or more orders by that age. Period repeat counts customers who ordered inside that month. They answer different questions, and a table that mixes them can't be compared to anything. Resolve identity before any of it, because a split customer reads as two one-time buyers; the matching rules are in For Your Analyst.

Leave a cell blank where time hasn't happened. A cohort formed four months ago has no month-six value, and a zero in its place says nobody came back. A zero in that cell will be charted, averaged, and eventually presented to your board as a collapse.

Read the shape

Invented numbers, real shape. Cumulative share of each first-order month's customers who had placed a second order by each age, read on September 1, 2026. Blank cells are time that hasn't happened yet.

First-order monthCustomersMonth 1Month 3Month 6Month 12
July 20251,0004%9%13%18%
December 20252,5003%6%9%
February 20269004%10%14%
May 20261,1005%11%
July 20261,2004%

The blanks step down to the lower right, and every cohort table built from customers has that staircase. Keep the customer count beside every row, so the reader can see which months are big enough to trust.

Read down the columns: same age, different months. Reading across a row follows one cohort as it ages, which shows how it matures and says nothing about whether it beats last year's. The two July rows, a year apart, both sit at 4% at month one.

Compare at matched age

Young cohorts always look worse. A cohort forty-five days old can't produce a 90-day repeat rate, so a chart of 90-day repeat by acquisition month, current month included, shows its newest bars low every single month.

Two rules fix it. A cohort enters a metric only after it has been observed for the full horizon the metric names. For a faster read, shorten the horizon rather than the wait: a 30-day rate on cohorts at least 30 days old is comparable to every prior month.

Matched age isn't enough on its own. Season and entry-product mix also move a 90-day rate, so compare this January with last January, and check what each cohort bought first before you blame the business. To tell a young cohort from a cheap one, compare first-order value by cohort. Every cohort already has all of its first orders, so that number is complete even for last month.

In many consumable and gifting categories the holiday cohort is the largest and the weakest, bought at a discount and heavy with gifts. Check yours at matched age before you plan around it. In the invented table, December 2025 has more customers than any other month and trails every other cohort at each age it has reached.

Do this

Part two · Chapter 5

COST PER RETURNER

What a customer buys first predicts whether they come back. Price entry offers on it.

Your ad account ranks entry offers by cost per first order. It never asks who came back. One skincare brand's six-year order file shows what that misses. Group its customers by the product on their first order, count each group, and check who bought again. One blended repeat rate splits into five, from 1.9% to 33.9%.

First productBought againn95% interval (Wilson)
Night treatment33.9%5923.1–46.6
Retinol32.9%7323.2–44.3
Daily facial, full size13.8%48611.0–17.1
Lipstick12.2%1,37910.6–14.0
Daily facial, travel size1.9%4761.0–3.6

Measured, from the skincare file. The n is the number of customers who entered on that product. It sets how far you can trust the rate beside it.

Start with the two daily-facial rows, because they hold the same product in two sizes. The full size brought back 7.3 times the share of buyers the travel size did. By day 365, a full-size starter was worth $148.67 and a travel starter $11.54, about a thirteenth as much.

Of the 489 customers who started on a travel or intro size, one later bought a full size: 0.20%. For strangers, the trial size was a cul-de-sac.

An intro size sold to a stranger buys you a stranger.

Cost per Returner

A cost-per-acquisition dashboard treats every first order as the same purchase. The table says they differ, so the number to put beside each entry offer is Cost per Returner. It's what one returning customer costs through an entry product: acquisition cost divided by that product's repeat rate.

Take an invented ad account paying $30 for a trial buyer and $60 for a full-size buyer. At repeat rates near the table's, 2% and 14%, a returning customer costs $1,500 through the trial and $429 through the full size, three and a half times more through the "cheaper" offer.

The media dashboard shows the trial as twice as efficient, because it stops counting at the first order. Divide by repeat rate and the ranking flips. So the ad set that wins on CPA can lose once you count who comes back, and the paid team can't see it from their own screen.

Run it on your own numbers. Take the CPA your paid team already reports for each ad set, and the repeat rate from the table for the product that ad set sells. Where one ad set sells several products, weight the repeat rate by the first products it brought in.

Who each product attracts

The table shows who each product attracts, not what it does to them. A stranger who picks the travel size chose a small bet, and that was the size of bet they wanted. A full-size buyer paid for a routine on day one, so they had one running when the reminder arrived. Change the ad mix and you change who arrives, which means the rates won't hold still.

Before you move the budget, test the move. Shift a fixed slice of spend from the trial ad set to the full-size one for a month, and compare cost per returning customer across the whole test budget, not per SKU.

The trial buyers you stop acquiring won't turn into full-size buyers. Most won't buy at all, and the full-size CPA will rise as you scale it. If Cost per Returner still falls, you have your answer, in the paid team's own numbers.

If the test backs the table, the trial has two futures. It can stay as an add-on for existing customers, off the ad account. Or it can become an on-ramp to the full size, with a graduation line set before the flow launches and a date to judge it by.

Trust the rows that earn it

A row without n is an opinion. The night treatment and retinol rows sit one point apart, inside intervals more than twenty points wide, so there's no finding between them. The two daily-facial rows are different. Their intervals don't come near each other, because the gap is large, and a few hundred customers a side is enough to see a gap that size.

Below about a hundred customers, treat a row as a lead to check. From a hundred to three hundred, it separates large gaps and misses small ones. Above three hundred, at repeat rates under about fifteen percent, the interval is within about four points either side.

Use the Wilson interval, which holds up at low rates and small samples. The spreadsheet cell to paste beside every rate is in For Your Analyst.

Rank the rows twice

The two-axis test ranks each product twice: by volume, meaning how many customers enter on it, and by quality, meaning its repeat rate and day-365 value. Lipstick leads on volume by a distance and sits fourth of five on quality. Night treatment and retinol lead on quality and barely register on volume. The full-size daily facial is the only row that holds up on both.

When the two rankings disagree, you've found the decision of the year. Point acquisition at the product that brings volume, or at the one that brings customers back? And will the quality leader hold its repeat rate once strangers see it in an ad instead of regulars finding it?

That question deserves a quarter of argument with the table on the screen. It usually gets settled inside the email team, the only people who ever saw the table. Take the table to the media meeting.

The budget there gets set on cost per acquisition and blended lifetime value. Both are averages across groups that behave nothing alike, so the meeting ends before anyone asks which product the new customers came in on. Bring one slide: repeat rate and Cost per Returner by entry product, with n on every row.

When a famous name buys the first order

Fame makes a first order cheap to win and tells you nothing about the second. I was Head of Growth and Retention at Greatness Wins, the athletic apparel brand founded by Chris Riccobono, Derek Jeter, Wayne Gretzky and Misty Copeland. Famous founders can buy a first order. The second has to come from the product and the program.

That puts the weight on what you sell first. A launch-price tee and a two-piece training set bring in different buyers, so the entry offer has shaped the file before any flow fires. Fix the offer before the mail, because the mail can only work with the customers it was handed. The offer is the retention program; the emails only decide how much of it you collect.

Wrong for you if

Your entry products' repeat rates sit inside each other's intervals. Then the first product isn't sorting your customers, and price and timing matter more than the entry offer.

Do this

Part two · Chapter 6

THE DECAY CURVE

Most value a customer adds after day 30 arrives after day 90. Count what your flows send then.

List your flows with their delay in days. Most of the list sits inside the first month: welcome, abandonment, post-purchase, a cross-sell near day 30. After that comes a gap, then a winback somewhere past day 90. That calendar follows the odds of a second order, which peak in the first weeks. It misses where the money lands.

Where the value lands

In the skincare file (measured), about two-thirds of the change in value per customer between day 30 and day 365 happened after day 90. A flow list that goes quiet after the first month has nothing scheduled for that stretch.

The two facts fit together. A second order, when it comes, tends to come early. Value arrives later, because the customers who stay go on to place third and fourth orders over the following months. So value keeps arriving after the flows stop, and a late touch reaches fewer people with more money riding on each one.

In accounts I've audited, the direction holds across categories even when the timing moves. In seasonal apparel, the back half of the curve sits in a season that hasn't started yet.

Draw the curve

Take your last full-year cohort: customers whose first order falls in a twelve-month window that ended at least a year ago. Every one of them has had a full year to buy. For each order, count the days since that customer's first order, which is day 0. Bucket the orders into 30-day windows and add up net revenue in each, after refunds.

Divide cumulative revenue by the number of customers you started with, including the ones who never came back. That gives revenue per acquired customer. Chart that curve, because it carries order value and frequency together. A repeat-rate curve counts returns and ignores what each one was worth, so it can't show you where the money arrives.

Find the halfway day

The halfway day is the day cumulative revenue per acquired customer reaches the midpoint between its day-30 and day-365 values. Take an invented curve: $42 at day 30, $118 at day 365. The rise is $76, so the halfway mark is $80. If the curve crosses $80 at day 140, everything sent before day 140 competes for the first half of that rise.

The second half goes to whatever is still sending something worth opening in month five or six. In a flow list built around the first month, that slot is empty. Customers keep buying through it, and the program has nothing on the calendar to meet them. In the skincare file, the halfway day falls after day 90, because only about a third of the rise had arrived by then.

Count what fires after it

Go back to the flow list. Mark every message that fires after the halfway day, and total what those messages earned last quarter. Count by message. A flow with one late email and six early ones still belongs to the first month.

If the count is short, that's the gap to fill. The natural candidates are replenishment reminders timed to the reorder gap and loyalty touches that mark a third or fourth order. They qualify because they still have something true to say months after the first order. Move one past the halfway day. Read the curve again next quarter to see whether the second half of the rise moves.

Do this

Part three · Chapter 7

THE BUILD ORDER

Thirteen weeks, counted back from your peak. Each week makes the input the next one needs.

Every flow in your account shipped in some order. Usually that was the order someone asked for it. Build in the order the inputs arrive instead. Each week below produces a number the next week needs, and the thirteen weeks end the day your peak season opens.

Placement, then interval, then offer

Work those three in that order, because each depends on the one before. A reorder reminder can't earn on mail that never reaches the inbox, so placement comes first. Timing needs the interval from your order file, so it waits for the pull. The offer comes last, because a discount set before the timing exists reaches customers who were about to reorder at full price.

Count back from your peak

Peak sets the deadline because of who arrives then: the largest cohort of the year, and in some files the best. If replenishment and subscription paths are live when they place their first order, their second order has somewhere to arrive. Build those paths after peak and the first thing that cohort hears is a winback. In a holiday business, many of those second orders fall due in February.

Build the February plan in October.

Starting in January? Run weeks 1–4 now and put weeks 5–13 in front of your next peak.

Month six, built out of order

Picture month six of a program built out of order:

Some of those flows were good. None had a number waiting for it at launch, so none could be judged, and a flow that can't be judged never gets turned off. That's how the count keeps growing.

When there is no file (a launch, or a brand entering a new market the way Pepe Jeans was entering North America when I set up its segmentation in Klaviyo), write down your assumption for each number, with a date on it, and replace it with the file's number as soon as one exists. An assumption nobody wrote down becomes the timing of a flow for three years.

What stops in Week 1

Starting in order means stopping things. Freeze new flows until the numbers that decide them exist. List every flow with more than 1,000 sends and no revenue per recipient, and pause the ones with no job you can name. Run the next promotion through the four-line promotion check before it ships. Everything not on this week's card waits.

The thirteen weeks

  1. Week 1 · InstrumentInput: Your order export and your audit score.
    Build: The six pulls, the Holdout Digit written to every profile, and the Monday Scorecard stood up.
    Output: Repeat rate by first product, the reorder interval, and a scorecard read aloud once.
    Exit criterion: Every number the later weeks need exists.
    Chapter: For Your Analyst
  2. Week 2 · The mail arrivesInput: Seed addresses at each major provider and access to Google Postmaster Tools.
    Build: Authentication, Postmaster Tools monitoring and a seed check on one flow message.
    Output: A placement reading for every provider before any flow is rebuilt. Build flows before placement and you test them on the part of your file that isn't in spam.
    Exit criterion: Nothing in spam at any provider, and reputation High or Medium.
    Chapter: Prove the Mail Arrives
  3. Weeks 2–4 · The structureInput: The reorder interval and repeat rate by first product from Week 1.
    Build: Reorder timing from the file, then Structural Share, including what customers get outside the inbox, then flows that branch on first product, then subscriptions listed first and never selected by default, then SMS on the customer's clock.
    Output: Second orders that arrive without a campaign.
    Exit criterion: Replenishment fires before any winback, and every consumable offers subscribe.
    Chapter: The Kept Interval and the four chapters after it
  4. Weeks 5–8 · The file and the offersInput: A live replenishment flow, because a sale can only pause a flow that exists.
    Build: Work the back file, give your top ten percent an owner, run a capture offer, tested on 180-day margin, and set the Full-Price Window before the next sale.
    Output: Offers priced on what they do to the second order.
    Exit criterion: The next sale has its audience and its exclusions in writing before it's announced.
    Chapter: Work the Back File, then the two chapters after it
  5. Weeks 9–13 · Prove it and own itInput: Eight weeks of holdout data and a scorecard with history.
    Build: The first holdout read, the Doorway Rule agreed with whoever buys paid media, the January page, and the budget ask.
    Output: A program that can say which parts of it make money.
    Exit criterion: The budget ask is on the calendar, with the date the holdout gets read.
    Chapter: Attribution Isn't Proof, then Part five

Most of it runs on tools you already pay for. Two pieces can cost money: the paid layer in the back-file program and SMS if you don't send it yet. Both are optional, and each chapter says when they pay.

Wrong for you if

Your audit scored 17 or more and your scorecard already runs every Monday. The build is done; start at Part four and prove it.

Do this

Part three · Chapter 8

PROVE THE MAIL ARRIVES

Creative only wins on mail that lands. Check spam placement and reputation first.

Placement is the first variable in your email program. Creative is the last. You think the copy is tired, so you spend a month on subject lines, art direction and a new template. Revenue doesn't move, because much of your file stopped receiving your mail eighteen months ago, and no dashboard in your account reports it.

Promotions is fine: it's where Gmail files marketing mail and where shoppers go looking for it. Spam is where mail goes to die. Spam placement creeps in slowly, and monthly totals absorb it.

One home-goods brand shows where that ends. It kept mailing everyone, including 204,000 inactive purchasers. Engagement per send fell. Mailbox providers trusted each send less, so fewer people saw the next one.

$2.38 → $0.03
revenue per recipient, one home-goods brand, 2020 to 2026
4.5% → 0.7%
click rate over the same years, down 84%

No creative decision caused that slide, and none would have fixed it. AI made creative cheap, which strengthens the case for putting it last.

What Gmail and Yahoo require

Since February 2024, Gmail and Yahoo require bulk senders to authenticate with SPF, DKIM and DMARC, to offer one-click unsubscribe and honor it within two days, and to keep user-reported spam under 0.3%. Aim for under 0.1%. Microsoft applied the same authentication requirement to Outlook.com in May 2025. Klaviyo adds the one-click header for you; check every other system that sends as your domain.

Then set up Google Postmaster Tools for your sending domain and read it every week. It's Gmail's own count of how often your subscribers mark you as spam.

Since September 2021, Apple Mail can load your images whether or not anyone opens the email, so open rates overstate engagement. Judge engagement on clicks, site visits and orders. A program can report a steady open rate while Gmail files a growing share of it as spam. Read click rate by mailbox provider, and read Postmaster Tools.

Seeds for the plumbing

Seeds show you what a stranger receives: whether every flow arrives, how it renders, and whether anything lands in spam. They can't show you how Gmail treats your engaged subscribers, because Gmail filters each inbox on that person's history. Use seeds for the plumbing and Postmaster Tools for the reputation.

Send marketing from a branded subdomain, authenticated and aligned to your From domain. Where your platforms allow it, put transactional mail on a subdomain of its own. The split limits the damage a bad promotional month does to your shipping confirmations, without walling it off.

Before DMARC moves past p=none, list and authenticate every system that sends as your domain: Shopify notifications, the helpdesk, the subscription app, the review app. A stricter policy tells mailbox providers to junk or refuse mail that fails. Any sender you missed stops arriving the day you tighten it.

Mail the people who read

Define engagement without Apple's machine opens: a click, a site visit or an order, or an open your platform can confirm came from a person. Klaviyo can separate Apple privacy opens; exclude them. No engagement in 90 days drops a profile to reduced campaign cadence; 180 days triggers one last-chance message; 240 days suppresses them.

Excluding people from campaigns doesn't change your Klaviyo bill; suppressing them does, and a suppressed profile gets no flows either. Put "fewer emails" beside "unsubscribe" on your preference page, so a subscriber who wants less mail has a choice short of leaving.

Smart Sending skips anyone you messaged in the last 16 hours (24 for SMS) by default. It filters on recency, so the people it drops are recent recipients, and those are disproportionately customers inside abandonment and post-purchase flows. Reconcile every campaign: segment size against actual recipients. A gap that widens each month means your cadence is too high and the setting is hiding it.

In the US, CAN-SPAM lets you email customers who never opted in, as long as the mail is honest, carries your postal address and a working unsubscribe, and you honor opt-outs within ten business days. Your email platform's rules and Gmail's filters are stricter than the law, so design for opt-in anyway.

Ask for email and SMS consent separately, each with its own disclosure beside it. Never tick a box for the customer. Addresses added without a clear yes draw complaints, and complaint rate sets your placement for everyone.

Before peak

Fix deliverability before peak. If it breaks during peak, cut sends to your engaged file and fix authentication the same day. Leave the rebuild for January. A November deliverability failure costs you the biggest cohort you'll acquire all year. The cost stays hidden until their second orders fail to arrive, which is why the fix comes first.

Reputation is earned in the quiet months and spent in November.

Do this

Part three · Chapter 9

THE KEPT INTERVAL

Time every reorder touch to the gap customers keep, measured in your order file.

Your replenishment flow fires on a delay somebody typed in. For example, the label says sixty days, so the template nudges at day 55. Customers skip days, travel and keep a spare in the drawer, and the order file shows them reordering later. A nudge that lands while they still have product teaches them the mail isn't for them. When the right day comes, they skip it.

The Kept Interval

The label interval is a claim about dosage. It assumes the customer opens the package the day it arrives and uses it as directed. The number to time against is the Kept Interval. It's the median days from first to second order, by first product, from your order file.

Group by first product, because one interval for the catalog averages clocks that don't match. A thirty-serving tub and a ninety-day bottle don't run out together. Use the median, since a few customers who came back after a year drag a mean to a date that serves nobody. In accounts I've audited, the kept gap often runs longer than the label.

Pull the pairs

For every customer whose first order is at least a year old, take the date of the first order, the date of the second, and the product on the first. The age filter isn't optional. Customers who first bought last month can only have come back fast, and including them pulls the median early.

If you need recent customers in the read, have an analyst fit a survival curve that treats not-yet-returned customers as still waiting rather than dropping them. And don't trust a product's median on fewer than about 50 repeaters. Below that, time the flow off the product class.

Take the 25th and 75th percentiles of the same gaps. The middle half of your repeaters came back between them, and the width tells you how many touches the flow needs. The full pull is in For Your Analyst.

Place the touches

Put three reminders on the measured number: one at three-quarters of the Kept Interval, one on it, and one at a third past it. The first lands while there's product left, so shipping arrives before the runout. The second meets the median customer on the day. The third catches the slow half, and after it the customer leaves replenishment.

Take an invented product with a Kept Interval of 60 days and a 75th-percentile gap of 75 days. The reminders go at day 45, 60 and 80.

The Early Winback

One timing error sits between two flows, so neither flow looks wrong on its own. Call it the Early Winback. It's any winback that fires before your last replenishment touch, and it calls a healthy customer lapsed. In one account, the winback fired at day 45 while replenishment fired at day 70. The brand declared customers lost 25 days before it reminded them to reorder.

It happens because the winback goes up first, from a template's default delay. The replenishment flow arrives later, built by someone else. A winback usually carries a code, so a customer who'd have reordered at full price learns to wait for one.

The fix is one rule for every winback. It fires after the 75th-percentile first-to-second gap for that entry product, and never before the last replenishment touch. In the invented example, that means after day 80.

Check that the offer can run out

A reminder only works on a customer with enough product to run out of. A sample, a sachet or a two-week supply mostly won't reach a runout date, so there's no day for the reminder to meet. Ask whether your entry offer contains enough to run out. If it doesn't, fix the offer before you write a reminder.

A new brand has no pairs to pull. A zero-to-one program starts on a written, dated assumption, the way a launch has to, and swaps in the order file's median once about 50 repeaters exist. Power Provisions, a protein ramen brand, produced its first $100K in email and SMS revenue inside 30 days (platform-reported). Mike's Mighty Good is the twelve-month version of the same job: $500K+ across a year (platform-reported).

Over a year, the work shifts from building to upkeep. The interval gets re-measured as the product mix changes, and a customer who switches flavors starts a new clock.

What the predictions add

Klaviyo's predictions switch on once you have about 500 customers with orders, six months of history, recent orders, and some three-time buyers. Each profile then gets an expected date of next order, estimated catalog-wide.

The Kept Interval by entry product is sharper, because it keeps each product's clock separate. Treat the predicted date as a second opinion. Use it, check it against your own medians, and don't let it set a flow delay on its own.

Two ways a reminder fails

The first is no reason. The reminder says it's time to reorder and attaches nothing, when the customer needed the size, the shade or the routine said back to them. The second is the wrong reason: a discount code on the first reminder. It converts this month and teaches the customer to wait, so every full-price reminder after it reads as notice that a code is coming.

Timing makes both worse. A reminder that lands with more than a third of the bottle left reads as a sales push, whatever it says.

Wrong for you if

Your median first-to-second gap by entry product lands within a week of the label interval. Your timing is already right; spend the hour on the offer.

Do this

Part three · Chapter 10

STRUCTURAL SHARE

Count the second orders that arrive with nobody at a desk. Grow that share first.

Your day-4 "how to use it" email is doing the insert's job, late. The customer opened the box a day earlier. They found the product and a packing slip, guessed at the routine and started judging. A first order that gets used wrong, or not at all, rarely becomes a second. The fix sits inside the box, and it works whether or not anyone is at a desk that week.

If your post-purchase flow is a thank-you and a discount code on day three, that's a campaign on a timer. It sends a code before the customer has used the product. It also teaches them to wait for the next one.

Structural Share

Grow Structural Share before any other repeat number. It's the share of last month's second orders produced by subscription, flows or unprompted reorders: the orders that arrive with the team on holiday. A repeat rate built on campaigns follows your calendar, and it stops when the calendar does.

A campaign is a thing you send. Structure is a thing that runs.

Measure it with the holiday test. Pull every second order from last month. Tag each one by what produced it: a subscription shipment, a triggered flow, an unprompted reorder with no send attributed, or a campaign. The first three arrive with the team away. Only the campaign needed someone at a desk. Tagging a month takes an afternoon if your attribution fields are clean, a few days if not.

Take an invented brand whose second orders last month split 75% campaign, 15% flow, 5% subscription and 5% unprompted reorder. Its Structural Share is 25%, so three of every four repeat orders depend on someone building a send. Push the share past half. Put it on The Monday Scorecard, because it shows whether the program runs without you.

Before the first email

Everything that reaches a new customer before your first marketing email counts toward Structural Share, because none of it waits for anyone to press send. Start with whether the product works for them. A customer who used it wrong blames the product, so no reorder reminder wins them back. That makes efficacy and usage the first lever, ahead of any message you write.

Returns, stock and reviews

The same logic runs through returns and stock. A refund ends the relationship; an exchange keeps the customer and tells you what went wrong. A reminder for a product you can't ship does harm, because the customer clicks, finds nothing, and learns to skip the next reminder. Both failures happen in systems no campaign report reads: the returns portal, the inventory feed, the helpdesk.

Keep order and shipping confirmations about the order. The subscription offer, the loyalty pitch and the product recommendation go in marketing mail, which only reaches people who can receive it.

The six messages

For example, take an invented consumable whose customers reorder at a median of 45 days. The usage message runs off delivery. The reorder touches run off the order date, at ¾, 1× and 1⅓ of the interval.

  1. Day 0: the confirmationTransactional and plain: what they ordered, when it ships, how to reach you. Nothing to sell.
  2. Day 2 after delivery: how to use itTrigger it on the delivery event from your shipping-tracking integration, not on the order. Timed from checkout, a "how to use it" email on five-day ground shipping arrives before the box does.
  3. Day 14: the next productOne item, not a collection: whatever second-order buyers of this product buy next. If most of them buy the same item again, say so.
  4. Day 34: the reminderThree-quarters through the interval, with product still in the bottle. One-tap reorder of the same item, plus the subscription option with skip and cancel in the same line.
  5. Day 45: the askOn the interval itself. Same item, same one tap, shorter copy, still no code.
  6. Day 60: the last service messageOne message asking whether something went wrong, and the flow ends. The winback starts after this touch, never before it.

Any purchase exits the flow, and an active subscription suppresses it. No discount appears before the interval, because a code this early teaches customers who would have paid full price to wait for one.

Example: day 2 after delivery

Subject: Getting started with your [product]
Use it [how and when]. Results usually show in [weeks], so give it that long.
Not working by then? Reply to this email and a person will help.

Keep flows off the calendar

Flows never go on the campaign calendar. Once a flow lives there, someone pauses it for a sale or edits it for a launch. After that it runs only while that person remembers it. The calendar stops when the team does, so anything on it fails the holiday test. Give flows their own owner and a monthly check against the order file, and keep the calendar for campaigns.

Wrong for you if

Tag last month's second orders by source. If subscription, flows and unprompted reorders already produce most of them, the structure is built. Spend your time on offers and the back file.

Do this

Part three · Chapter 11

BRANCH ON THE FIRST PRODUCT

The first product sets which message a customer needs next. Write it down once.

Your post-purchase flow sends every new customer the same mail. They didn't buy the same thing. A full-size routine buyer, a trial-size buyer and a gift buyer each need a different next message. Branch the flow on the first product and each of them gets the one that fits.

Three branches

The repeat rates behind these branches, and what a returning customer costs through each, are in Cost per Returner. Map every SKU to one of the three before you write a message.

Full-size routine. These customers bought a habit. Send how to use it, timed from delivery rather than checkout, because a tip that lands before the box has nothing to explain. Then the next product in the same routine, then the refill on the measured reorder gap. Leave codes out of this branch, because a customer building a routine will reorder at full price, and a code teaches them to wait.

Some full-size buyers want the same item again. Measured: about 89% of repeat lipstick buyers in the skincare file rebought the same item. Where the second order repeats the first, lead with a one-tap reorder of that item and put the shade or size in the subject line. Judge that on two numbers, same-item reorders and cross-category orders, because they move separately and an average hides both.

Apparel works the same way. I wrote email and SMS for UNTUCKit (2015–17), a basics brand where the second order is a second color of the same shirt. Open rates ran above 40%, before Apple's Mail Privacy Protection made opens unreliable, while site conversion moved from under 1% to about 3.5% (reported).

The other two branches get their own sections below. Gift buyers leave replenishment. Trial and intro buyers need graduation, which is a different message from a refill reminder.

Take gift buyers out

Flag gift orders when they're placed: a shipping name that differs from billing, a gift message, gift wrap, or a gift-only SKU. Take those buyers out of replenishment, because a reorder reminder for a product they never used teaches them to stop opening. Send one plain message instead, with no discount. If they don't answer, leave them alone until the next gifting season.

Example: the gift check

Subject: Was this a gift?
Body: Your last order may have been for someone else. Pick one and you'll only get mail that fits.
Buttons: [It was for me] [It was a gift]

The graduation branch

Nobody needs a reminder to reorder a sample. The trial buyer needs a reason to move to the full size, sent while the sample is still in use. Take an invented 14-day sample, with days counted from delivery:

  1. Day 3How to use it, so the sample gets a fair test.
  2. Day 10The full size's value per ml, and the routine it belongs in.
  3. Day 13The full size, with no code.

Run it on the back file first. Send it to the travel-size entrants you already have, less anyone you can't mail, and hold out a random half. On the skincare file's 489, a 5% graduation line would mean about 12 of the roughly 240 treated graduating against almost none held out, which is readable.

A 2% rate isn't, and that's an answer too: below your line, the trial stops being an acquisition product. Set the line before the flow goes out, because a line drawn after the result will bend to fit it.

Write the entry product once

On Shopify, Klaviyo records every line item as its own Ordered Product event, and Placed Order carries the item and collection lists. What it can't tell you is which product came first. A segment finds everyone who ever bought retinol, not the people who entered on it. So write the entry product to the profile once, on the first order.

The order can start the flow before the property lands, so don't branch at the trigger. Trigger on Placed Order with one flow filter: placed order zero times before this. Add a short delay (an hour is plenty), then branch with a conditional split on Entry Product Class, which Klaviyo reads when the customer reaches it.

Or have your middleware fire its own "Entry Product Classified" event after the write, and trigger on that. The no-developer path: Shopify Flow can tag a customer with an entry-product class when their first order is created, and Klaviyo's Shopify sync brings customer tags onto the profile. Confirm the property name in your account.

The rules for naming and guarding the property are in The Data Contract, at the back of the book.

Do this

Part three · Chapter 12

SUBSCRIPTIONS

Make subscribe the obvious choice, never the pre-selected one, and customers decide once.

A second order your campaign wins has to be won again next month. A subscription wins it once and keeps it. Software makes this impossible to miss, because every customer renews or leaves on a billing date.

The renewal path has three moments: the end of month one, the failed card, the ninety seconds after someone clicks cancel. At 3Commas, subscription trading software, I worked on growth and retention from 2020 to 2022 and co-led the Copy Trader launch. There the second order was the second month, and those three moments were the work that mattered.

Your consumable brand has the same problem without the billing date. Each customer decides again, alone, on whatever day they notice the bottle is empty. A subscription turns the next decision into whether to stop, which moves your work from winning the order to protecting it. That work sits in three places: the product page, the thank-you page and the cancel screen.

Make subscribe the obvious choice, and they decide once.

The product page

Never pre-select a subscription. Before you take payment, show the price, how often it charges, that it continues until cancelled, and how to cancel, and get a clear yes. Let people cancel online as easily as they signed up. That's federal law. California's automatic-renewal law, amended in July 2025, adds annual reminders, advance notice of price changes, and a click-to-cancel button beside any save offer.

List subscribe first on any consumable item, with the saving, the interval, the price per shipment and the cancel path printed beside it. One-time purchase goes in the same control. Don't pre-select subscribe. A box that arrives already ticked buys attach rate you pay back in first-shipment cancellations and chargebacks.

Make subscribe the obvious choice, then let the customer make it. Have counsel check your renewal disclosures and reminder obligations for the states you ship to. On a kit, lead with the recurring option. In software, list the longer term first. The subscription app is often installed and paid for already, so the work is placement and wording: a theme edit measured in hours.

Write the option in the customer's words: "Ships every 8 weeks. Skip, swap or cancel anytime." Set that cadence from the Kept Interval, not the label, because a subscription that arrives before the last one is finished manufactures its own churn. Put skip and swap beside the cadence, so an early box ends in a skip.

Read two numbers weekly: subscription attach rate on eligible product-page sessions, and the share of second orders that arrive as scheduled shipments. Attach rate can rise while the second number stalls, which means customers are subscribing and cancelling before shipment two.

The thank-you page

The product is chosen, which leaves one question: how the next one arrives. Offer to convert the order they just placed. On the thank-you page, show "Make this a subscription" with the price per shipment, the interval, that it renews until they cancel, and how to cancel, and a button they press to say yes. Repeat the offer in the first post-purchase marketing email, not in the order confirmation.

Protect it in order

Value stacks in one direction, so build in that order: the card updater first, then the save flow, then the winback last. A failed card belongs to a customer who still wants the product, and the cancel screen holds a customer you can still reach. Post-cancel winback isn't a growth channel. One winback I audited converted at 0.25%.

  1. Turn on the card updaterIt pulls new card details from the networks when a card expires or is reissued, before the charge fails. Send a plain note three days before the charge to anyone whose card expires inside the cycle.
  2. Retry by decline typeRetry soft declines (insufficient funds, issuer unavailable) on a schedule. Don't retry hard declines (lost or stolen card, closed account, a do-not-retry advice code). The card networks cap reattempts and charge for excessive ones, and your billing platform's smart retries usually beat a fixed calendar.
  3. Build the save flowPut Cancel on the first screen. Beside it, ask why, and make the answer optional. Match the fix to the reason: swap, skip, downsize, pause. Keep the Cancel button on the same screen as every offer. California requires it, and it's the version nobody screenshots.
  4. Match each fix to its reasonSwap for "wrong product," one tap to the item other customers switch to. Skip for "I have too much," one tap to move the next shipment. Downsize for "too expensive" or "too often." Pause with a return date of 30, 60 or 90 days, never open-ended.
  5. Build the winback lastKeep it short, with a hard stop. It recovers the few who left for a reason you can fix.

Keep the reason list short and fixed, and write each answer to the profile. Next quarter's save flow gets built on those answers, not on opinion.

California also requires an annual reminder and advance notice of price changes. Send both from the transactional stream, where no cadence cap can suppress them. Keep failed-payment mail there too, with no discount in it, because the customer hasn't decided anything yet and a code only teaches them that a failed card pays.

Do this

Part three · Chapter 13

SMS

Texts cost money, carry legal risk and earn on the clock. Send only on the clock.

Your per-recipient math is missing a cost line. One more email costs you close to nothing. Every text is billed per message, and a picture message costs more. Texts also run under consent rules stricter than email's. Together, those make SMS worth sending only when the timing does the selling.

Consent, beside the phone field

Get prior express written consent before you send a marketing text. Put the disclosure beside the phone field: the customer agrees to receive recurring automated marketing texts at that number, consent isn't a condition of purchase, how often you'll text, that message and data rates may apply, and how to get help or stop.

A phone field without that disclosure collects numbers, not permission. Add a keyword confirmation as good practice: the customer replies YES before the first marketing text. It proves the person who typed the number holds the phone, so a typo doesn't put a stranger on your list. Register your number type with the carriers before the first send; your SMS platform will walk you through it.

Hours and caps

Federal rules bar telemarketing before 8am or after 9pm in the recipient's local time, and texts count. Florida is stricter, at 8am to 8pm, and Florida, Oklahoma, Maryland and Oregon cap marketing texts at three per person per 24 hours. Send on the recipient's clock, and cap to the strictest state you text into.

Your SMS platform probably enforces quiet hours for campaigns. Check that your flows and any API sends do too. A flow fires when its trigger fires, so a cart abandoned at 11pm, the customer's time, can get a text within the hour. Unless something holds it, that text breaks the federal window. A custom integration that posts to the API needs the same check.

Opt-outs and old lists

Honor a STOP, or any other reasonable way of saying it, right away. The federal outer limit is ten business days, and one confirmation text with no marketing in it is allowed. Treat a STOP as a stop for all your marketing texts. Before you text a list that has been quiet for a year, run it through the FCC's Reassigned Numbers Database.

Test your own opt-out path. Reply "cancel" and "unsubscribe" from your phone, and confirm both remove you.

Carriers reassign numbers, so a list that sat unused for a year holds some that now belong to someone else. A number that changed hands is a stranger who never agreed to hear from you. The consent you recorded belongs to the old owner, which is why the check comes before the send.

The economics

Add the cost line to every SMS forecast. For example, at an assumed one cent a text, a send to 20,000 subscribers costs $200 before anyone clicks. It has to earn more than a cent per recipient to cover itself on revenue. A picture message raises that bar. Email carries no such line, which is why the same offer can pay by email and lose money by text.

Opt-out rate per send is the SMS complaint rate. Put it on The Monday Scorecard beside spam rate. An SMS list can't be re-permissioned cheaply. Once someone texts STOP, the only way back is a fresh opt-in they choose to give. Smart Sending skips anyone you texted in the last 24 hours by default, so reconcile text campaigns the way you reconcile email.

Send on the clock

Send texts where the timing does the selling: replenishment timed to the interval, delivery, abandonment. Each has a reason to arrive today: the bottle is nearly empty, the box is at the door, the cart is still open. Campaign blasts burn the list, because a text with no reason to arrive today reads as noise.

Cap SMS on its own, apart from email. Start at two texts per person per week, counting campaigns and flows together. Lower the cap when opt-out rate per send rises. Never email and text the same person on the same day for the same message.

Capture and mirror

Capture in two steps: email first, then phone, each step with its own consent. The email step converts on its own, so a visitor who won't share a number still joins. The phone step then asks people who have already said yes once, with its disclosure beside the field.

If SMS runs in a different platform from email, your holdout segment, cadence caps and sale suppressions don't exist for SMS until you mirror them there. A customer held out of email who still gets texts spoils the holdout read. A customer capped at two emails can still get four texts the same week.

When it's wrong

The abandonment email is off, and nobody knows. It starts as a deliberate pause: someone turns the email off to fix a rendering problem, then leaves the company. The SMS branch keeps sending, recovery revenue keeps arriving under the SMS line, and the monthly total looks healthy. I've found it dark for more than a year. Open your abandonment flow today and confirm the email branch is live.

Example: a replenishment text, sent on the Kept Interval

[Brand]: your [product] should be running low about now. Reorder the same one in one tap: [link]
Reply STOP to opt out.

Do this

Part three · Chapter 14

WORK THE BACK FILE

Your one-time buyers are already paid for. Count who you can reach, then work them in phases.

Your one-time buyers already cost you one acquisition each. That money is spent whether you mail them or not. A second order from them costs only the program that earns it. Before you forecast anything, count how many of them you can still reach. Then work them in phases, with a group held back from the first send to prove what the program did.

Count the reachable base

Base: the one-time buyers you can lawfully and safely mail: consented, not suppressed, not bounced, and recent enough to be deliverable. Count them before you price them.

The number shrinks at every cut. A forecast built on the raw total prices people you can't mail, so the program misses its number before the first send. The reachable count goes at the top of the plan, and every rate you forecast is a rate of that count. It takes an afternoon if suppressions live in one platform, a few days if they're spread across several.

Keep two populations apart. A winback aimed at customers who cancelled a subscription usually recovers a low single-digit share of them. One-time buyers who never cancelled anything are a different group. They went quiet for different reasons. In both cases, the rate you plan on is an assumption until a holdout confirms it.

In the skincare file, 13,526 customers bought once. That is the starting count, before any of the cuts above. Forecast assumption: 10% come back for a second order. The full scenario table, with what each rate costs to reach, sits in The Budget Ask.

Age first, product second

Old files make the count harder and more important. From 2019 to 2021 I ran growth and retention across a portfolio of acquired heritage retail brands, including Pier 1 Imports and RadioShack, whose customer files had been dormant for years. The lesson holds on any back file. Dormant doesn't mean dead, and a dashboard can't tell you which records are which.

Sort by age first and product second. A buyer from the last two years who has clicked anything since is still a customer. A buyer with an old order and no activity since is a deliverability risk. Mail both in one send and inbox placement drops for the whole file. So re-permission the oldest tiers in small waves, and only the ones who respond ever see an offer.

Before the first send

A customer file you inherit with a brand doesn't come with fresh permission. Carry over every unsubscribe. Find out what the old privacy policy promised and what the sale terms allow. Ask your email platform before the first send, including a re-permission send. And treat the SMS list as un-consented until customers opt in with you. Have counsel sign off before any of it goes out.

Work it in phases

Each phase narrows the audience and raises the cost per contact, so each one has to earn the next. Write the stop condition before the phase starts. A program with no written line to cross never gets stopped. Read every phase against the same holdout so the phases stay comparable.

  1. Phase 1 · The reachable baseWho: reachable one-time buyers, cut by age, recency and first product.
    They get: three or four emails over three weeks, opening on what they bought.
    Offer: modest or none; depth only for the oldest tier, on the last email.
    Metric: incremental second-order rate, treated minus holdout, by cohort.
    Read on: day 60 for steering, day 90 for the number you report.
    Stop if: bounces or complaints climb in a cohort; pause it and fix placement.
  2. Phase 2 · Higher-intent non-convertersWho: Phase 1 non-converters whose first order beat the file's average order.
    They get: a shorter email sequence naming their product, plus texts and ads where allowed.
    Offer: the same tier as Phase 1; no layer carries a deeper one.
    Metric: incremental second orders, and cost per recovered customer against your step-up.
    Read on: day 45 from launch, then day 90.
    Stop if: a layer costs more per recovered customer than the step-up returns.

Add SMS only for customers who gave you written consent to text and haven't replied STOP. If the list has been quiet a year or more, run it through the FCC's Reassigned Numbers Database first. Send between 8am and 8pm in the customer's time zone, which sits inside both the federal and the Florida windows.

Run the paid layer only if the matched audience clears the ad platform's minimum audience size. Customer lists match well below 100%, so a small segment can fall under the minimum after matching. If it doesn't clear, Phase 2 is a second email sequence. Only upload customers your privacy policy lets you share with ad platforms, and leave out anyone who opted out of sale, sharing or targeted ads.

Phase 3, your top tenth, runs on status rather than offers, as Your Top Ten Percent lays out.

Hold out 10% for the whole program

Hold out 10% of the reachable base before Phase 1 sends. Keep them out of every phase, paid included, until the program ends. The rate you report is the treated group's second-order rate minus the holdout's.

The holdout is larger than a standing program needs. You pass through a finite base once, and there is no second run to read. Cohort is how this program gets run and defended, so the held-out group has to be big enough to read by cohort. Read it at day 90 and again at day 180, because most of the value a customer adds after day 30 arrives after day 90.

Do this

Part three · Chapter 15

YOUR TOP TEN PERCENT

A tenth of your customers can carry half the revenue. Give them an owner, not a discount.

In the skincare file, 1,831 customers, the top 10%, carried 51% of revenue. Sort your own file the same way. Then ask who in your company owns those people by name.

Build one ladder from your own file

51%
of revenue from the top 10%, 1,831 customers
18%
from the top 1%, 183 customers, starting at $1,285 lifetime
65.3%
from the top 20%

Those are the skincare file's shares, and your dollar thresholds will differ, so pull your own. Export one row per customer with lifetime net revenue, refunds deducted. Merge identities on customer ID, then email, then phone, or one top customer splits into two middling ones. Sort descending and read the revenue at the top 1%, 10% and 20% marks. Those three numbers are your ladder.

For example, an invented 10,000-customer file might put the top 1% at $2,000 and the top 20% at $300. Build each tier as a segment of lifetime revenue at or above its threshold, so new qualifiers enter on their own, and recompute monthly. Klaviyo's predicted CLV is a sanity check on the ladder. The pull takes an afternoon if customer IDs are clean, a few days if not.

What an exchange showed

An exchange runs the same curve with the volume turned up. As a contract retention marketing manager at Binance (2019–20), I worked on designing the VIP loyalty tiers and shipped more than twenty customer journeys. The tier was set by rolling trading volume and recomputed constantly. A trader could enter it on a Monday and drop out by month's end without churning in any way an email platform would see.

Everyone at the company knew it: the top of the file carried the business. The rolling tier made decline visible while it could still be reversed. The effect on lifetime value and on churn in that cohort was reported internally as a before-and-after, so read it as a pattern rather than a measured effect.

Write a goal that can fail

"Improve retention" has no denominator, no owner, no date and no failure condition, so nobody can be wrong about it. "Zero churn in the top 1%" has all four. It fails the first time a name drops off, which is what makes it usable.

In the skincare file the denominator is 183 named people. The owner holds the list, and the date is the review. Replacing one top-1% customer takes about nine new customers at the file's $142 average, and that $142 already assumes three of every four never come back.

Watch for absence

Hold two tiers side by side, because lifetime revenue only goes up and a customer who stopped buying two years ago stays in the lifetime tier. Trailing-twelve-month revenue drops them once they slow down. The Monday list is the gap: customers still in your lifetime tier who have dropped out of your trailing-twelve-month tier. Each one is a name for the owner to contact that week.

Set the absence alert by product. Fire it when a top-tier customer passes the 75th-percentile gap between orders for what they buy. Test predicted churn risk as a second trigger. A site-wide 90-day rule notices a monthly buyer at day 91, six weeks late, and flags a quarterly buyer at day 91, six weeks early.

Pay the tier in status

This tier reorders on its own clock, so a code sent to it marks down orders that were coming anyway. The rule: no codes sent to this tier, and no tier-specific depth. Track the tier's discount share apart from the file's, because a blended figure hides the drift. Pay the tier in status instead.

TriggerCadenceMessageBenefitOwner
Enters the top tierWithin a dayWelcome note signed by the ownerEarly access, direct reply addressTier owner
Absence alertPast the 75th-percentile gapPersonal check-in on the productReplacement without a ticketTier owner
Close to the next tierPoints to next tier below your lineThe gap and what the next tier bringsStatus at the next rungLifecycle lead
Quarter opensQuarterlyNote from the owner on what's comingFirst look at new productsTier owner

Loyalty rides in mail you already send

Sync three profile properties from your loyalty app on every change: points balance, tier, and points to the next tier. Store the numbers as numbers, or greater-than filters fail.

Put loyalty inside mail that already goes out: points earned in the first post-purchase email, and the balance and what it buys in the replenishment reminder. Keep order and shipping confirmations about the order. Klaviyo won't let a transactional message carry an offer, and a confirmation that leads with one counts as marketing mail.

Tier-up carries nothing but good news, so send it within the hour of the tier change.

One example: the you're-close email

You're 120 points from Gold. Gold members see new products a week early and get a named person to write to. Your next reorder gets you there. One button: Reorder and reach Gold.

Ask for referrals in the good moments

Referral works when someone the customer trusts asks at a moment when the ask makes sense. At Heathers Mission, a nonprofit I worked with, I helped raise more than $100K. Its 2020 World Marathon Challenge, Jonathan Negretti running seven marathons on seven continents in seven days, raised more than $30K and delivered a thousand bears.

Put the referral link in the happy moments: the welcome, the first email after delivery, and the loyalty emails. Give each customer a personal link, pre-filled share text and a two-sided offer. Keep it out of abandonment and winback flows, because a customer you're chasing isn't about to recommend you.

Never buy reviews, never tie an incentive to a positive review, and ask every customer, not only the happy ones. If you reward a review or a referral post, the reward gets disclosed: put it in the pre-filled share text.

Prove it with a holdout

Never prove the program by comparing members with non-members; members were your best customers before they joined. If you're launching, roll it out to a random 90% first and read repeat rate at 90 days against the 10% who don't have it yet. If it's already live, hold a random 10% out of the loyalty blocks and triggered flows.

Do this

Part three · Chapter 16

MARGIN IS A RETENTION METRIC

Every discount teaches customers what your price is. Price that lesson before you send it.

Every code you send changes what a second order is worth. Take an invented brand with an $80 average order and a 62% product margin. A second order at full price carries $49.60 of gross margin. Take ten points off and the order is $72, but product cost hasn't moved, so the margin drops to $41.60.

Those ten points remove $8, 16% of the second order's margin. To break even, the discount has to produce about 19% more second orders than full price would: $49.60 divided by $41.60 is 1.19. Twenty points off leaves $33.60 of margin and needs 48% more.

Both lines assume every discounted order is new, and some of those customers were coming back at full price anyway. The customer you win at 40% off comes back for 40% off.

Wrong for you if

Split your next offer against the same email at full price. If the offer arm clears your break-even lift (for the invented brand, about 19% more second orders at ten points off), your discounting is paying. Keep it and skip to the calendar.

The first discount you ever give

Test the capture offer on 180-day margin per subscriber, not on sign-up rate. Try percentage off against free shipping, a gift with the first order, and no offer. The code that wins sign-ups often loses the second order.

Sign-up rate is what the pop-up tool reports, so it wins by default. A deep code fills the list with people who came for the code. Margin at 180 days counts their second order, so it catches the trade. If the California privacy law covers you, a sign-up discount counts as a financial incentive and needs its own notice.

The four-line check

Run the four-line check before anyone builds an offer. It takes ten minutes. Each line forces a decision someone would otherwise skip, so the habit the offer teaches gets priced while changing it still costs nothing.

  1. Write the offer in one lineDepth, mechanic, audience, window. If it won't fit on a line, customers won't follow it.
  2. Write what it teachesWhat will a customer who takes it believe in 90 days? Be literal: "This brand takes 20% off the last week of every month."
  3. Name the next full-price askSay which full-price message follows, and whether the customer you've taught will believe it. If not, price the offer as a price change.
  4. Price it at full redemptionAssume everyone eligible takes it, at your margin mix. If it only works at the redemption rate you hope for, it doesn't run.

Try mechanics before depth

Depth changes what customers expect to pay. Each mechanic below changes what they get instead, so full price survives the promotion. Reach for depth only when nothing above it answers the objection.

The Full-Price Window

A code sent to a customer five days from reordering pays for an order already coming, a week early and minus the margin. The Full-Price Window stops that. Anyone whose reorder falls inside a sale or the week after it leaves the sale audience and keeps the full-price reminder.

Build the window from a profile property: last order date plus the median interval for what they bought, or your platform's expected-next-order date. Brief support before the sale opens. A customer who asks gets the sale price, no argument. The rule governs what you send, not what you refuse. Teams resist this rule. It's the easiest money in the chapter.

The fourth number

Every offer has a fourth number: what it costs if it works, at the highest redemption you can imagine. Most offers get priced at the redemption someone hopes for, so success goes uncosted. Write the fourth number down before anyone books the date.

A big offer shows how. I co-led Gallery Furniture's 2022 "Astros Win You Win" promotion. Customers who spent $3,000 or more on qualifying furniture got their money back if the Astros won the World Series. The owner, Jim McIngvale, hedged the refunds with about $10M in sportsbook bets at 7.5 to 1. The Astros won.

The $75M payout funded about $74M in refunds, so the promotion netted about $0 on the refunds while store foot traffic rose 500%. The hedge made the refund free: the fourth number was priced before the offer ran.

A promotion that brings in thousands of first buyers is half built until the second order for them is planned. Write that plan before the offer goes on the calendar.

Build the calendar backward

A quarter has room for three to five dated offers. Past that, the calendar becomes a habit customers learn. Keep flows off it, since a scheduled flow stops firing on behavior.

At Nexus Agriscience, a multi-brand cannabis portfolio selling B2B and direct, the calendar is set by regulation and platform policy: no paid social, restricted email content, compliance review on every send. It's the constraint every regulated business works under.

Build that calendar backward from the review queue. If review takes five business days, an offer locked seven days out leaves no room for a round of edits. Copy comes from an approved phrase library, and the offer often becomes access, timing or a bundle.

Send the sale in waves

Send to your most engaged customers first, so the first response mailbox providers see is your best. Engaged means clicked, visited the site or ordered in the window; opens count only with Apple privacy opens excluded. Each announcement wave excludes anyone who received an earlier one, and anyone who orders drops out. On a short sale the waves run hours apart.

The last call goes only to earlier recipients who didn't click or buy. The deadline has to be real. When it passes, the price goes back.

Write your cadence caps down, then build them. Make a campaign exclusion segment of anyone who received three or more emails in seven days, and decide which flows are exempt. If SMS runs in another tool, sync a "texted today" property both ways, or say the cap is per channel. Smart Sending isn't a weekly cap, so the segment is the cap.

One account I audited made 275 production sends across 148 active days in twelve months; 82 days ran both email and SMS, and 27 days had three or more sends.

Test against full price

Offer tests run inside the treated group: randomize the offer against the same email at full price. The universal holdout already covers "did the mail do anything." Add a separate no-send arm only when the audience clears the Single-Digit Stop.

Score on placed-order rate, so one huge basket can't swing the result. Report revenue per recipient beside it with the largest orders capped. If the offer lifts orders but lowers revenue per recipient, check that trade against the break-even lift above.

When the code is the price

In the skincare file, 58% of orders carried a discount code. Keep the label: codes miss automatic discounts and markdowns, so the share of orders sold below full price was at least that high. When most orders carry a code, the discounted price is your price.

A "was" price has to be one customers paid for a meaningful stretch. Stop striking through a price nobody pays.

Do this

Part four · Chapter 17

ATTRIBUTION ISN'T PROOF

Rank flows on revenue per recipient. Fund the program on a holdout big enough to read.

Your flow report credits each order to the message that sat closest to it. Use it to rank flows; it proves nothing about growth. Proof takes a holdout. A holdout only works under three rules nobody writes down: write the random number once, let nothing overwrite it, and read it across the whole program. Then comes the limit: on a small file, a holdout can only confirm a large effect.

Attribution answers a bookkeeping question: which touch sat closest to the order. The business question is whether the order would have happened without that touch. A customer running low on moisturizer walks toward checkout on a schedule set by the bathroom cabinet. The replenishment email in front of them collects credit for an order already on its way. Attributed revenue is a program grading its own homework.

The error grows as targeting improves, because a flow aimed at likely buyers claims orders they would have placed anyway. In accounts I've audited, the channels' attributed totals often add up to more than the store sold. That makes attributed revenue unfit for a funding decision. It still works for an operating one. There a rough ranking is enough, and a wrong call costs one rewrite.

Attributed revenue tells you which flow to rewrite next; only a holdout big enough to read tells you whether the program grew the business.

Rank on revenue per recipient

Divide each flow's attributed revenue by the people it reached. Totals reward whatever you sent to the most people. A big list can hide a weak flow for years. At a promotions-led brand, a welcome-tail flow had sent 27,326 emails and looked busy. Those sends produced $237, or $0.009 per recipient. Per-recipient ranking puts that flow at the bottom of the list; a total hides it.

Don't let that ranking settle a test. One large order can swing revenue per recipient in a small arm and crown the wrong variant. Score a test on placed-order rate. Report revenue per recipient beside it, with the largest orders capped so a single big order can't pick the winner.

The Holdout Digit

A holdout is a randomly chosen group that gets no marketing at all. It turns your program into a randomized experiment. Because assignment is random, both groups get the same product mix, the same season and the same paid spend. Any gap in purchase rate between them is what the program caused, whichever tool claims the click.

Assign the group with the Holdout Digit. It's a random number from 0 to 99, written once to every profile at creation and never recomputed. Buckets 0–4 are your holdout. Store it in a profile property called Holdout Bucket and hold it to three rules.

  1. Keep it stableWrite the digit once, when the profile is created. Put the holdout range in the runbook. Changing the range mid-read spoils every day of data before the change.
  2. Guard the writeNothing overwrites it. Write only when the field is empty, or derive the digit from a hash of an immutable ID, so nothing is written and nothing can be reshuffled. A sync that recomputes it reshuffles your control group and leaves no trace.
  3. Read it pooledRead the holdout across the whole program, not per flow. Split a small control group five ways and you get five unreadable answers instead of one readable one. The budget covers the program. Nobody funds a winback flow.

Apply it everywhere

Define the holdout once, as one segment (Holdout Bucket 0–4), and apply it everywhere: a filter in every marketing flow, an exclusion on every campaign, and a synced exclusion in your SMS platform and paid audiences. Klaviyo won't apply it for you.

Then build the leak check: a segment of holdout profiles who received any marketing email or text in the last 30 days. It should be empty. Read it every Monday. One forgotten exclusion gives the holdout some marketing, and the read then understates what the program did.

Never withhold a message the law requires: renewal reminders, price-change notices, order and safety notices.

Size it before you pick a percentage

Work out what your file can detect first, then choose the percentage. Read purchase rate, not revenue. A purchase rate counts each buyer once, while a revenue average moves with one big order.

Take an invented file: 10,000 contactable profiles, a 10% holdout and an 8% ninety-day purchase rate. At 80% power and a two-sided 95% test, the smallest difference you can reliably see is about 2.5 points. That's a lift of roughly a third, which is bigger than most programs' true effect.

So on a small file, hold out 15–20% if you can afford it, read at 180 days, and say in writing that the holdout can confirm a large program, not measure a modest one. Five percent starts to work near 100,000 contactable profiles.

Write the read date down before launch and agree it with whoever will read the result. Checking early and often turns a null result into a false positive, because every extra look gives noise another chance to cross the line.

What it costs

A 5–10% holdout costs a few percent of flow revenue for six months. Skipping it means you can never say the program earned anything, including to whoever decides whether to keep paying for it. Bring the read to The Budget Ask. Finance can check a randomized comparison the way it checks sales.

There's no holdout result from my own work in this book. That is the gap this chapter exists to close, in your program and in mine.

Wrong for you if

Your contactable file is under about 50,000 profiles and you can't spare a 15–20% holdout. A universal holdout will only confirm a large program. Rank on revenue per recipient and treat the holdout read as a check for a big effect.

Do this

Part four · Chapter 18

THE SINGLE-DIGIT STOP

If a test can't expect ten conversions per arm, don't run it. Decide and say so.

Before your next test ships, multiply its baseline rate by each arm's size. The result is the number of conversions each arm can expect. Under ten, don't run the test, because no method turns eight conversions against eleven into a finding. Decide another way and write down how you decided.

The Single-Digit Stop

Call the rule the Single-Digit Stop. Baseline rate × arm size = expected conversions per arm; under 10, don't run the test. For example, a 2% conversion rate on 400 people per arm expects eight orders in each. That test doesn't ship.

Two things set what a test can see. Noise shrinks with the square root of the count, so quadrupling the sample only halves the smallest effect you can detect. That is why one more week rarely rescues a test that was too small on day one. Rarity matters as much, since a rate is only as solid as the number of events behind it.

Small samples can still see large effects. What they lose is the small ones. A new subject line is a small effect; a different entry product can be a large one.

What one file can read

One skincare brand's six-year file shows the limit. Each figure below assumes 80% power and a two-sided 95% test.

+5.4 pts
smallest readable lift at the lipstick row's 12.2% repeat baseline, 1,379 customers across both arms
930
customers across both arms to see +2 points on the 0.20% rate at which travel-size buyers graduated to full size
2,180
customers across both arms to see +1 point on the same 0.20% base

At the lipstick row, repeat purchase has to climb from 12.2% to about 17.6% before a result is readable. A two-point gain, which would be a good result for a flow rewrite, stays invisible at that size. The interval table in Cost per Returner shows the same limit row by row.

The event count decides what you can test, whatever the headcount. When I ran sales at mostdope, a CRM for roofing and solar contractors, one quarter produced twelve new customers. Twelve is a good quarter and a hopeless sample. Subscription software sits at the other end, because every subscriber makes a renewal decision every month. Pick an outcome that happens more often.

Run the check

  1. Write the baselineTake it from your own file, for the outcome the test will be graded on, at the definition you'll use. No industry benchmark.
  2. Count each armUse last month's real entry volume. Subtract anyone suppressed, bounced or already in another test.
  3. Multiply and stopBaseline × arm size. In single digits, stop here.
  4. Write your expected effectWrite it before you look at the detectable effect, so the calculator can't talk you into its number.
  5. Get the detectable effectAny sample-size calculator at 80% power and a two-sided 95% test. If it beats the effect you expect, the test can't answer.

When the answer is no

"Inconclusive, deciding on judgment" is a legitimate verdict. It records what was measured and leaves the reasoning where the next person can find it, so the call can be reversed when better evidence arrives. A judgment call dressed as statistics does more damage. "Variant B won" on a few hundred people per arm gets written into a playbook and used a year later against a finding that holds.

Wrong for you if

Multiply your baseline rate by your arm size. If you expect well over ten conversions per arm, run the test; this chapter is for smaller files and rarer outcomes.

Do this

Part four · Chapter 19

THE MONDAY SCORECARD

Eleven lines, read aloud by the same person, in the same order, every week.

Your paid team reviews last week's spend line by line every Monday. Give the second order the same slot: eleven lines, read aloud by its owner to the people who can fix what they show. Same order every week, including the lines that didn't move.

The owner is held to one number: repeat rate at a fixed age, this cohort against last year's at the same age. The eleven lines, read weekly, show why that number is moving. The Forty-Minute Audit, run quarterly, checks the system underneath both. Wherever a line says engaged, it means clicked, visited or ordered; count opens only with Apple privacy opens excluded.

The eleven lines

  1. Owned-channel revenue and shareDefinition: email and SMS revenue on a click-based window, as a share of store revenue that week. SMS: opt-out rate per send is its complaint rate; read it here.
    Bad reading: dollars up, share down: the store grew, the program didn't.
  2. DeliverabilityDefinition: Gmail spam rate and domain reputation from Postmaster Tools, plus bounce, unsubscribe and click rate by mailbox provider, with the engaged and dormant files read separately.
    Bad reading: a spam rate above 0.1% on any day, or reputation dropping a tier.
  3. List growth and capture rateDefinition: net new mailable profiles, and the share of visitors who left a working address.
    Bad reading: giveaway-driven growth, which drags deliverability down within a month.
  4. Structural ShareDefinition: the share of last month's second orders from subscription, flows or unprompted reorders, with subscription share and active subscribers inside it.
    Bad reading: subscription share up, active subscribers down.
  5. Replenishment-flow revenueDefinition: the replenishment flow's revenue per recipient, trailing four weeks.
    Bad reading: total up, per-recipient down: the flow is turning into a campaign.
  6. Repeat rate at 30, 60 and 90 daysDefinition: the share of a week's new customers who reorder inside each window, read once the cohort is old enough. A weekly cohort line needs a few hundred first orders a week; below that, read it monthly.
    Bad reading: any window falling for three straight cohorts.
  7. Loyalty tier movement and redemptionsDefinition: weekly tier moves, and points redeemed over points issued.
    Bad reading: issuance up with redemptions flat, or a month without a tier move.
  8. Referral share of new customersDefinition: first orders from a referral code or link, as a share of all first orders.
    Bad reading: a share that moves only when the bonus doubles.
  9. AOV and upsell take rateDefinition: average order value, and the share of orders taking a cart or checkout upsell.
    Bad reading: AOV up only in discount weeks, or a take rate frozen since launch.
  10. Contribution margin per orderDefinition: revenue less cost of goods, shipping, fulfillment, payment fees and the discount, divided by orders.
    Bad reading: orders and revenue up, this line down: a promotion-led quarter.
  11. Cohort LTV by acquisition sourceDefinition: each source's revenue per customer to date at matched ages, day 90 against day 90.
    Bad reading: cheap first orders and weak matched-age value on the source about to be scaled.

Three disciplines

Show every channel number with its denominator. "Flows did $58,000 last month" tells the room nothing. For example, flows did $58,000, which is 10.7% of store revenue, against 15% a year ago. Reported alone, a channel number rises with the store, and the program takes credit for a good quarter while its share falls. When paid gets cut, the number falls with it, and the program takes the blame.

Label forecasts where they sit. A projected lift gets pasted into a deck, forwarded twice, and lands in a board summary as a result. The word forecast lives in the cell, not in a footnote, until the read replaces it.

Read it aloud, in order, by the same person. Line two gets read whether or not it moved, because the week it's skipped is the week a drift goes unnoticed. The reader doesn't rotate, because a number read by a different person each week has nobody who remembers last week's.

A number read aloud to the same room for three consecutive weeks while it drifts down becomes unbearable in a way a red cell on a dashboard never does.

Somebody fixes it to stop hearing it. Eleven lines read aloud take about twelve minutes. Thirty can't be read aloud, so a thirty-line scorecard gets skimmed, then delegated, then mailed as a PDF. A new line gets in only by displacing one of the eleven.

What goes upstairs

The CEO, the CFO and the board don't get eleven lines. They get three, on one page, once a month: the one number, this cohort against last year's at the same age; contribution by order number, what the first order lost and what the second made; the next holdout read, its date and the forecast it will replace, labeled forecast.

Keep the page identical every month. When a line gets worse, it goes first, before anyone asks.

Do this

Part five · Chapter 20

WHO OWNS THE SECOND ORDER

Acquisition has an owner by name. The second order needs one too, with authority to act.

Ask your team who owns cost per acquisition. You'll have a name in under a minute. Then ask who owns whether those customers come back. You'll be asking all week, and the answer will be nobody.

Acquisition has a budget, a daily dashboard, a standing meeting and an owner whose bonus moves with the number. The second order has a flow someone built eighteen months ago and a line in a monthly deck. That's an org-chart problem before it's a marketing one.

Four gaps between functions

The work goes undone in teams full of capable people, because it sits between four pairs of functions, and everything in a gap is somebody else's job.

  1. Marketing and merchandisingWho picks the entry product. Merchandising picks it on the number it's held to, conversion rate, and cheap items convert. Whoever gets asked about repeat rate a year later is rarely in the assortment meeting.
  2. Marketing and the front lineWho knows when customers run out. Floor staff, the phone team and retail partners hear it from customers every week. It rarely reaches whoever builds the flow, so a platform default sets the timing.
  3. Growth and financeWhose margin a retention offer spends. Growth books the discount as a conversion cost and finance books it as leakage. Neither owns the trade, so whoever holds the deadline sets the discount depth.
  4. Email and paid mediaWho claims the revenue. Both dashboards book the same order, and the two totals can add up to more than the store sold. That argument is how working programs get cut.

In a product-led business there's a fifth: marketing and product, and who owns what a customer experiences between the first order and the first message. Structural Share covers it. Each gap produces a number that gets blamed on marketing, when the decision behind it was never assigned to anyone.

One name, one number

Close the gaps with one named person who owns one number. Title doesn't matter, and a team or a committee won't do. When the repeat rate moves, one person gets asked about it, and that person can't point at three other teams who touched it.

The number is repeat rate at a fixed age: the share of a cohort that has ordered again by day 90, or by day 365 if your cycle is long, read against last year's cohort at the same age. The fixed age matters because a young cohort always looks worse than an old one, so comparing them at different ages flatters the older one.

Define the number in writing and refuse a second one. When two numbers disagree, the owner can always point at the one that moved the right way, and accountability dissolves.

Then give the owner authority to do at least one of three things without joining a queue: change an entry offer, change flow timing and suppression, or veto a promotion that damages the file. Each moves the second order, and each sits on someone else's calendar. Without any of them, the owner is a reporter with a metric, and the metric keeps sliding while they describe it accurately every month.

Journey and playbook, together

Gallery Furniture sells a high-consideration purchase through a showroom floor, an outbound sales team and digital, often to the same customer in the same week. In a business shaped like that, the messages and the sales conversations usually sit in separate functions.

As Senior Director of Growth and Retention Marketing at Gallery Furniture, I rebuilt the customer journey and the sales playbooks together. The follow-up after a quote, the floor script and the email that came after it were written as one system, so they couldn't contradict each other.

Customer lifetime value rose 330% over four years, by the company's internal measure. That's a before-and-after, not a controlled test, so this book doesn't claim how much came from the rebuild and how much from everything else that changed in four years.

Split the same work across two teams and you get two competent halves that don't compound. If your email team owns the messages while someone else owns the entry offer, the timing and the promotion calendar, you have that split.

Who it is, at your size

Under about $5M, it's the founder. Put the one number on the founder's Monday. From $5M to $20M, it's the head of growth, with the three authorities written into the job description. The builder can be an agency or a contractor. The owner can't.

Above that, it's a dedicated owner with a small team: someone who pulls the order file, someone who builds flows, someone who writes. Hire the pull first. A team that can build but can't measure ships a flow for everything by month six.

In a large company the work spreads across product, data and engineering, and the rule gets stricter. One person owns the number. Everyone else owns a piece of the work, and the owner's calendar has their standing meetings on it.

The meetings the owner sits in

Ownership shows up on a calendar. The owner needs a standing seat in four meetings:

The media meeting is the one owners are rarely invited to, and it's where the entry product gets chosen by accident. Budget there moves on cost per acquisition and blended lifetime value, two averages across customers who behave nothing alike.

Bring one slide: repeat rate and day-365 value by entry product, with the count beside every row. Without it, the ad set driving cheap trial looks like efficient acquisition, and nobody in the room can say otherwise. Cost per Returner turns that slide into a budget line.

Wrong for you if

Name the person who can change an entry offer this week without asking anyone. If that name exists and the one number is on their Monday, the ownership is built; skip to The Budget Ask.

Do this

Part five · Chapter 21

THE BUDGET ASK

Lead with the forecast you'd defend, label it a forecast, and staple the holdout to it.

Open your budget ask with a count of customers who bought once. Add what a second order is worth and a table of forecast rates, and hold the word retention for later. Budget moves when one number sits beside another and the gap is hard to ignore. Do the arithmetic in public, slowly enough that finance can check every line.

Three inputs

Three inputs, and only three. Two come from the order export; the third is an assumption and says so.

  1. Reachable one-time buyersCustomers with one order whom you can lawfully and safely mail. The skincare file has 13,526 one-time buyers before that cut.
  2. The step-up$89: the lifetime average for customers with exactly two orders minus the average for one-order customers.
  3. The incremental rateTreated minus holdout, written as an assumption until a holdout read replaces it.

Incremental means reorders among the people you mailed, minus reorders in a holdout you didn't. A platform-attributed rate also counts people who'd have come back anyway, so a table built on it runs high.

The table

Build this table for your founder, and show all five rows.

Incremental rate (treated minus holdout), forecastCustomers recoveredRevenue (forecast)What it takes
5%676$60KA bare email reactivation flow
10%1,353$120KA standard winback program, run well
15%2,029$181KWinback plus SMS (costs more per contact)
20%2,705$241KMulti-touch plus paid retargeting (costs more)
25%3,382$301KBest in class, deep personalization

Forecast scenarios, not results. Base: 13,526 one-time buyers × the $89 step-up. Your base is the one-time buyers you can lawfully and safely mail. Count them before you price them; on a six-year file it will be well under the total. With a 10% holdout, 12,173 people are contacted, so multiply by 0.9. No allowance for the discount on the reactivating order: it comes out of the step-up.

At an assumed all-in $5 a contact, $67,630 across 13,526 people, the 10% forecast returns about 1.8 times its cost in revenue, before product cost and discount. The 5% row doesn't cover it. Break-even on revenue sits near a 5.6% rate.

Lead with the row you'd defend

You'll want to lead with the 25% row. Don't. Point at the 10% row and say: "This is an assumption, not a result. It's the row I'd defend. Everything above it is upside I'm not asking you to fund."

Lead with 25% and you spend twenty minutes defending a number you have no data for. Lead with 10% and the question gets simple: can the program run for a few dollars a contact, all in? An email program can; the offer is the real cost. The holdout will tell you which row you landed in. The ceiling starts a fight about optimism. The row you'd defend starts a decision.

Why the table may run high

The $89 is the gap between customers who came back on their own and customers who didn't. Customers you win back with an offer land below it, because the discount comes out of the step-up. So label every row a forecast, and subtract the offer before the slide goes out.

The first time a program beats its forecast, everything else on the slide becomes credible. The first time it misses, nobody believes the slide again.

What to say

Once the inputs exist, say something close to this.

"You have [count] customers who bought once. On your own file, net of refunds, a customer who orders again is worth [step-up] more. I am not asking for a retention budget. I am asking for [amount] to go after the 10% row, labeled forecast. I'll hold back a no-send group from day one, so you can see whether it worked without taking my word for it."

Every clause does a job. The count and the step-up come from the founder's own file, so there's nothing to take on trust. The 10% carries its label, which makes it believable. The holdout is an offer to be proven wrong. Make it before they ask. Keep lifetime value and loyalty out of the meeting: both are true, and neither has a price tag.

Put three lines on the budget

A retention budget that's one number gets cut as one number. Split it.

Finance can argue with each line. It can't say you hid one.

When finance pushes back

Finance will say the attributed number overstates the program, and they're right. Concede it before they raise it: "Some of these people would have reordered anyway. The holdout design, the group size and the read date are on this page." The holdout mechanics are in Attribution Isn't Proof.

Conceding first removes the one serious objection, and it shows you know where your own numbers are soft. A finance team that watches you flag the weak spot gives you more room on the rest of the case.

Promise a measured read on a named date: incremental revenue per profile, treated against holdout, by the method agreed that day. Promise the work: the flows, the segments, the data fixes. Never promise a number. Say it out loud: no honest operator sells a guaranteed lift. Treat any guaranteed percentage as a sales number, not a forecast.

Refuse the guarantee, offer a method and a date instead, and you're offering the one thing an attribution report can't. Ask for a bounded amount over a set window, sized so the holdout can return a readable answer. A budget too small to read buys an inconclusive result and a harder second conversation.

Wrong for you if

Count the one-time buyers you can lawfully mail. If the 10% row on that count won't pay for the people and tools on your first budget line, fold reactivation into your existing flows and skip the separate ask.

Do this

Part five · Chapter 22

THE DOORWAY RULE

Never pay for an order you already own. Settle attribution in January, in writing.

Your replenishment flow and your retargeting ads chase the same customers every week. The jar runs low and the reminder lands. On the way to your site, the customer clicks a dynamic product ad for the item they were already rebuying. The ad platform books the order on its click window. Your flow report shows revenue softening. Together the two reports claim more than the store sold.

Next quarter, budget follows the numbers. Money moves from the program that made the demand to the channel that intercepted it. The orders keep arriving on momentum for a while, then fall off. The blame lands on the flow, because its report is the one that looked weak.

The retargeting ad did not create that order. It stood in the doorway and took credit for it, and your reporting stack agreed.

A showroom has the same problem with more doors. In my years at Gallery Furniture, one sofa could be touched by a showroom associate, an outbound salesperson and a digital ad. At month end, all three could claim it. Each claim would be defensible in its own tool, and none of the tools could see the other two.

The Doorway Rule

The Doorway Rule removes the conflict at the source. No paid retargeting to a customer inside an active post-purchase or replenishment window. A good share of retargeting ROAS on existing customers can be replenishment you already had. Suppressing it saves some spend, and it makes both channels readable, because paid stops booking orders it didn't cause and the flow's number means something again.

Build the suppression audience

Set the window from your own repeat timing, not a platform default. Find the day your second orders cluster. Run the window from a few days after purchase to two or three weeks past that cluster. The audience is every customer with a purchase inside that window and an owned sequence still running. Update the exclusion every day, because the window moves in days and a weekly update leaks.

Exclude dynamic product ads for items the customer already owns. Those ads pay to show someone what they're already rebuying. When the owned sequence ends without an order, lift the exclusion and let paid have them. Permanent suppression is its own mistake; it costs you the paid team's agreement. Only upload customers your privacy policy lets you share with ad platforms, and leave out anyone who opted out.

Check that it bites. Match rates on customer lists run well below 100%, and Advantage+ and Performance Max campaigns can limit or override exclusions. Confirm in each platform that the audience is being excluded, not just uploaded. Where the campaign type won't honor it, use the platform's existing-customer controls, or accept a partial fix and say so.

Settle it in January

Agree the rules on one page before the numbers exist and anyone's bonus rides on them. The January page names the click window, whether view-through counts, the attribution model, the one tool that is the source of truth for revenue, and the tie-break rule for when two reports disagree. The paid lead signs it before the quarter opens, because an unsigned page gets reopened the first time a number disappoints.

It is a five-minute conversation in January and an unwinnable one in April, when each party is defending a number already reported upward. In a seasonal business, sign it before the season opens.

Report the double count

Once a quarter, add up the revenue every channel claims and subtract what the store recorded. The excess is the double count. Report it as one line, without commentary, and watch it shrink. When two claims collide on one order, a one-question post-purchase survey asking where the customer first heard of you is the cheap tie-breaker.

A holdout settles what the argument can't. The control group's revenue already includes every paid conversion those customers made, so no window setting changes the gap between the groups. Attribution Isn't Proof sets one up. Bring its read when the budget conversation turns adversarial.

Two dates a year

The paid team is not your opponent here. They read their dashboard correctly, the same as you read yours, and the conflict lives in the measurement system. You can be right about attribution and still lose, because becoming the person who raises it in every meeting is a reputation that outlasts any argument you win.

So hold the fight to two dates a year. Sign the page in January and report the measured read on the agreed date. In between, report owned revenue as a share of store revenue, keep the suppression audience current, and talk about the work.

Wrong for you if

Match last quarter's retargeting conversions to customers inside an active replenishment window. If few of them were, your paid team already suppresses; go straight to the January page.

Do this

Part six · Chapter 23

WHEN THE SECOND ORDER ISN'T AN ORDER

In considered purchases the return is a referral, an accessory or a second room. Count those.

Your repeat rate may say your category is dead. Sofas, mattresses and golf clubs are considered purchases. The next order can be years away, and it may not be a product. It comes back as a referral, an accessory, a second room or a replacement. You can count each of those once the file records it.

Put the floor in the file

The sale happens across several visits, in a showroom or on a sales call. The customer file usually holds only the checkout. Write each showroom visit or sales call as an event: date, location, associate, categories viewed, and whether a quote or design consultation happened. Store the associate's name on the profile and sign the follow-up from them.

The associate is a channel with a memory. A note from the person who spent an hour with the customer continues a conversation. A note from a brand they've never met starts over. So the cohort table belongs in the floor meeting too. Sales teams act on it fast, because it maps onto conversations they're already having.

Bring three cuts to that meeting. First, which entry categories bring customers who come back or refer. Second, which associates' customers spend more and which refer more; they aren't always the same people. Third, what the top tenth of the file bought first, which tells the floor what to lead with when a customer can't decide.

Four ways the customer comes back

Referral comes first. A buyer of a large in-home purchase knows people about to make the same decision. In this category, a referred customer is the repeat. Tie each new customer to the buyer who sent them, and report referral share on the line where a consumables brand reports repeat rate.

Attach and accessories come next: the protection plan, the rug, the pillow, the cover. The attach window is short and opens around delivery or first use, so measure it from your own orders. Record the room and the category at purchase. A dining set bought for a house with no dining rug is a known next conversation. It's the nearest thing this category has to a runout date.

The replacement cycle runs years out. Find the real interval from your own repeat buyers, not the product's stated lifespan, because a mattress cycle and a pillow cycle are two businesses inside one brand. A service or warranty visit may be your only scheduled contact in year three, so treat it as a sales moment. In furniture, the next order is often a second room, bought years later.

Guarantees and risk removal pay on the first order and the next buyer. A trial period, a plain-language warranty and a return policy that doesn't read like a trap make a confident buyer. A confident buyer adds the accessory and sends a friend.

Time it from delivery

Anchor the post-purchase sequence to delivery, not checkout. Weeks can pass between order and delivery. Every message timed from the transaction lands while the customer is still waiting, when reassurance is the only useful content. Ask for the review and the referral two to four weeks after delivery, once the product has been used and the customer has a verdict.

Never buy reviews, never tie an incentive to a positive review, and ask every customer, not only the happy ones. If you reward a review or a referral post, the reward gets disclosed: put it in the pre-filled share text. Ask every buyer on the same schedule, whatever you expect them to say. Don't route the unhappy ones to support and the happy ones to the review site.

Test the one-and-done label

Some categories do have no second purchase, and a program built on one that doesn't exist spends a year on flows with no audience. Before you accept the label, run the table at 730 days, count accessories and referrals as returns, and then decide whether the label is true.

Five cuts settle it. Group customers by first-order month, as in Cohort Tables. Read repeat at 90, 365 and 730 days, because a long-cycle category looks dead at 90 and alive at 730. Cut by entry product. Separate accessories from the hero item: a mattress buyer who comes back for a pillow protector is a repeat buyer. Count referred customers as an outcome.

The answer matters most when the first order loses money. Take an invented mattress brand: a $900 average order, a 45% product margin and a $420 acquisition cost. That leaves $405 of gross margin against $420 to acquire, so the first order is about $15 underwater. A brand shaped like that can't live as one-and-done, because every dollar of profit sits on a return it hasn't built yet.

Take youth sports gear: bought once and used until it wears out, the textbook one-and-done profile. The buyer is usually a parent, the user is a child who grows, and the season sets the calendar, so the repeat lives in the next size and the next spring.

If the cuts confirm the label, say so in writing in the first month, with the table attached. Then the work moves to the first order. Build bundles from what customers put in carts together, and price for a first order that pays for its own acquisition.

What to report

Nobody buys a second sofa within a month, so a thirty-day repeat rate reads as failure here. It teaches the team to give up on good customers. Report referral share, attach rate, review rate and quote-to-close across the full consideration window. Judge value per customer over years, not quarters.

Do this

Part six · Chapter 24

DROPS AND SEASONS

Some categories run on a calendar, not a runout date. Set lapse in drops and seasons.

Every category has a clock. Find yours before you set a single delay. A replenishment brand's clock runs in days to runout, and most lapse rules are written for brands like that. A season, a billing month and a wardrobe keep time differently.

Gobi Heat sells heated apparel, and its year is decided in about ten weeks of cold. Its email and SMS earned $1.6M in a single winter season, platform-reported. A customer who bought a heated jacket in December is not lapsed in March. They are wearing it.

At 3Commas, in subscription software, the second order is the second month. At UNTUCKit, in menswear basics, the second order is a second color of the same shirt. Nothing runs out. If yours doesn't run in days, a lapse rule borrowed from another category will fire at the wrong time.

Count lapse in drops

A 90-day winback in a category that drops every six weeks fires after about two releases, which is arbitrary for someone who buys every other drop and hostile to someone who buys once a season. Count the gaps between each customer's purchases in releases, and call someone lapsed past the 75th-percentile gap. Pull it from your own order file, the way you'd pull the Kept Interval, but count in drops.

Then rewrite the winback against the new definition. Someone who skipped two collections needs to hear what changed in the line. A discount on a collection that no longer exists gives them nothing to buy.

A seasonal brand counts in seasons and asks what share of a cohort comes back in season two. Its off-season mail keeps the brand present without asking for a purchase. Its pre-season mail goes out with the first cold week in the customer's region, not on a fixed date.

Protect last season's proven sellers from each new drop. Every drop arrives with people inside the company pushing it, and the item that sold for two seasons has nobody arguing for it. Before the drop lands, set a floor on spend, email placement and site space for proven sellers. Newness then earns its way up from a test budget.

The weeks between releases

The gap between drops is where customers drift, and most programs fill it with silence or a discount. A between-drops bridge is a small, fixed set of messages that hold the customer without selling something that doesn't exist yet. Send restocks in their size, styling for what they already own and the making of the next drop. Let customers opt into a reminder for the next release date.

Offer early access instead of a discount. Where the best sizes sell out, first access is worth more than a percentage off, and it costs no margin. Give it first to the people who asked for the reminder.

Most of the bridge depends on size and fit data, which describes the body and survives the catalog turning over. Capture it with a fit finder before purchase and a fit check after delivery. Write return reasons to the profile when someone says an item ran small. Store each as an event and a profile property, so a restock alert only goes to people it fits.

In a drop, the product sells the first order. On a celebrity apparel launch, where I worked on commerce infrastructure and merchandise strategy on contract, Shopify reported $821K in sales across 5,820 orders in launch week. Demand was never the constraint. What a drop brand controls is what it captures from each launch buyer: a size, a fit note and an opt-in for the next date.

Short peaks

Seasonal and drop brands pack the year into a few weeks. Punkcase, a phone-accessories brand, earned $1M+ over one Black Friday and Cyber Monday, platform-reported. A peak like that is won in the three months before it: sending reputation warmed on a steady cadence, segments tested, flows fixed and the early-access list told a date.

During the peak, send in waves hours apart, not days. In a four-day window, a day-long gap between waves spends a quarter of the peak waiting. The sizes a late wave promotes may already be gone. Plan the peak as a data project that starts three months early and a sending project that lasts four days.

Four clocks, side by side

ConsumablesConsidered purchaseSeasonalDrops
The second order isThe same product again, at runoutA referral, an accessory, a second room or a replacementNext season's first order, or this season's accessoryThe next drop
The clock isMedian days to runout, per productMonths to years: delivery, then use, then replacementSeasons since first purchaseRelease cadence, counted in drops
The metric that mattersSubscription share and on-time reorder rateReferral share, attach rate, value across yearsShare of a cohort back in season twoRepeat across drops, size-data coverage, sell-through
The trapNudging on the label interval instead of the measured oneJudging the program on 30-day repeatCalling a customer lapsed in the off-seasonLetting unproven newness take proven sellers' budget

The system stays the same across those columns: cohorts by entry month, a branch on first product, one offer at a time. What changes is the clock and what counts as a return, so a lapse rule copied from another column fires on the wrong day.

Find your column and fill its four cells from your own file. If the clock row can't be filled from your order export, pull that number first, before the next email goes out.

Do this

Close

DAY ONE

What the owner of the second order needs on the first day, and by day 90.

Whoever owns the second order, whether a hire, a promotion or you, needs five things on the first day.

  1. AccessAdmin on the email platform, the SMS platform, the store and the ad accounts. Day one, not week three.
  2. The order fileEvery order, by customer, product and date, pulled from the orders themselves rather than a dashboard export.
  3. One decision-makerSomeone who answers on flows and offers inside one business day.
  4. A week with supportThey know the real reorder timing, and why people leave, before any report does.
  5. The three authorities, in writingChange an entry offer. Change flow timing and suppression. Veto a promotion that damages the file.

Then three dates

The leak is rarely the channel. Fix what sits between the first order and the second, and every channel you own gets cheaper.

Do this

Close

ABOUT THE AUTHOR

Andrew Lauchner works on growth, retention and lifecycle for consumer and subscription businesses.

As Senior Director of Growth and Retention Marketing at Gallery Furniture, he rebuilt the customer journey and the sales playbooks together; over four years, customer lifetime value rose 330% by the company's internal measure. He co-led the store's 2022 "Astros Win You Win" promotion.

At 3Commas he worked on growth and retention and co-led the Copy Trader launch. As a contract retention marketing manager at Binance (2019–20), he designed VIP loyalty tiers and more than twenty customer journeys.

He has been Head of Growth and Retention at Greatness Wins, and at Nexus Agriscience. Earlier he was lead PM for a remote team of fifteen-plus at the agency SeedX. He now runs Growth Legend, which runs email and SMS for consumer brands.

The results from his own work in this book are the numbers the platforms and companies reported. None is offered as a holdout result. This book asks you to hold your program to a stricter standard than those results were held to, and Attribution Isn't Proof shows how.

I answer every note from people working on the second order, including the ones looking for someone to own it.

andrew@growthlegend.com · or message me on LinkedIn.

Appendix A

FOR YOUR ANALYST

Six pulls from a Shopify order export, with the rules for small files.

Each pull below runs on a Shopify order export. Each lists the columns, the steps, the output, and the bad reading: the result, or the misread, that should stop you. The export has one row per line item, so build one row per order first, with its date, customer and revenue. Export the full history; three years or more gives the day-365 reads enough customers.

Resolve identity first

One customer is one customer ID where you have one, then a normalized email (lowercase, trimmed), then a phone number in E.164 format. A split identity turns one returning customer into two one-time buyers, so every rate below comes out worse than the truth. Drop cancelled and fully refunded orders before you count anything.

An afternoon if your customer IDs are clean; a few days if they aren't. Resolve identity first either way.

Keep the result as a lookup from every raw email and phone to one resolved customer, and run all six pulls off it. Pick one revenue definition, such as Subtotal less refunds, and use it everywhere, so the pulls agree with each other. Label every table you hand back with the file, the date range and the n, because a table without them gets quoted as if it covered everything.

The customer file

  1. Orders per customerColumns: Email, Created at, Subtotal, Financial Status, Cancelled at, the refunded amount, and the customer's phone where you have it.
    Steps: Group orders by resolved customer. For each, record order count, lifetime revenue and first order date. Bucket by order count, not by dollars: 1, 2, 3 to 5, 6 to 10, 11 and up. Frequency is where the two groups split; spend follows it.
    Output: One order against two or more: customers, share of customers, revenue, share of revenue, and revenue per customer. Add a histogram of order counts.
    Bad reading: A one-order bucket three or more times the size of the two-order bucket, reported as one blended average. That average describes almost nobody in the file.
  2. The step-upColumns: The customer table from the first pull.
    Steps: Take customers with one order and customers with two orders and no more. Average lifetime revenue for each group. The step-up is the two-order average minus the one-order average. Multiply it by your count of one-time buyers and label the result a ceiling, since no program converts all of them.
    Output: One dollar figure per converted customer, and the ceiling beside it.
    Bad reading: A step-up taken against customers with two or more orders. Heavy buyers inflate it, and the prize looks bigger than one more order can deliver.

Value over time, and by entry product

  1. The cohort triangle and value curveColumns: Email, Created at, Subtotal, Financial Status.
    Steps: Key each customer to the month of their first paid order and never move them. Use the order date, never an import or signup date, or a migrated file lands in one cohort. Count days from each customer's own first order. Bucket forward in 30-day windows. Fix each row's denominator at the cohort's starting size. Leave cells blank where the cohort is too young; a blank isn't a zero. Say whether cells show repeat inside the window or cumulative repeat. Compare down columns only.
    Output: A triangle with an empty lower-right corner, plus cumulative revenue per acquired customer at day 30, 90 and 365 for the last full-year cohort, with the halfway day marked.
    Bad reading: A full rectangle, or customer counts that grow as the window lengthens. That report is stacked calendar windows.
  2. Repeat rate by first productColumns: Email, Created at, Lineitem name, Lineitem sku, Subtotal.
    Steps: Find each customer's first order. If it holds several items, name it by the highest-priced line and treat a kit as its own product. Collapse SKUs into classes, shades together and sizes apart, because size can be the whole finding. Count customers per class; that count is n. Mark who ordered again within 365 days, using only customers whose first order is that old. Add the Wilson interval. Day-365 value is revenue per customer across the first year, first order included.
    Output: One row per first product: n, repeat rate, interval and day-365 value, sorted by n.
    Bad reading: A high-volume entry product returning a fraction of the rows beside it, with intervals that don't overlap.

Reorder gaps and the top of the file

  1. First-to-second gap by first productColumns: Email, Created at, Lineitem name, Lineitem sku.
    Steps: Keep customers whose first order is at least a year old and who placed a second. Take the days between order one and order two, and ignore later orders, which run on a different clock. Group by first product. Take the median, never the mean, and the 25th and 75th percentiles. Under about 50 repeaters, use the product class.
    Output: Per product: repeaters, median, and the 25th and 75th percentiles. The median times the reorder touches; the 75th sets the earliest winback.
    Bad reading: One median for the whole catalog, or a median well past the label while the reminder still fires on the label.
  2. Top-customer thresholdsColumns: The customer table from the first pull.
    Steps: Sort customers by lifetime revenue, descending. Add a row number, a percentile (row number over total customers) and a running share of revenue. Read the lifetime revenue at the top 1%, 10% and 20%. Add trailing-twelve-month revenue beside it, since a lifetime floor never drops a customer who stopped buying.
    Output: Three dollar floors and the revenue share above each. Build each as a segment on lifetime revenue at or above the floor, and recompute monthly.
    Bad reading: A top tier with fewer names than expected. Split identities have turned top customers into pairs of mid-tier ones.

The Wilson cell

Put conversions in B2 and n in C2, then paste these two cells beside the rate. The Wilson interval stays between zero and one hundred percent and holds up at low rates and small samples, where the textbook plus-or-minus interval breaks.

BoundFormula
Lower=((B2/C2)+1.96^2/(2*C2)-1.96*SQRT((B2/C2)*(1-B2/C2)/C2+1.96^2/(4*C2^2)))/(1+1.96^2/C2)
Upper=((B2/C2)+1.96^2/(2*C2)+1.96*SQRT((B2/C2)*(1-B2/C2)/C2+1.96^2/(4*C2^2)))/(1+1.96^2/C2)

Format both cells as percentages. Check: 9 of 476 gives about 1.0% to 3.6%. If yours doesn't, look for a missing bracket before you trust any interval it prints.

Read the width as the resolution of the file. Two rows whose intervals overlap haven't been told apart, whatever their rates say. Two rows whose intervals sit well apart have, even at a few hundred customers each, because a large gap shows through a small sample.

Small-file rules

These are rules of thumb. Each one guards against reading noise as a result. A small file still shows large gaps, so a thin read has value, but it can't carry a fine distinction. When a read fails its rule, report it as a lead with its n beside it, then widen the window or roll up the class until it passes.

ReadRule of thumb
A product's reorder-gap medianAbout 50 repeaters. Below that, use the product class.
A test or holdout cell10 or more expected conversions, per the Single-Digit Stop.
A weekly cohort lineA few hundred first orders a week. Otherwise, read monthly.
A low-volume SKU's reorder gapRoll it up to its product class.
A ratePrint its n. Under 300, print its interval too.

Re-run the first-product and gap pulls every quarter, and date each run. Pack sizes change, a subscription option shifts the mix, and a customer who switches products starts a new clock. A median measured in January is a hypothesis by June. Recompute the top-customer floors monthly, because they drift as the base grows, and a stale floor changes who's in the tier without anyone deciding it.

Appendix B

THE DATA CONTRACT

Agree it with engineering before the first property is written.

The rules are written against Klaviyo. They hold on any platform that keeps profile state and event history apart.

For the founder, three symptoms that mean this work wasn't done: a segment that should hold thousands holds eleven; a flow fires twice; a count shrinks after a release.

Each one looks like a marketing problem and starts in the data layer. Data failures don't throw errors. They produce a number slightly too low or a flow that fires slightly too often. The strategy gets blamed and rewritten while the plumbing stays broken.

Five rules

  1. Write state and history bothA profile property holds the current value and is overwritten on each write. An event records what happened and when. Segments and merge tags read properties; flows trigger on events. Most values need both, written from the same payload.
  2. Namespace the namesCase matters: "Properties and their values must be exactly the same across your account." Name profile properties in Title Case with a source prefix (Quiz Skin Type) and event properties in snake_case (skin_type). Keep profile and event property names distinct so nobody can confuse them in the segment builder.
  3. Guard the writeWrite set-once fields, like a holdout bucket or a first-order date, only when they're empty. A sync that rewrites them on every run reshuffles the data and throws no error. Enforce allowed values in application code.
  4. Make two calls in orderKlaviyo won't subscribe a profile and edit its custom properties in one API request. Subscribe first, per channel, with the source, and check the response. Then write the properties and fire the event. Log each failure with its identifier and retry from a queue.
  5. Check it in the platformKlaviyo's event endpoints answer 202 Accepted before the work is done. Check the profile. A test passes when you find the profile and see the event and the property on it.

The merge test

Identity decides whether any of this reaches a person. Run the merge test in a clean browser before each release that touches the header, checkout or account system. Browse anonymously, submit a test email through a form, log in with the same address and complete a paid checkout. Search for the address. One profile carrying all four stages passes; two or three fail.

A failed test means your flows fire at the copy with no purchase history and your segments count one person several times. Put the tracking script on every page, including subdomains and iframes. Normalize phone numbers to E.164 at capture. Don't ask a visitor who clicked through from your email for their address again, because a different answer forks a second profile.

Change an existing profile's email or phone server-side. Klaviyo's browser-side endpoints return 202 for an identifier change and leave the field as it was.

The register

Read it by symptom when a number moves and nobody can explain it. Read it by control when you build, because each control costs a field on day one and a migration on day ninety.

FailureSymptomControl
Nested payloadThe data shows on the profile, but no segment can filter on itFlat, top-level event properties. Lists of plain strings are fine; objects inside objects are not. Send one real test record for each value before you decide a filter is broken.
Casing driftSegment counts run below the source systemA fixed vocabulary, enforced in application code. "Dry" and "dry" are two audiences.
Name collisionProfile and event properties share a name; segments use the wrong oneTitle Case with a prefix for profile properties, snake_case for events
Unversioned schemaWorking segments go empty after a releaseA version property on every event and a version condition on dependent segments
Split identitySeveral profiles per person; flows fire at the one with no ordersTracking script on every surface and the merge test each release
Duplicate eventsFlows trigger two or three times per customerA unique ID on every event, so a retry can't create a second record
Oversized batchPart of an import lands and part doesn'tChunk to the limit: bulk event endpoints cap at 1,000 events per request. Log every chunk's response.
Consent conflationComplaints and bounces jump after a capture launchConsent per channel, written through the subscription endpoints
Dead integrationData stops arriving; someone notices weeks laterA daily volume check against the source, alerting a named person
Renames and bloatHundreds of properties, and which are live is anyone's guessA property register and a quarterly audit. Renaming a property creates a new one. Clearing the old one takes a CSV unset upload, and deleting it across the account takes a ticket to Klaviyo Support.
Backfill flow stormTwo-year-old customers get a welcome seriesPause every flow an import could trigger, whatever the import's size
Personalization blanksEmpty blocks, or a greeting with no name after itA default for every conditional block, reviewed as copy
The 202 trapThe integration reports success; the profile shows nothingVisual confirmation in the platform before anyone signs off
Out-of-stock sendsReminders point to sold-out productsOut-of-stock suppression: replenishment and back-in-stock flows check inventory before sending.

Consent and sensitive data

Capture SMS consent separately, with its own disclosure beside the phone field; the SMS chapter has the wording. Record email consent through the subscription endpoint, with its source and date. Don't store it as a custom property or infer it from list membership, because the subscription record is what shows how someone joined.

A skin-concern or symptom quiz can collect health data under Washington's law, and an inference about a condition counts too. Get consent for the quiz, name your archetypes so they don't reveal a condition, and have counsel look at it before launch. Don't sync concern or condition answers to ad platforms.

Deletion covers both the profile and its events. Events are the harder half, because they're often copied into a warehouse or an analytics tool. Clearing the profile alone leaves the request half done. Write the deletion procedure before launch, name every system the data reaches and test it once on a live record.

Who owns it

Every control above assumes someone is looking. Acceptance is not arrival. An integration that passed its launch test can stop sending after a developer ships a sensible change or the platform changes a default, and nothing announces it. Give every integration a named owner on each side, one for the system that sends and one for the system that receives. Agree that schema changes are announced before they ship.

Audit the schema every quarter. Check that every property in the register is still written and that every dependent segment returns a plausible count. Check that the reconciliation job still runs and alerts a person who still works here. A common reason a monitoring alert fails is that it is routed to somebody who left.

Name an owner on each side of every integration and book the quarterly schema audit.