forecast-variance-analysis

$npx mdskill add t0ddc3by/claude-for-customer-success/forecast-variance-analysis

Compares forecast to actuals and classifies variance by root cause.

  • Identifies why a forecast missed actual closed/won outcomes.
  • Depends on CRM system, config, and company profile files.
  • Requires 3+ deals or 2+ quarters before surfacing a pattern.
  • Returns classified variance patterns and one-off notes to the user.

SKILL.md

.github/skills/forecast-variance-analysisView on GitHub ↗
---
name: forecast-variance-analysis
version: 1.0.0
deployment_target: plugin
status: PROPOSED
description: "Compares submitted forecast to actual closed/won outcomes. Classifies variance by root cause: rep-level, deal-size band, stage-entry, seasonal, or product/segment. Surfaces systemic patterns — not one-off explanations. Minimum: 3 deals or 2 consecutive quarters before a pattern is surfaced. Triggers: 'why did we miss', 'forecast variance', 'call accuracy', 'forecast accuracy by rep', 'what caused the miss'."
---

[PROPOSED]

# Forecast Variance Analysis

Traces the gap between what was called and what closed to its root cause.
Patterns require ≥3 deals or ≥2 consecutive quarters before surfacing.
One-off variance is noted but not classified as a pattern.

**Reference:** Variance classification taxonomy → `../../../shared/revops-domain-model.md §4`
**Config reads:** `current_arr`, `primary_segment`, `crm_system`

---

## Pre-flight

Read `~/.claude/plugins/config/claude-for-customer-success/rev-ops/CLAUDE.md` and
`~/.claude/plugins/config/claude-for-customer-success/company-profile.md`.

If either is missing or contains `[PLACEHOLDER]` markers, stop and prompt for
`/rev-ops:cold-start-interview`.

Note from config: `current_arr`, `primary_segment`, `crm_system`

**G-code dependency:** All G-code guardrails referenced in this skill (G1–G9) are defined in the CLAUDE.md config loaded above. If Pre-flight halts or config is missing, G-codes are undefined — do not proceed with partial config.
---

## Use when
- Actual results deviate from forecast and root cause analysis is needed
- Post-quarter variance review requires structured decomposition
- Forecast accuracy trending needs to be assessed across periods

## Do NOT use for
- Forward-looking scenario modeling (use scenario-modeling)
- Pipeline coverage adequacy (use pipeline-coverage-analysis)
- Individual deal health (use deal-health-scoring)

## Typical Activation
"Forecast variance analysis", "why did we miss forecast", "actuals vs forecast for Q[N]", "variance decomposition", "forecast accuracy review"

---

## Reasoning Protocol

Before generating output, apply these primers:

1. **CLASSIFY**: What type of forecast variance request is this?
   - Single-quarter variance analysis (one period — total miss + root cause classification)
   - Multi-quarter trend analysis (≥2Q — pattern detection across periods, rep accuracy trending)
   - Rep call accuracy review (rep-level scorecard — submitted vs. actual by rep, trailing quarters)
   - Root cause classification (pattern identification against taxonomy: rep-level, deal-size, stage-entry, seasonal, product/segment)

2. **CONSTRAINTS**: What limits the solution space?
   1. Confirm activation — user asking about forecast accuracy, miss analysis, or call quality
   2. Check HubSpot connector — multi-quarter history required; declare fallback if unavailable
   3. Confirm the period being analyzed (default: most recently closed quarter)
   4. Apply G6 — state data-as-of for all historical pipeline pulls
   5. Apply G1 — any forward-looking variance projection requires forecast language qualification
   6. Apply G5 — rep call accuracy scorecard is analytical input; manager owns the coaching response
   7. Apply pattern confidence gate: ≥3 deals or ≥2 consecutive quarters before surfacing a classification

3. **EXPERT CHECK**: What would a veteran RevOps forecast analyst verify first?
   - Is the data-as-of timestamp declared before surfacing any variance pattern? Stale historical
     reads may exclude deals that closed or slipped after the pull — declare data age upfront.
   - Is the pattern confidence gate enforced before classifying variance? Below-threshold
     observations are noise, not patterns — surfacing them as classifications misleads coaching.
   - Is the rep accuracy scorecard framed as analytical input, not a performance directive?
     Variance analysis surfaces what happened; the manager decides what to do about it.
   - Is the submitted forecast source confirmed (HubSpot vs. user-provided spreadsheet)?
     Mixed sources produce phantom variance that doesn't reflect actual call accuracy.

