Skill: retention-predictor
Purpose
Retention determines LTV. An app that churns users in week 1 can't build a business regardless of acquisition. This skill evaluates how sticky the idea is structurally — not based on feature lists, but on the underlying usage pattern and habit formation potential.
Input
- Idea slug
memory/ideas/<slug>/idea.md (app concept, business_model)
memory/ideas/<slug>/desire_scores.json (desire strength and primary driver inform habit potential)
- Optional:
memory/ideas/<slug>/pricing.json (pricing model affects commitment), memory/ideas/<slug>/competitors.json (incumbent churn signals from reviews)
memory/market_insights/<niche>-*-<YYYY>-<MM>.md (usage cadence and complaint patterns)
Lane selection
business_model = b2c or prosumer uses the B2C lane (D1/D7/D30 user retention). b2b-smb or b2b2c uses the B2B lane (monthly logo churn, cohort retention at month 1-2, 6 and 12). Both lanes fill d30_equivalent so idea-scoring can apply one rubric.
Evaluation Factors
| Factor |
High Retention Signal |
Low Retention Signal |
| Usage frequency |
Daily or multiple times/day |
Weekly or less |
| External trigger |
Clear real-world trigger (meal, workout, payday) |
No natural trigger |
| Progress/reward loop |
Clear progress visible over time |
No feedback loop |
| Network effects |
Gets better with more users |
No network component |
| Data lock-in |
User data accumulates |
Nothing to lose by leaving |
| Habit stack |
Fits into existing daily routine |
Requires behavior change |
Benchmarks
B2C lane — D1 / D7 / D30 by category (median, heuristic ranges from public mobile-analytics reports; treat as bands, not point estimates)
| Category |
D1 |
D7 |
D30 |
Note |
| Health & fitness |
25–35% |
12–18% |
6–12% |
Spikes in January, decays by March |
| Habit / lifestyle |
25–35% |
12–20% |
6–12% |
Streak mechanics lift D7 more than D30 |
| Finance / budgeting |
25–35% |
15–22% |
10–18% |
High trust barrier, sticky once data accumulates |
| Productivity / tools |
22–30% |
12–18% |
8–15% |
Utility apps retain on need, not habit |
| Social / messaging |
30–45% |
20–30% |
15–25% |
Network effects dominate |
| Education / learning |
25–35% |
10–15% |
5–10% |
Motivation decay is the norm |
| Creative tools |
25–35% |
15–22% |
10–18% |
Output ownership creates lock-in |
| Games (casual) |
30–40% |
10–15% |
3–8% |
Disposable by design |
B2B lane — monthly logo churn by segment (heuristic ranges from public SaaS benchmark reports)
| Segment |
Monthly logo churn |
Annualised |
Typical driver |
| Very small business / solo operators, self-serve, < $100/mo |
5–8% |
45–65% |
Customer business failure, card failures |
| SMB self-serve, $100–500/mo |
3–6% |
30–50% |
Champion leaves, tool consolidation |
| SMB with onboarding or light sales, $500–2,000/mo |
1.5–3% |
17–30% |
Value not embedded in a recurring workflow |
| Mid-market, annual contracts |
0.5–1.5% |
6–17% |
Renewal-time re-evaluation |
Use the lower end when the product is embedded in a client deliverable or calendar trigger (report, audit, renewal, onboarding) and the upper end when usage is event-only.
D30 equivalent (both lanes)
d30_equivalent lets idea-scoring apply its retention bands to either lane.
- B2C:
d30_equivalent = predicted_retention.d30 (percent).
- B2B:
d30_equivalent = clamp(1 - 12 × monthly_churn_estimate, 0, 1) × 100. Examples: 3%/mo → 64; 5%/mo → 40; 8%/mo → 4. This is a mapping heuristic, not a measurement; say so in retention_score_reasoning.
Churn Risk Rubric
Score each factor high / medium / low with a sentence of evidence. Count the highs:
| High-severity factors |
churn_risk |
| 0 |
low |
| 1–2 |
medium |
| 3+ (or any factor the founder cannot influence, such as customer business mortality, rated high) |
high |
Factor library: no external trigger; value decays as the user succeeds (the clean-report paradox); free alternative is good enough; onboarding requires data the user does not have; single-champion dependency; customer business mortality (B2B); seasonal demand cliff; incumbent can add the feature; pricing indexed to a metric that shrinks when the customer struggles.
Retention Verdict
| Lane |
sticky |
moderate |
disposable |
| B2C |
D30 ≥ 15% with a daily or triggered loop |
D30 8–14% |
D30 < 8% or no trigger |
| B2B |
monthly churn ≤ 3% with a calendar or deliverable trigger |
3–6% |
> 6% or event-only usage |
Process
- Read
idea.md and select the lane from business_model.
- Estimate natural usage frequency from the problem cadence (daily tooth-brushing vs. annual tax filing) and name the external trigger(s) that cue usage. If none exists, say "none" and treat it as a high-severity churn factor.
- Score habit formation 1–5 across the six factors in the table above (each factor scored 0/0.5/1, sum rounded, minimum 1). Cite
desire_scores.json: Survival and Control primary drivers add 0.5; a Status driver with a recurring judgement moment adds 0.5 in the B2B lane.
- Predict retention from the benchmark table for the closest category or segment, adjusted by habit score (±1 band) and by competitor review signals when
competitors.json exists.
- Compute
d30_equivalent.
- Score churn-risk factors, count highs, assign
churn_risk, and name the single top_churn_risk_factor.
- List 3–5
retention_levers, each with impact and detail; include at least one lever that addresses the top churn risk.
- Assign
retention_verdict from the table, write retention_score (0–100 per idea-scoring's retention bands) with reasoning, and write the file.
Output
Write to memory/ideas/<slug>/retention.json:
{
"idea_slug": "",
"predicted_at": "YYYY-MM-DD",
"lane": "b2c | b2b",
"natural_usage_frequency": "multiple daily | daily | weekly | monthly | infrequent | event-driven",
"usage_frequency_rationale": "",
"external_trigger": "",
"habit_formation_score": 0,
"habit_formation_rationale": "",
"predicted_retention": {
"d1": null,
"d7": null,
"d30": null,
"m1_to_m2": null,
"m6": null,
"m12": null,
"monthly_churn_estimate": null,
"benchmark_used": ""
},
"d30_equivalent": 0,
"churn_risk_factors": [
{ "factor": "", "severity": "high | medium | low", "detail": "" }
],
"top_churn_risk_factor": "",
"retention_levers": [
{ "lever": "", "impact": "very-high | high | medium | low | structural", "detail": "" }
],
"churn_risk": "low | medium | high",
"retention_verdict": "sticky | moderate | disposable",
"retention_score": 0,
"retention_score_reasoning": "",
"inputs_used": [],
"inputs_missing": []
}
Fill the predicted_retention keys for the active lane and leave the others null.
Notes
retention_score is the number idea-scoring copies into its retention dimension; keep the reasoning tied to the band table in idea-scoring so the two files agree.
- cac-modeler reads
monthly_churn_estimate (B2B) or d30 (B2C) for lifespan. If this file is missing, cac-modeler falls back to category medians and LTV confidence drops to medium at best.
1---2name: retention-predictor3description: Predicts retention potential by evaluating usage frequency, habit formation mechanics, and churn risk factors for a B2C app idea.4---56<!-- version: 0.2.0 | outputs: memory/ideas/<slug>/retention.json -->78# Skill: retention-predictor910## Purpose1112Retention determines LTV. An app that churns users in week 1 can't build a business regardless of acquisition. This skill evaluates how sticky the idea is structurally — not based on feature lists, but on the underlying usage pattern and habit formation potential.1314## Input1516- Idea slug17- `memory/ideas/<slug>/idea.md` (app concept, `business_model`)18- `memory/ideas/<slug>/desire_scores.json` (desire strength and primary driver inform habit potential)19- Optional: `memory/ideas/<slug>/pricing.json` (pricing model affects commitment), `memory/ideas/<slug>/competitors.json` (incumbent churn signals from reviews)20- `memory/market_insights/<niche>-*-<YYYY>-<MM>.md` (usage cadence and complaint patterns)2122### Lane selection2324`business_model` = `b2c` or `prosumer` uses the B2C lane (D1/D7/D30 user retention). `b2b-smb` or `b2b2c` uses the B2B lane (monthly logo churn, cohort retention at month 1-2, 6 and 12). Both lanes fill `d30_equivalent` so idea-scoring can apply one rubric.2526## Evaluation Factors2728| Factor | High Retention Signal | Low Retention Signal |29|---|---|---|30| Usage frequency | Daily or multiple times/day | Weekly or less |31| External trigger | Clear real-world trigger (meal, workout, payday) | No natural trigger |32| Progress/reward loop | Clear progress visible over time | No feedback loop |33| Network effects | Gets better with more users | No network component |34| Data lock-in | User data accumulates | Nothing to lose by leaving |35| Habit stack | Fits into existing daily routine | Requires behavior change |3637## Benchmarks3839### B2C lane — D1 / D7 / D30 by category (median, heuristic ranges from public mobile-analytics reports; treat as bands, not point estimates)4041| Category | D1 | D7 | D30 | Note |42|---|---|---|---|---|43| Health & fitness | 25–35% | 12–18% | 6–12% | Spikes in January, decays by March |44| Habit / lifestyle | 25–35% | 12–20% | 6–12% | Streak mechanics lift D7 more than D30 |45| Finance / budgeting | 25–35% | 15–22% | 10–18% | High trust barrier, sticky once data accumulates |46| Productivity / tools | 22–30% | 12–18% | 8–15% | Utility apps retain on need, not habit |47| Social / messaging | 30–45% | 20–30% | 15–25% | Network effects dominate |48| Education / learning | 25–35% | 10–15% | 5–10% | Motivation decay is the norm |49| Creative tools | 25–35% | 15–22% | 10–18% | Output ownership creates lock-in |50| Games (casual) | 30–40% | 10–15% | 3–8% | Disposable by design |5152### B2B lane — monthly logo churn by segment (heuristic ranges from public SaaS benchmark reports)5354| Segment | Monthly logo churn | Annualised | Typical driver |55|---|---|---|---|56| Very small business / solo operators, self-serve, < $100/mo | 5–8% | 45–65% | Customer business failure, card failures |57| SMB self-serve, $100–500/mo | 3–6% | 30–50% | Champion leaves, tool consolidation |58| SMB with onboarding or light sales, $500–2,000/mo | 1.5–3% | 17–30% | Value not embedded in a recurring workflow |59| Mid-market, annual contracts | 0.5–1.5% | 6–17% | Renewal-time re-evaluation |6061Use the lower end when the product is embedded in a client deliverable or calendar trigger (report, audit, renewal, onboarding) and the upper end when usage is event-only.6263### D30 equivalent (both lanes)6465`d30_equivalent` lets idea-scoring apply its retention bands to either lane.6667- B2C: `d30_equivalent = predicted_retention.d30` (percent).68- B2B: `d30_equivalent = clamp(1 - 12 × monthly_churn_estimate, 0, 1) × 100`. Examples: 3%/mo → 64; 5%/mo → 40; 8%/mo → 4. This is a mapping heuristic, not a measurement; say so in `retention_score_reasoning`.6970## Churn Risk Rubric7172Score each factor high / medium / low with a sentence of evidence. Count the highs:7374| High-severity factors | `churn_risk` |75|---|---|76| 0 | low |77| 1–2 | medium |78| 3+ (or any factor the founder cannot influence, such as customer business mortality, rated high) | high |7980Factor library: no external trigger; value decays as the user succeeds (the clean-report paradox); free alternative is good enough; onboarding requires data the user does not have; single-champion dependency; customer business mortality (B2B); seasonal demand cliff; incumbent can add the feature; pricing indexed to a metric that shrinks when the customer struggles.8182## Retention Verdict8384| Lane | sticky | moderate | disposable |85|---|---|---|---|86| B2C | D30 ≥ 15% with a daily or triggered loop | D30 8–14% | D30 < 8% or no trigger |87| B2B | monthly churn ≤ 3% with a calendar or deliverable trigger | 3–6% | > 6% or event-only usage |8889## Process90911. Read `idea.md` and select the lane from `business_model`.922. Estimate natural usage frequency from the problem cadence (daily tooth-brushing vs. annual tax filing) and name the external trigger(s) that cue usage. If none exists, say "none" and treat it as a high-severity churn factor.933. Score habit formation 1–5 across the six factors in the table above (each factor scored 0/0.5/1, sum rounded, minimum 1). Cite `desire_scores.json`: Survival and Control primary drivers add 0.5; a Status driver with a recurring judgement moment adds 0.5 in the B2B lane.944. Predict retention from the benchmark table for the closest category or segment, adjusted by habit score (±1 band) and by competitor review signals when `competitors.json` exists.955. Compute `d30_equivalent`.966. Score churn-risk factors, count highs, assign `churn_risk`, and name the single `top_churn_risk_factor`.977. List 3–5 `retention_levers`, each with impact and detail; include at least one lever that addresses the top churn risk.988. Assign `retention_verdict` from the table, write `retention_score` (0–100 per idea-scoring's retention bands) with reasoning, and write the file.99100## Output101102Write to `memory/ideas/<slug>/retention.json`:103104```json105{106 "idea_slug": "",107 "predicted_at": "YYYY-MM-DD",108 "lane": "b2c | b2b",109 "natural_usage_frequency": "multiple daily | daily | weekly | monthly | infrequent | event-driven",110 "usage_frequency_rationale": "",111 "external_trigger": "",112 "habit_formation_score": 0,113 "habit_formation_rationale": "",114 "predicted_retention": {115 "d1": null,116 "d7": null,117 "d30": null,118 "m1_to_m2": null,119 "m6": null,120 "m12": null,121 "monthly_churn_estimate": null,122 "benchmark_used": ""123 },124 "d30_equivalent": 0,125 "churn_risk_factors": [126 { "factor": "", "severity": "high | medium | low", "detail": "" }127 ],128 "top_churn_risk_factor": "",129 "retention_levers": [130 { "lever": "", "impact": "very-high | high | medium | low | structural", "detail": "" }131 ],132 "churn_risk": "low | medium | high",133 "retention_verdict": "sticky | moderate | disposable",134 "retention_score": 0,135 "retention_score_reasoning": "",136 "inputs_used": [],137 "inputs_missing": []138}139```140141Fill the `predicted_retention` keys for the active lane and leave the others `null`.142143## Notes144145- `retention_score` is the number idea-scoring copies into its retention dimension; keep the reasoning tied to the band table in idea-scoring so the two files agree.146- cac-modeler reads `monthly_churn_estimate` (B2B) or `d30` (B2C) for lifespan. If this file is missing, cac-modeler falls back to category medians and LTV confidence drops to medium at best.