Budget variance reporter
A small system that compares actuals against budget each month, works out which variances are real rather than timing, pulls the transactions behind each one, and produces a short report naming the three or four that matter. It never adjusts a budget and never explains a number away. Seven posts on the same system — one diagram at a time — with a cost breakdown and an engineering reference at the end.
- 01
A budget variance reporter on AWS for a few dollars a month
The whole system on one page — a comparer, a timing filter and a reporter — plus the observation that makes it useful: most variance is timing, and timing resolves itself.
- 02
How the period data arrives
Why the transaction level is non-negotiable, what a period export has to contain, and how a restated period is absorbed without corrupting the history you already reported.
- 03
How the budget gets shaped
Why dividing an annual budget by twelve manufactures variances, three cheap ways to shape a line so it does not, and the lines where flat genuinely is right.
- 04
How timing gets filtered out
Four tests that separate a real variance from a difference in when something landed, and why a filtered variance is shown as filtered rather than hidden altogether.
- 05
How the variance report reads
One page, four lines, the transactions under each — and why the most interesting variance is the one with no single transaction behind it.
- 06
What the budget variance reporter costs
About $2 a month. One Bedrock read per period is the only line that grows; the queue, the table, the mail and the storage are rounding errors. Plus the three ways the bill could surprise you.
- 07
Engineering reference: the budget variance reporter architecture
Same system, drawn purely for engineers. Service names, region, Lambda inventory, IAM scopes, the schemas and the exact model id.
Frequently asked questions
- What is a budget variance reporter?
- A small serverless system that compares each month’s actuals against budget, separates real variances from timing differences, pulls the transactions behind the ones that matter, and produces a short report. It reports; it never adjusts a budget or reclassifies a transaction.
- Why not just read the management accounts?
- Because a management accounts pack is forty lines and most of them are noise. The work is not producing the numbers — your accounting software already does that — it is working out which three or four of the forty deserve a conversation, and why.
- What is a timing difference?
- A variance caused by when something was posted rather than by anything real: an invoice that arrived a week late, a quarterly payment landing in a different month than budgeted, an accrual reversing. They look identical to real overspend in a single month and resolve themselves over two or three.
- Does it need our accounting system’s API?
- It needs a nominal transaction export per period, which every accounting package can produce on a schedule. An API is nicer; a scheduled CSV works.
- What does it cost to run?
- A couple of dollars a month. It runs once a period over a few thousand rows. See part six.