The variance writes back
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
A line is written up only when it clears both bars.
Budget against actual · March
Material at €25k and 3%| Line | BudgetBudget | ActualActual | Var.Var. F/(A) | %% |
|---|---|---|---|---|
| SubscriptionsSubscription revenue, material | €3.60m | €3.81m | €210k | 5.8% |
| ServicesServices revenue, material | €620k | €655k | €35k | 5.6% |
| RevenueTotal revenue | €4.22m | €4.47m | €245k | 5.8% |
| HostingHosting & data, material | €410k | €488k | (€78k) | (19%) |
| DeliveryDelivery & support, material | €520k | €584k | (€64k) | (12%) |
| Cost of salesTotal cost of sales | €930k | €1.07m | (€142k) | (15%) |
| Gross profitGross profit | €3.29m | €3.39m | €103k | 3.1% |
| Sales peopleSales & marketing people | €780k | €802k | (€22k) | (2.8%) |
| MarketingMarketing programmes | €340k | €328k | €12k | 3.5% |
| R&DResearch & development | €960k | €968k | (€8k) | (0.8%) |
| G&AGeneral & administrative | €450k | €444k | €6k | 1.3% |
| SoftwareSoftware & tools | €160k | €165k | (€5k) | (3.1%) |
| Prof. feesProfessional fees | €120k | €134k | (€14k) | (12%) |
| OpexTotal operating costs | €2.81m | €2.84m | (€31k) | (1.1%) |
| EBITDAEBITDA | €480k | €552k | €72k | 15% |
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.
- Favourable
- Adverse
- Timing or one-off
- Run-rate
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.
Next experiment · 05
One group, many ledgers
Multi-entity, multi-currency consolidation with intercompany eliminations and transfer pricing.
Consolidate the groupUsing this on a real decision?
Talk it through
The defaults are illustrative. The inputs that decide the answer are the ones you only know from inside the business.
Get in touch