4. **ANTI-PATTERNS**: Common mistakes to avoid:
   - Surfacing HubSpot reads without data-as-of timestamp (G6 violation)
   - Classifying variance as a systemic pattern below the ≥3-deal / ≥2Q confidence threshold
   - Presenting rep accuracy scorecard as a performance directive rather than analytical input (G5 violation)
   - Applying forward-looking language to variance projections without G1 qualification

**After execution**, verify:
- G6 data-as-of label applied to all HubSpot historical reads
- G1 qualification present on any forward-looking projection derived from variance analysis
- G5 qualifier present: rep scorecard is analytical input; manager owns the coaching response
- Confidence: High when HubSpot is connected and multi-quarter data is current; Moderate when data is stale or connector is unavailable
    - Confidence: [High] when HubSpot is connected and multi-quarter data is current / [Medium] when data is stale or connector is unavailable / [Low] if all inputs are manual or unverified

---

## Inputs

**Connector error categorization:** When a connector call fails, distinguish the error type before proceeding:
- **Rate-limited (transient):** Connector returns HTTP 429 or equivalent throttle signal. Note the rate limit explicitly in output ("CRM data temporarily rate-limited — retry in 60 seconds recommended") and offer to retry rather than proceeding with degraded output.
- **Unavailable (permanent for this session):** Connector is not configured, authentication has expired, or service is down. Fall back to user-provided data and label all affected sections as "connector unavailable — manual input used."
Do not conflate these — a rate-limited connector will return data shortly; an unavailable connector will not.

Required:
- Period to analyze (default: most recently closed quarter)
- Submitted forecast at quarter-start (from HubSpot or user-provided)
- Actual closed/won (from HubSpot)

Optional:
- Rep filter, segment filter
- Number of prior quarters for trend analysis (default: 4)

---

## Workflow

**Step 1 — Calculate total variance**
```
Variance Amount = Submitted Forecast − Actual Closed/Won
Variance %      = Variance Amount ÷ Submitted Forecast
```

**Step 2 — Classify variance** `[revops-domain-model.md §4]`

For each deal that was in the submitted forecast but did not close, or closed at
a different amount, classify the contributing factor:

- **Rep-level** — specific rep consistently over/under-calling (≥3 deals, ≥2Q)
- **Deal-size band** — ACV range systematically slipping
- **Stage-entry** — deals entering a stage that historically don't close from there
- **Seasonal** — quarter-end compression patterns
- **Product/segment** — structural close-rate issue in specific product or segment

**Step 3 — Pattern confidence gate**
Only surface a pattern classification when:
- Rep-level: ≥3 deals from same rep, or same rep in ≥2 consecutive quarters
- All other categories: ≥3 deals matching the pattern

If below threshold: "Insufficient data to classify as systemic — noted as isolated."

**Step 4 — Rep call accuracy scorecard** (if rep data available)
```
Rep     Submitted    Actual    Variance    Accuracy
[name]  $XXXk        $XXXk     −$XXk       XX%
```

---

## Output

```
FORECAST VARIANCE ANALYSIS — [Quarter/Period]
[HubSpot ✓ live — as of YYYY-MM-DD] [Confidence: High/Moderate]

Total variance: −$XXXk (−XX% of submitted forecast)

Root cause classification:
  Primary:   [Rep-level / Deal-size / Stage-entry / Seasonal / Product]
  Secondary: [if applicable]

Pattern evidence:
  "[Pattern description]" — observed in [N] deals over [N] quarters
  [Confidence: High/Moderate/Low — based on sample size]

Rep accuracy scorecard:
  [table if rep data available]

One-off variances (not classified as patterns):
  [Deal name, amount, what happened — 1 line each]

[DRAFT — RevOps internal] [Confidence: High/Moderate]
```

---

## Reference Files

