---
name: budget-variance-analysis
source: https://app.decimal.ai/s/budget-variance-analysis@1/SKILL.md
source_sha256: 991b83758e8b
---

# Read budget variances by their profit impact, not their arithmetic sign

Handed a budget-vs-actual table, the base model computes `actual − budget` fine but then labels the
result by its arithmetic sign: positive is good, negative is bad. That rule is right for revenue and
wrong for costs. Marketing that spent **$120k against a $90k budget** has a **+$30k** variance and
is **over** budget — that is *bad* news, an overspend, even though the number is positive. The whole
job is to translate each gap into "did this help or hurt the result," size it, decide whether it is
worth flagging, and — when the data supports it — say whether a revenue or cost gap came from price
or from quantity. Do the four steps below and reconcile at the end.

## 1. Compute the gap two ways per line

For each line: `variance = actual − budget`, and `variance % = variance ÷ |budget|`.

- Report both the absolute variance and the percent. A percent alone hides a big-dollar line; a
  dollar alone hides a line that doubled off a small base.
- **Divide-by-zero guard:** if the budget for a line is 0 (or blank) and there is actual activity,
  the percent is undefined — report the absolute variance and mark the percent as n/a. Do not print
  a percent off a zero base.

## 2. Label favorable / unfavorable by line type — this is the step the base gets wrong

"Favorable" (F) means the gap *helped* the operating result; "unfavorable" (U) means it *hurt* it.
That is decided by what kind of line it is, not by the sign of the subtraction:

| Line type | Actual **above** budget | Actual **below** budget |
|---|---|---|
| Revenue, income, sales, profit, net income, gross margin | **Favorable** | **Unfavorable** |
| Cost, expense, COGS, spend, opex, contra-revenue (returns, discounts, allowances) | **Unfavorable** | **Favorable** |

Consequences the base model trips on:

- A **cost line over budget is unfavorable** even though `actual − budget` is a positive number.
- A **cost line under budget is favorable** — an expense coming in *below* plan is good news for the
  result, not a "miss." (Judge only the P&L impact here; whether the underspend hurt the business
  operationally is a separate question the numbers do not answer.)
- A **revenue line below budget is unfavorable** even though nothing was "overspent."
- When a variance is presented as a **negative number for a cost** (accountants often show
  `(under)/over`), a negative cost variance means *under* budget = **favorable**. Read the column's
  sign convention before labeling.
- **Net income / operating profit** behaves like revenue: below budget is unfavorable.

## 3. Flag materiality — by BOTH size dimensions

Not every variance is worth a manager's time. A variance is material when it clears **both** a
percent threshold **and** an absolute-dollar floor — otherwise a 40% swing on a $200 line drowns out
a 3% miss on a $4M line. If the org gives thresholds, use them; absent a stated policy, flag lines
where **|variance %| ≥ 5% and |variance| ≥ a stated dollar floor**, and say which test each flagged
line tripped. A line that is large on one dimension but tiny on the other is a judgment call, not an
automatic escalation — note it rather than burying or over-escalating it.

## 4. Decompose price vs volume when units and unit price/cost are given

When a line is `quantity × unit price` (or `× unit cost`) and you have budget and actual for both,
split the total variance into a **volume (quantity)** piece and a **price (rate)** piece. Let
`Q_b, P_b` be budget quantity/price and `Q_a, P_a` be actual:

- **Volume variance** `= (Q_a − Q_b) × P_b` — quantity change valued at the *budget* price.
- **Price variance** `= (P_a − P_b) × Q_a` — price change valued at the *actual* quantity.
- These sum **exactly** to the total: `(Q_a−Q_b)P_b + (P_a−P_b)Q_a = P_aQ_a − P_bQ_b`. Always show
  that the two pieces reconcile back to the line's total variance; if they do not, you mis-assigned
  which quantity is held constant.
- Label each piece F/U by the same line-type rule from step 2. For a revenue line, selling more
  units (positive volume variance) is favorable and a higher price is favorable; for a cost line,
  using more units is unfavorable and a higher unit cost is unfavorable.
- If a strict three-way split is wanted, pull the joint term out separately:
  `joint = (P_a − P_b)(Q_a − Q_b)`, leaving `volume = (Q_a−Q_b)P_b` and `price = (P_a−P_b)Q_b`. State
  which convention you used; the two-way split above (joint folded into price) is the common default.

## Reconcile before you finish

The favorable and unfavorable line variances should tie back to the total budget-vs-actual gap for
the statement, and any price/volume split should tie back to its line total. If a summary says the
quarter was "over budget," confirm that means the *result* was worse, not merely that some number
went up. Lead with the material, unfavorable items; that is what a reviewer acts on.
