Expansion Propensity Methodology¶
NRR Strategy Context¶
Net Revenue Retention (NRR) has two components:
| Component | Model | Goal |
|---|---|---|
| Churn prevention | churn_model |
Keep existing ARR |
| Expansion revenue | expansion_model |
Grow ARR within existing accounts |
A SaaS business with 100% NRR merely replaces churned ARR. A business with 120% NRR grows even if it acquires zero new customers. The expansion propensity module directly attacks the second component.
Why this matters for Dropbox-style product metrics: The classic B2B SaaS growth motion is land-and-expand — acquire at a lower tier, prove value, upgrade to the next. The expansion model identifies the "expand" signal before Sales has to guess which accounts are ready.
mrr_tier_ceiling_pct — Tier Pressure¶
The most novel of the 5 expansion features. It answers the question: "How much of their current tier's capacity has this customer already consumed?"
| Plan tier | Floor | Ceiling |
|---|---|---|
| Starter | $500/mo | $2,000/mo |
| Growth | $2,000/mo | $8,000/mo |
| Enterprise | $8,000/mo | $50,000/mo |
Interpretation: - 0.0 = Customer just entered this tier (plenty of headroom) - 1.0 = Customer is at the top of their tier — the natural trigger for an upgrade conversation - > 0.8 = Tier-pressure zone — combine with premium trial signal for high-confidence expansion
Why it beats raw MRR: A $7,500/mo Growth customer has 92% tier pressure and is nearly ready for Enterprise. A $48,000/mo Enterprise customer at 95% pressure is due for a CUSTOM expansion conversation. Raw MRR conflates these two very different signals.
Propensity Quadrant Interpretation¶
The Propensity Quadrant plots all active customers on two axes:
- X-axis: Churn probability (from
churn_model) - Y-axis: Upgrade propensity (from
expansion_model)
Four action quadrants:
High Propensity │ Growth Engines │ Flight Risks
│ (Low Churn, │ (High Churn,
│ High Expansion)│ High Expansion)
────────────────┼─────────────────┼─────────────────
Low Propensity │ Stable Base │ Churn Candidates
│ (Low Churn, │ (High Churn,
│ Low Expansion) │ Low Expansion)
└─────────────────┴─────────────────
Low Churn High Churn
Growth Engines (top-left)¶
Low churn risk + high expansion propensity. Primary target for upgrade campaigns. Schedule QBR with upgrade conversation agenda. These accounts have proven the platform's value and are organically asking for more.
Flight Risks (top-right)¶
High churn risk + high expansion propensity. Counterintuitive danger zone. Do NOT start an upsell motion — upselling a churning customer accelerates churn. Senior Exec intervention required: fix the underlying issue first (usually onboarding friction or integration failure), then revisit expansion in 60–90 days.
Stable Base (bottom-left)¶
Low churn + low expansion. Healthy but not growing. Nurture via product-led expansion signals: in-app prompts for premium features, peer benchmarking, feature adoption campaigns.
Churn Candidates (bottom-right)¶
High churn + low expansion. Retention priority. No expansion conversation warranted. Focus CS effort on support quality and compliance gap remediation.
ARR Uplift Formula¶
Why (multiplier − 1): A 3× jump from Starter to Growth is a 200% increase. The net uplift is 2× current ARR, not 3×. Using (multiplier − 1) captures only the additional revenue, making the figure defensible in a VP review where double-counting is scrutinised.
Why probability-weighted: A 100% propensity at $10k expected uplift is worth more Sales time than a 15% propensity at the same amount. The weighted figure integrates both dimensions into a single prioritisation metric.
Tier multipliers¶
| Tier | Multiplier | Rationale |
|---|---|---|
| Starter → Growth | 3.0× | ~$1k → ~$3k MRR median ACV jump |
| Growth → Enterprise | 5.0× | ~$5k → ~$25k MRR — largest tier leap |
| Enterprise → Custom | 1.2× | Seat/add-on upsell, not a full tier flip |
| Custom → (ceiling) | 0.0× | No automated propensity above this |
Conflict Resolution: Churn vs. Expansion¶
When both models are available (via /customers/{id}/360), the conflict matrix prevents harmful upsell motions:
| Churn Risk | Expansion Propensity | Action |
|---|---|---|
| Low (< 0.25) | High (≥ 0.50) | Growth Engine — schedule upgrade conversation |
| High (≥ 0.50) | High (≥ 0.50) | ⚠️ Flight Risk — Exec intervention required |
| High (≥ 0.50) | Low (< 0.25) | Retention priority — defer expansion |
| Low (< 0.25) | Low (< 0.25) | Stable Base — nurture via product signals |
This logic lives in ExpansionResult.recommended_action(churn_probability=...) — it is deterministic domain code, not an LLM output.