Purpose
Diagnose where a SaaS forecast systematically goes wrong — which line items, which direction, and which assumptions are driving the error — and deliver a ranked set of modeling changes that measurably tighten future accuracy. Turns a pile of forecast-vs-actuals variance into a specific fix list instead of another round of "we'll try to be more careful."
When to Use
Invoke this skill when the user asks to:
- Understand why their SaaS forecast keeps missing (ARR, bookings, churn, cash)
- Reconcile forecast vs. actuals variance and find the root cause
- Reduce systematic bias in revenue or expense projections
- Improve the accuracy of a bottoms-up or driver-based model
- Fix a forecast that's consistently too high or too low
- Rebuild forecasting assumptions after several bad quarters
Inputs Required
Before starting, collect:
- Forecast vs. actuals history: At least 4–6 periods (months or quarters) of forecasted values against actuals, ideally by line item
- Line items in scope: Which metrics to analyze — new bookings, expansion, churn/contraction, ARR, revenue, headcount, opex, cash
- Forecast method currently used: Driver-based, bottoms-up rep capacity, top-down growth rate, or hybrid
- Forecast cadence and horizon: How often re-forecast happens and how far out (e.g., monthly rolling 12-month)
- Key assumptions in the model: The main drivers (win rate, sales cycle, ramp, NRR, seasonality factors)
- Known one-time events: Anything that distorted actuals (large deal, layoff, pricing change, outage)
If variance is only provided in aggregate (no line-item breakdown), analyze at the level available and flag that line-item decomposition would sharpen the diagnosis.
Instructions
Step 1: Calculate and Normalize the Error
For each line item across all periods provided:
- Forecast error = Actual − Forecast (signed, so direction is preserved)
- Percent error = (Actual − Forecast) / Actual
- MAPE (Mean Absolute Percent Error) across periods — the accuracy score
- Bias = mean of signed percent errors — positive means chronic under-forecasting, negative means chronic over-forecasting Present a compact table: line item, MAPE, bias direction, error range.
Step 2: Classify the Error Pattern
Assign each line item to the dominant error type:
- Systematic bias: Errors consistently one direction (e.g., always over-forecasting new bookings) — a broken assumption, not noise
- Volatility/noise: Errors bounce both directions with no consistent sign — the mean may be fine but the model can't call timing
- Seasonality miss: Errors cluster in specific periods (Q4 spike, summer slowdown, January renewal wall)
- Regime break: Accuracy good, then a step-change where errors blow out — indicates a real business shift the model hasn't caught up to
- Compounding drift: Error small near-term, growing at the far end of the horizon — usually a growth-rate or NRR assumption compounding wrong
Step 3: Trace SaaS-Specific Root Causes
Map each error pattern to likely SaaS drivers:
- New bookings over-forecast: Inflated win rate, sales cycle assumed shorter than reality, rep ramp assumed faster, pipeline coverage below the ratio needed for the number
- Expansion/NRR miss: NRR assumption not segmented by cohort, usage-based revenue modeled linearly, expansion timing lumped rather than distributed
- Churn/contraction under-forecast: Logo churn and dollar churn conflated, renewal timing off, downgrades not modeled separately from full churn
- Revenue vs. bookings confusion: Bookings-to-revenue recognition lag misapplied, ARR modeled as revenue, ramped/prorated deals treated as full-period
- Cash/opex drift: Headcount plan not tied to hiring reality, collections/DSO assumption stale, spend forecast top-down rather than commitment-based
Step 4: Quantify the Impact of Each Error Source
Rank error sources by dollar impact, not by percent. A 3% miss on a $10M line beats a 30% miss on a $200K line. For each source estimate the recurring dollar error per period so the fix list is prioritized by what actually moves the number.
Step 5: Prescribe Ranked Modeling & Assumption Fixes
Produce 6–10 fixes ordered by expected accuracy gain. Each fix states:
- What's wrong (the specific assumption or structure)
- The change (concrete: "segment NRR by cohort year" not "improve NRR modeling")
- How to implement it in the model
- Expected effect on bias or MAPE for that line item
Favor structural fixes (adding a driver, splitting a blended assumption, adding a seasonality index) over judgment fixes ("be more conservative"), which don't survive.
Step 6: Recommend a Revised Cadence & Feedback Loop
Specify:
- Bias correction factor: If a line item shows persistent one-way bias, apply a documented adjustment (e.g., haircut new bookings by the historical over-forecast rate) until the structural fix lands
- Re-forecast cadence: Match cadence to volatility — high-noise lines re-forecast more often
- Accuracy tracking: Log MAPE and bias by line item every period so improvement is measurable
- Assumption review triggers: What variance threshold forces an assumption re-examination
Output Format
- Structure: Error table → pattern classification → root-cause trace → impact ranking → ranked fix list → revised cadence
- Length: 900–1,300 words
- Format: Table for the error/accuracy scores; structured bullets for classification and root causes; numbered ranked list for fixes
- Sections: Error & Accuracy Summary → Error Pattern Classification → Root-Cause Analysis → Impact Ranking → Ranked Fixes (6–10) → Revised Cadence & Feedback Loop
- Tone: FP&A specialist — quantitative, direct, unafraid to name the broken assumption; prioritizes dollar impact over precision theater
Quality Checklist
Before delivering output, verify:
- [ ] Bias is reported with direction and magnitude for each line item — not just absolute error
- [ ] Each line item is classified into a specific error pattern (bias / noise / seasonality / regime break / drift)
- [ ] Root causes reference SaaS-specific drivers (win rate, NRR, ramp, churn timing) — not generic "assumptions were off"
- [ ] Fixes are ranked by dollar impact, and each includes a concrete implementation step
- [ ] The fix list favors structural model changes over "be more conservative" judgment calls
- [ ] A measurable feedback loop (MAPE/bias tracking + trigger thresholds) is specified
Notes
- Chronic one-way bias is the highest-value find — it's a broken assumption that can be corrected immediately with a documented adjustment factor while the structural fix is built
- Blended assumptions are the most common accuracy killer in SaaS models: one NRR, one win rate, one churn rate applied across segments that behave differently
- Distinguish noise from bias before prescribing anything — a volatile-but-unbiased line item doesn't need a new assumption, it needs a tighter cadence or a range instead of a point estimate
- If the history includes a distorting one-time event, exclude or annotate it before computing bias so a single large deal doesn't masquerade as a systematic pattern
How to use this skill
This file is a Claude Code skill in Anthropic's standard format — markdown with YAML frontmatter at the top.
Installing in Claude Code:
~/.claude/skills/<folder-name>/SKILL.md— auto-loads in every session anywhere on your machine (recommended for skills you'll use across multiple projects)<your-project>/.claude/skills/<folder-name>/SKILL.md— auto-loads only when working in that project (recommended for project-specific skills)
Restart Claude Code or open a new session to register.
Using in Claude.ai, ChatGPT, Gemini, or other AI tools:
- Drag this file into a new chat, or copy and paste its contents
- Send your task or request as your next message — the AI will apply the skill where it fits
For Claude Code skill details: https://docs.anthropic.com/en/docs/claude-code/skills