| File | Purpose |
|------|---------|
| `references/reasoning-blueprint.md` | Problem classification taxonomy, domain heuristics, common failure modes, and expert judgment patterns for this skill |

## Security & Permissions

**Network access:** None direct — all external data access is mediated by host-provided MCP connector tools (HubSpot, CS platform, Slack, Linear). This skill makes no direct outbound HTTP calls.
**Filesystem scope:** None — this skill does not read or write local files. All data is provided at runtime via parameters or MCP connector responses.
**Subprocess execution:** None.
**Dynamic code execution:** None — pseudocode in this skill represents the logic contract and is not executed at runtime.
**Data sensitivity:** Inputs may contain confidential deal and pipeline data. Handle with RevOps-level confidentiality.

## Trust & Verification

**Input trust model:** All user-provided parameters are treated as untrusted at intake. Numeric inputs are validated for plausible range before use in calculations. String inputs are not evaluated as code.
**Output trust model:** All outputs are proposals or analytical inputs — no outputs constitute approved decisions, revenue commitments, or system actions without explicit human confirmation.
**Connector data:** Data retrieved via MCP connectors is treated as read-only observed state. Timestamps and data-as-of labels are applied to all connector-sourced values per G6.
**Write-tier confirmation:** Any proposed write to HubSpot, Linear, or Slack is surfaced as a draft requiring explicit user confirmation before execution.

## Guardrails

- G1: Forward-looking projections from variance analysis require qualification
- G5: Rep accuracy scorecard is analytical input — manager owns the coaching response
- G6: State data-as-of for all historical pulls

More from t0ddc3by/claude-for-customer-success

SkillDescription
account-research>
annual-planning-workflowOrchestrates the six-phase annual (or mid-year) planning cycle: forecast scenarios → UoG three-scenario capacity modeling → quota sensitivity → comp simulation → baseline save → change communication. Each phase gates on human approval before the next begins. Invokes unit-of-growth-calculator for capacity modeling. Triggers: 'annual planning', 'planning cycle', 'run the plan', 'quota comp planning', 'mid-year replan'.
blocker-review>
call-prep>
change-communication-packagingProduces a three-part communication package for sensitive planning changes: (1) data-backed rationale memo for reps, (2) FAQ with top 5 anticipated objections and data responses, (3) rollout sequence with audience, channel, and order. Triggered automatically by annual-planning-workflow for territory, quota, or comp changes. Requires RevOps lead review before any distribution. Triggers: 'communicate changes', 'territory announcement', 'quota rationale', 'comp change communication', 'help me tell reps about [change]'.
churn-rcaRoot cause analysis for individual customer churn events and cohort-level churn pattern analysis. Produces structured RCA with root cause taxonomy, contributing factors, timeline reconstruction, and remediation pathway. Scoped to full cancellation — contract contraction redirected to renewals:downgrade-analysis.
closed-won-to-cs-capacity-modelingConverts rolling sales forecast into CS resource demand using UoG formulas. Runs three-scenario capacity check (P10/P50/P90 from scenario-modeling). Compares projected CSM demand to current headcount and UoG annual plan baseline. Surfaces CS capacity gaps with a hiring lead time flag. Updates when SA1 forecast moves >10%. Triggers: 'CS capacity', 'can CS absorb', 'CSM headcount needed', 'CS ceiling', 'will CS be able to handle new logos'.
cold-start-interview>
comp-simulationModels comp plan payout scenarios before plan is finalized. Stress-tests OTE, accelerators, and threshold structures against attainment distributions (50/65/75/85/100%). Surfaces cost-to-company and unintended payout behaviors. G3 applies — all outputs require HR + Finance dual review before rep distribution. Triggers: 'comp simulation', 'model comp payouts', 'comp plan cost', 'stress test comp plan', 'what does the plan cost at 80/100/120%'.
crm-hygiene-auditOverall CRM health score plus rep-level hygiene scorecard across three dimensions: completeness, accuracy, and recency. Produces weekly hygiene report for RevOps review before sharing with Sales managers. Never writes to CRM — all corrections are proposals. Triggers: 'CRM hygiene', 'data quality', 'hygiene report', 'field completeness', 'CRM health score'.