learn-metric-decomposition-with-phoebe / Builder session 8 of 10
Learn Metric Decomposition with Phoebe · Builder track · Session 8 of 10

B2B SaaS deep dive

SaaS has the friendliest top line to decompose and the easiest one to misread. ARR looks like a single number on a slide, but it is really a flow - a bank balance that fills from new and expansion and drains from contraction and churn. Today you build ARR as a bridge, split new ARR into its own multiplicative tree, and learn to watch the gross flows instead of the net, because two companies with identical net growth can be in completely different health.

🟡 Builder track Analysts · PMs · founders · ops Live tree simulator + SQL 45 min
0-3 · Recap 3-20 · ARR as a bridge 20-42 · Diagnose an ARR miss 42-45 · Q&A
Part 0

Where we are: from patterns to a domain

You already own the three decomposition patterns from b2 - multiplicative (rate x volume), additive (sum of parts), and the flow bridge (a balance that fills and drains). You have applied them to ecommerce (b4), marketing (b5), branding (b6), and internet traffic (b7). This is the fifth of six domains, and it is where the flow bridge finally gets its flagship example: recurring revenue. b9 does B2G, then b10 is the capstone.

Live - presented in session Self-study - read after class ▶ Live tree - editable & runnable Framework sources covered
★ What you walk out with today The ability to write ARR as Start + New + Expansion - Contraction - Churn, to read an ARR miss as either a new-business shortfall or a retention leak, and to compute NRR in your head from the same five flows. You will run a live ARR bridge, knock a flow, and route the miss to its owner.
Part 1 · covers domain canon, Lean Analytics (SaaS chapter)

ARR is not a number, it is a bridge 8 min live

Annual recurring revenue is a balance, and every balance is a flow bridge: you start the period at some ARR, add the new logos you closed, add expansion from customers who grew, then subtract contraction from customers who shrank and churn from customers who left. Ending ARR is what survives all five. The mistake juniors make is staring at the net move; the skill is managing the individual flows, because that is where the levers actually are.

Start $1.00M + New $180K + Expansion $90K - Contraction $40K - Churn $120K Ending $1.11M Ending ARR = 1.00M + 180K + 90K - 40K - 120K = 1.11M. You manage the five flows, not the net move.
🔍 Click to zoom - ARR is a balance that fills from new and expansion, drains from contraction and churn
LiveThe five flows, and why gross beats net3 min

Net new ARR - the single number on the board slide - is New + Expansion - Contraction - Churn. It can look healthy while hiding a fire. A company can post +$110K net while gross churn quietly doubles, as long as new sales sprint to cover it. The bridge forces the gross flows into the open so you cannot hide a retention leak behind a strong sales quarter.

  • New - ARR from brand-new logos. Sales and marketing own it.
  • Expansion - existing customers buying more (seats, upsell, usage). Customer success and product own it.
  • Contraction - existing customers buying less. A downgrade, not a departure. A loss flow, sign negative.
  • Churn - customers who leave entirely. The other loss flow, sign negative, and usually the most expensive.
Real world

Net Revenue Retention is just four of these flows. NRR = (Start + Expansion - Contraction - Churn) / Start - it deliberately ignores New, because it measures whether your existing base grows on its own. In the numbers above that is (1.00M + 90K - 40K - 120K) / 1.00M = 93%. Below 100% means the installed base is shrinking and New has to run just to stand still. The best SaaS companies run NRR above 120%.

LiveBuild the ARR bridge live4 min

Here is the same bridge as a live tree. The two loss flows carry "sign": -1 so the simulator subtracts them. Edit any flow and watch ending ARR recompute. This is the flagship example of the bridge operator you met in b2.

{
  "unit": "$",
  "root": {
    "label": "Ending ARR", "op": "bridge",
    "children": [
      { "label": "Start ARR",   "value": 1000000, "unit": "$" },
      { "label": "New",         "value": 180000,  "unit": "$" },
      { "label": "Expansion",   "value": 90000,   "unit": "$" },
      { "label": "Contraction", "value": 40000,   "unit": "$", "sign": -1 },
      { "label": "Churn",       "value": 120000,  "unit": "$", "sign": -1 }
    ]
  }
}
The sign is the whole trick In a bridge, a bigger loss leaf means a smaller top line. When the simulator knocks Churn "down" it makes churn smaller, so ending ARR rises - the opposite of a bad month. To model a real churn spike, edit Churn up by hand and watch ending ARR and NRR both fall.
Part 2 · covers the multiplicative pattern, leading vs lagging

New ARR is its own multiplicative tree 5 min live

One flow in the bridge - New - is not a leaf you control directly either. It is a product: New ARR = Leads x Win-rate x ACV. That means a bridge sits on top of a multiplicative tree, and the same pass-through rule applies: win-rate down 10% with everything else held drops new ARR 10%. And the earliest warning of all lives one step further out - pipeline coverage, weeks ahead of any booking.

