Skip to content

The variance writes back

Currency

The numbers close in days; the commentary often takes as long again. Someone has to find the variances that matter, decide which way each one cuts, judge whether it will reverse, and then write it three times: for the board, for the executive team and for the people who own the budgets.

That is work a language model does well, provided the arithmetic never leaves the ledger. Here every figure is computed from the table and only the prose is drafted. Change the month, the reader or the materiality bar, and watch the draft decide again what is worth saying.

The month

March · against budget

EBITDA

+€72k

€552k against a budget of €480k

Run-rate

+€74k

once timing and one-offs are taken out

Material

4 of 10

lines, carrying 85% of the movement

Timing

+€12k

expected to reverse in April

Verdict

At €25k and 3%, four lines carry 85% of the movement. The headline and the run-rate tell the same story: €72k and €74k ahead.

Materiality

€25k
3%

A line is written up only when it clears both bars.

Budget against actual · March

Material at €25k and 3%
Budget against actual for March. Variances are shown as their effect on EBITDA: favourable plain, adverse in brackets. Material lines are marked.
LineBudgetActualVar.%
Subscriptions, material€3.60m€3.81m€210k5.8%
Services, material€620k€655k€35k5.6%
Revenue€4.22m€4.47m€245k5.8%
Hosting, material€410k€488k(€78k)(19%)
Delivery, material€520k€584k(€64k)(12%)
Cost of sales€930k€1.07m(€142k)(15%)
Gross profit€3.29m€3.39m€103k3.1%
Sales people€780k€802k(€22k)(2.8%)
Marketing€340k€328k€12k3.5%
R&D€960k€968k(€8k)(0.8%)
G&A€450k€444k€6k1.3%
Software€160k€165k(€5k)(3.1%)
Prof. fees€120k€134k(€14k)(12%)
Opex€2.81m€2.84m(€31k)(1.1%)
EBITDA€480k€552k€72k15%

Variances are signed as their effect on EBITDA, so revenue ahead and cost under budget both read as favourable; adverse sits in brackets. Point at or tap a line, or a sentence in the draft, to see what cites what.

Drafting

To
Executive team
Re
March results against budget

Revenue finished €245k ahead of budget, but cost of sales absorbed more than half of it: gross margin is 2.0 points light and EBITDA only €72k ahead.

Subscription revenue finished €210k ahead of budget (5.8%), reflecting faster seat expansion across enterprise accounts, partly offset by deeper discounting on multi-year renewals. Next step: put a discount floor on multi-year renewals before the next quarter-end push.

Spend on hosting and data was €78k above budget, 19% adverse: usage rising with the seat growth and a supplier price rise the budget did not assume. I would reopen the hosting contract before the price rise becomes the baseline.

At €584k, delivery and support overspent by €64k, driven by contractors brought in to clear the onboarding backlog and premium day rates for short-notice cover. Set an end date for the contractors, or convert the best of them to permanent roles.

Timing or structural

Timing is worth €12k favourable, all of it from event invoices that arrived after the cut-off; it should reverse in April. Timing and one-offs make little difference here: underlying, the month was €74k ahead of budget, and the forecast should carry that.

Every figure is computed from the table; none is typed.6 lines cited · 190 words
EBITDA bridge · March4 material steps, largest first
  • Favourable
  • Adverse
  • Timing or one-off
  • Run-rate
€0€200k€400k€600k€800kRun-rate €554kBudget EBITDA€480kSubscription revenue+€210k favHosting & data−€78k advDelivery & support−€64k advServices revenue+€35k favOther lines6 inside materiality−€31k advActual EBITDA€552k

Notes on the model

What it shows

  • Materiality has two bars, not one: a line must be large in money and large against its own budget. Move either and the draft changes what earns a paragraph.
  • The headline can mislead. In September EBITDA lands broadly on budget only because a campaign slipped and a one-off fee arrived; the run-rate is well behind, and the draft leads with that.
  • The same facts in three registers: the board gets the shape and the forecast call, the executive team drivers and actions, budget holders the line detail and the questions to answer.

How it works

  • Each variance is restated as its effect on EBITDA, so revenue ahead of budget and cost under budget both read as favourable, whatever the line.
  • Drivers arrive tagged from the sub-ledgers — volume, price, headcount, rate, timing, one-off, currency — and the tag decides whether a variance joins the run-rate, reverses next month or is set aside as a one-off.
  • Material lines are ranked by their effect on EBITDA and written from varied templates. Every sentence records the lines it cites, which is what links the draft to the table.

What it leaves out

  • A deterministic stand-in for a language model: no network calls, no generated text. In production the prose would be generative, with the same computed figures as its guardrail.
  • One entity, one currency, one month at a time. No year to date, no prior year and no comparison with the latest forecast.
  • The driver tags are given, not inferred. In practice, getting them right from the sub-ledgers is most of the work.