LiveNew = Leads x Win-rate x ACV3 min

Split the New flow into its drivers. Marketing owns leads, sales owns win-rate, packaging and pricing own ACV. Now a "new-business shortfall" stops being vague and becomes one of three named levers.

New ARR is its own multiplicative tree New ARR $180,000 Leads: 600 Marketing owns it Win-rate: 10% Sales owns it ACV: $3,000 Packaging owns it 600 leads x 10% win rate x $3,000 ACV = $180,000 - one of three named levers.
🔍 Click to zoom - a vague new-business shortfall becomes one of three named levers
{
  "unit": "$",
  "root": {
    "label": "New ARR", "op": "x",
    "children": [
      { "label": "Leads",    "value": 600, "unit": "leads" },
      { "label": "Win-rate", "value": 0.10, "pct": true },
      { "label": "ACV",      "value": 3000, "unit": "$" }
    ]
  }
}
Self-studyLeading vs lagging in SaaS2 min read

Ending ARR and NRR are lagging - they close the book on a period that already happened. To steer, you watch the flows and the inputs to the flows, which lead by weeks or quarters.

  • Leading: pipeline coverage (pipeline / target), trial-to-paid rate, product-qualified leads, usage trend inside accounts. These warn early.
  • Lagging: ending ARR, net new ARR, NRR, gross churn dollars. These report late but are what the board sees.
  • The rule: if pipeline coverage falls below about 3x this quarter, next quarter's New flow is already in trouble - long before ARR shows it.
Part 3 · covers the diagnosis map, Amplitude inputs (partial)

The three classic SaaS drops 4 min live

Almost every ARR miss lands on one of three flows. Learn the symptom-to-leaf map once and diagnosis becomes a reflex: hear the symptom, name the flow, route to the owner.

LiveSymptom to bridge leaf2 min
  • Churn spike (a retention problem) -> the Churn flow grows. Owner: customer success. Deeper cause is usually onboarding, value delivery, or a competitor.
  • Expansion stalls (a product-value problem) -> the Expansion flow shrinks, and often Contraction grows with it. Owner: product and CS. Customers are not finding more to buy.
  • New falls (a pipeline or win-rate problem) -> the New flow shrinks. Owner: marketing (leads) or sales (win-rate). Check pipeline coverage first - it warned you weeks ago.
Simulate it On the ARR bridge above, hand-edit Churn from $120K up to $240K - churn doubling. Watch ending ARR fall and imagine NRR dropping from 93% toward 81%. Same net-new headline could still look fine if New sprinted to cover it - which is exactly why you read the gross flow, not the net.
Demo 1 of 2

Diagnose an ARR miss live ★ 12 min · everyone builds

The board asks why ARR came in light. You have the bridge. Press Simulate a drop, read the coral trail to the flow that moved, and name it: was this a new-business shortfall (the New flow fell) or a retention leak (a loss flow grew)? Then confirm the retention story in SQL against the subscription base.

{
  "unit": "$",
  "root": {
    "label": "Ending ARR", "op": "bridge",
    "children": [
      { "label": "Start ARR",   "value": 1000000, "unit": "$" },
      { "label": "New",         "value": 180000,  "unit": "$" },
      { "label": "Expansion",   "value": 90000,   "unit": "$" },
      { "label": "Contraction", "value": 40000,   "unit": "$", "sign": -1 },
      { "label": "Churn",       "value": 120000,  "unit": "$", "sign": -1 }
    ]
  }
}

Read the baseline: Start $1.00M plus New and Expansion, minus Contraction and Churn, ends at $1.11M. NRR is 93%.

Press Simulate a drop. A flow moves and its path to Ending ARR lights coral. Note which flow and by how much.

Classify it: if New fell, it is a new-business shortfall - go to marketing or sales. If a loss flow is the story, it is a retention leak - go to CS.

Confirm the retention side in the seed data below: how many subscriptions are still active versus cancelled, and where do the cancellations concentrate?

LiveChurn proxy - active vs cancelled subscriptions4 min

The seed has a small subscription base. A cancelled subscription (a non-null cancel_date) is a churned account - the raw material of the Churn flow. Run this to see how many are still active versus gone.

SELECT
  COUNT(*) FILTER (WHERE cancel_date IS NULL)     AS active_subs,
  COUNT(*) FILTER (WHERE cancel_date IS NOT NULL) AS churned_subs,
  ROUND(100.0 * COUNT(*) FILTER (WHERE cancel_date IS NOT NULL)
        / COUNT(*), 1)                            AS churn_rate_pct
FROM subscriptions;
The diagnosis chain, SaaS edition Bridge points at the flow (Churn grew) -> SQL splits the churn by segment -> the segment that concentrates the cancellations is your lead. Tree first, SQL second - always.
Demo 2 of 2

Your turn ★ 10 min · everyone builds

Three tasks: one edits the bridge, one runs SQL, one is a judgment call you write in prose. Do all three - the third is the one that separates an analyst from a diagnostician.

LiveQ1 · Halve Expansion, watch ending ARR and NRR3 min

On the ARR bridge in Demo 1, edit Expansion from $90K down to $45K. Ending ARR falls by $45K to about $1.065M. More importantly, feel NRR drop: (1.00M + 45K - 40K - 120K) / 1.00M = 88.5%. Expansion is the flow that pushes NRR above 100% - halve it and the installed base leaks faster. Say why a product team, not sales, owns this miss.

Halve Expansion and NRR falls under the radar ✓ Baseline expansion $90K Start $1.00M, New $180K minus $40K/$120K losses Ending $1.11M, NRR 93% ✗ Expansion halved to $45K Start $1.00M, New $180K minus $40K/$120K losses Ending $1.065M, NRR 88.5% Expansion is the flow that pushes NRR above 100% - a product team owns this miss.
🔍 Click to zoom - a quiet expansion slowdown drags NRR down even with New unchanged
LiveQ2 · Count active vs churned subscriptions by plan4 min

Split the churn proxy by plan. Join subscriptions to customers for the plan, then count active versus cancelled in each. Watch where every cancellation lands.

SELECT c.plan,
       COUNT(*) FILTER (WHERE s.cancel_date IS NULL)     AS active_subs,
       COUNT(*) FILTER (WHERE s.cancel_date IS NOT NULL) AS churned_subs
FROM subscriptions s
JOIN customers c ON s.customer_id = c.customer_id
GROUP BY c.plan
ORDER BY churned_subs DESC;
Read the result

Every cancellation sits on the Basic plan; all Pro subscriptions are still active. That is a segment lead you can act on: the retention leak is not company-wide, it is a Basic-plan problem. Now the fix is scoped - look at Basic onboarding and value, not the whole book.

Self-studyQ3 · Same net growth, two very different companies3 min think

Two SaaS companies both grow net ARR by the same $110K this year. Company A does it with low churn and modest new sales. Company B does it with high churn masked by aggressive new sales. Which is healthier, and why?

  • Company A is healthier. Low churn means its NRR is near or above 100% - the existing base compounds, so next year starts from a higher, sturdier floor and every new logo adds on top rather than backfilling a leak.
  • Company B is running on a treadmill. High churn means a low NRR; new sales are spent replacing lost revenue, not growing it. The moment new-sales momentum stalls, the leak shows and net growth collapses. It also costs far more - acquiring a new logo is dearer than keeping one.
  • The lesson: net ARR growth is a headline; the gross flows are the diagnosis. Low churn compounds, high new sales rents.
Homework

Try it yourself - this week ◐ 20-30 min total

Framework sources

Frameworks this session draws on

The SaaS metric canon is remarkably settled - ARR bridge, NRR, and the gross-versus-net discipline appear in nearly every operator's playbook. This page draws on:

Domain canon - the ARR bridge and Net Revenue RetentionPart 1 · the five flows and NRR from four of them
Lean Analytics (Croll & Yoskovitz) - SaaS chapter, the metrics that matterParts 1-2 · new, expansion, churn as the levers of recurring revenue
Amplitude North Star Playbook - inputs that lead the outputPart 2 · pipeline coverage and trials as leading indicators
Check yourself

Three questions before you go 🎯 ◐ 90 seconds

1 · Ending ARR = Start + New + Expansion - Contraction - Churn. Which decomposition pattern is that?

A bridge is a running balance: positive flows (new, expansion) add, negative flows (contraction, churn) subtract. The loss flows carry a negative sign - that is what makes it a bridge and not a plain sum.

2 · What does Net Revenue Retention actually measure?

NRR deliberately excludes New. It asks: if you closed zero new logos, would the installed base grow, hold, or shrink? Above 100% means expansion outruns losses - the base compounds by itself.

3 · Why watch the gross flows instead of just net new ARR?

Two companies with identical net growth can be in opposite health. Only the gross flows tell you whether growth came from durable retention or from new sales sprinting to backfill a leak.

Builder session 8 cheat sheet · pin this

ARR bridgeEnding ARR = Start + New + Expansion - Contraction - Churn. A flow bridge, not a single number.
The five flowsNew and Expansion fill; Contraction and Churn drain (sign -1). Start is where the period opens.
NRR(Start + Expansion - Contraction - Churn) / Start. Ignores New. Above 100% = base compounds on its own.
New is multiplicativeNew ARR = Leads x Win-rate x ACV. A product tree sitting inside one flow of the bridge.
Gross beats netNet new ARR hides a churn spike behind strong sales. Always read the gross flows.
Three classic dropsChurn spike (CS owns), expansion stalls (product owns), new falls (marketing/sales own).
Leading vs laggingPipeline coverage and trials lead; ending ARR and NRR lag. Steer by coverage above 3x.
Running skillBridge names the flow, SQL segments the churn. Next: b9, B2G bookings and the mission-vs-money tension.