# Reading the numbers *Decide in advance what you'd act on* --- The monthly review is much the same meeting in most businesses: revenue against last month, cost against budget, this line ahead and that one behind, and a story attached to every movement. Most of the stories are noise. I don't mean the data is bad, or that the people explaining it are careless. I mean the movement itself usually tells you nothing about how the business underneath is doing. We explain it anyway, because we're meaning-making machines and the meeting was booked. The cost comes when a business acts on the story: initiatives briefed, owners named, teams re-pointed at a movement that meant nothing. Whether the meeting should happen at all is a different argument. What's worth fixing is what we do with the numbers once we're in the room, because somebody has to say what it all means. The pack in front of everyone looks something like this - stylised, but typical: | May-26 | Actual | vs budget | vs prior month | vs prior year | |---|---:|---:|---:|---:| | New bookings (£000) | 1,270 | <span style="color:var(--ap-bad, #c8503a)">−5.9%</span> | <span style="color:var(--ap-bad, #c8503a)">−2.7%</span> | <span style="color:var(--ap-bad, #c8503a)">−29.1%</span> | | Revenue (£000) | 4,130 | <span style="color:var(--ap-bad, #c8503a)">−1.2%</span> | <span style="color:var(--ap-bad, #c8503a)">−4.0%</span> | <span style="color:var(--ap-bad, #c8503a)">−5.7%</span> | | Gross margin (%) | 61.6 | <span style="color:var(--ap-bad, #c8503a)">−0.9pts</span> | <span style="color:var(--ap-good, #3e8e5a)">+0.1pts</span> | <span style="color:var(--ap-bad, #c8503a)">−1.2pts</span> | | Overheads (£000) | 1,740 | <span style="color:var(--ap-good, #3e8e5a)">−0.6%</span> | <span style="color:var(--ap-good, #3e8e5a)">−0.7%</span> | <span style="color:var(--ap-good, #3e8e5a)">−0.9%</span> | | Debtor days | 52 | <span style="color:var(--ap-bad, #c8503a)">+7 days</span> | <span style="color:var(--ap-good, #3e8e5a)">−1 day</span> | <span style="color:var(--ap-bad, #c8503a)">+7 days</span> | There is nothing wrong with this table. Every cell in it is a fact, and the team that produced it did its job. But look at what it invites. Gross margin is up on last month, down on budget and down on last year. So whether it looks good or bad depends entirely on what you compare it with. Each red or green cell invites someone to explain it, and most months there's nothing to explain: all things being equal, you'll be above your own average half the time and below it half the time. ## Ask what it's measured against Every variance is a comparison, and the thing being compared against is usually picked out of habit rather than on purpose. Month-on-month assumes all months are equal, which they aren't: they differ by working days, by season, and by what happens at the end of a quarter or year. Year-on-year assumes last year was representative, and the irony is that last year was no more normal than this one. It had its own one-offs and distortions, which everybody has since forgotten, and so did last month. Comparing against plan is at least a comparison against something somebody chose on purpose. How each number is defined gets settled by habit too. Gross margin is the one I always look at twice. Businesses take quite different approaches to which costs count as cost of sales. Gross margin looks like one of the simple, straightforward numbers, but it is generally worth digging into. So a variance often tells you less about the month than about the baseline you chose. And a total can hide the real story entirely. I've seen a flat top line that, once broken down, turned out to be two stories cancelling each other out: a growing core business, and one region where customers' budgets were being cut. Manufacturing worked this out a long time ago. Any complex process gives results that vary. Rather than explain every difference, manufacturing built a language for it: tolerances, thresholds, the difference between a reading inside normal behaviour and one outside it. Finance and knowledge work have the same kind of variation, coming from customers and processes rather than machines. We've just never really adopted the language. There's no agreed answer to when a movement deserves escalation, when it deserves a conversation, and when it's simply fine. So the movements get discussed every month, whichever way they went, because by definition there's always a variance against something. ## The cost of chasing it Getting this wrong costs more than the meeting. An industry grows up around explaining the movements. There's always an explanation available, so a finance team asked for one every month will supply one every month. After a while, a serious amount of capable people's time goes into accounting for movements, in write-ups that nobody reads, nobody tests, and that change nothing about what anyone does next. To be fair, some of this checking is genuinely owed, because your bank and your auditors need theirs. But that's a different document from the one management steers by. The worse cost comes once a business reaches a certain size. If you misjudge what counts as a real movement and act on a random wiggle, the briefing and re-pointing of teams begin. In a small business that's recoverable, because you can stop it quickly and aim somewhere else next month. Once you're mid-sized, the briefing takes a month or two to reach the people who actually have to do it, and by then you've held another monthly review and started another set of things. The business is still taking in last month's instruction while receiving this month's. The two aren't obviously related, and nobody further down the chain can tell you which of them still matters. So the whole place works flat out without moving anything forward. ## A chart instead of a table The fix costs almost nothing. Plot fourteen months of each row against a band, with upper and lower limits worked out from its own history, and you can see in a couple of seconds whether the line has gone anywhere. A month inside the band gets noted. A month outside it, or a run of months all on the same side of the centre line, gets investigated. The question changes from "why is this month down on last?" to "is anything unusual happening?", and most months the answer is no, and the meeting moves on. Below are the same five rows, plotted. Two of them are noise, one is a live signal, one is a one-off change that has stuck, and one is distorted by the history it's being compared with. The colours in the table are no guide to which. <iframe src="https://anishshailpatel.github.io/instruments/five-shapes.html" title="The same five rows plotted: two of noise, two signals and a contaminated baseline" width="100%" height="1280" style="width:100%;border:0;display:block;margin:1.2em 0;" loading="lazy" sandbox="allow-scripts allow-same-origin"></iframe> **Gross margin is the live signal**, and the one the table nearly waved through. It has sat below the level of its first eight months for six months running. No single month's move was big enough to raise a question, and this month it's green. Slow declines get through a year of packs like that. The question for the meeting is when it started and whether it's still going. **New bookings** look like the worst number in the pack and are telling you about last year. The 29% fall is against a May 2025 that had one big deal in it. That deal also sits in one of the months the limits are drawn from, so it drags the centre line up and every ordinary month since looks a little low. Take the deal out of the history before you draw the limits, then read the row again; it will most likely be noise. The other three are quieter. Revenue is noise. It typically moves by more than £250k from one month to the next, and this May is inside its limits. Last May was the highest of the fourteen months, which accounts for most of the 5.7% fall on last year. Overheads are noise too, with nothing outside the limits and no run. Debtor days changed once, in month nine, and stayed changed. So limits drawn from before the change will flag every month after it. Find out what changed, draw the limits again from where the number now sits, and stop discussing it. The width of the band comes from how much the number already moves month to month, so a steady line earns tight limits and a lumpy one earns wide ones. Or set the band at the size of move that would actually change a decision: getting close to the terms of your bank loan, a hiring freeze, a price rise. Then check each way of setting it against the other. In the chart, turn the bounce up on gross margin with process limits on. As the band widens, the months outside the limits drop away, but the six-month run below the centre line stays put. That's what the run rule is for: catching a slow drift where no single month looks unusual. Two kinds of number need a different baseline before any of this applies. A properly seasonal line should be measured against the same month in earlier years, rather than the last fourteen months. For a business whose customers buy around a budget round or the school year, that's most of the pack. A business growing to plan will drift out of its historical limits because it's meant to, so the thing to compare it with is the trend or the budget. > [!note]- The working > The chart is a process behaviour chart from [statistical process control](https://en.wikipedia.org/wiki/Statistical_process_control): a centre line from the baseline months, limits either side of it at roughly two and two-thirds times the average month-to-month move (the multiplier that turns an average move into a three-sigma band), and a run rule for six months on one side. The textbooks use eight or nine: the Western Electric rules set the run at eight, Nelson's at nine, and Nelson chose nine over eight deliberately to halve the false alarms. Six is a trade, and worth making knowingly. A monthly pack hands you twelve observations a year, so a run of eight means most of a year before anyone is entitled to ask a question, and the point of the chart is to see a drift while it's still cheap. The price is the false alarms: six on one side happens by chance about 3% of the time for any one row, so five rows will throw a spurious run about once a year. And the limits assume each month is independent of the last. A recurring-revenue line or a headcount-driven cost tends to wander instead, which tightens the limits and lets the run rule fire on ordinary drift. The usual remedy is to chart the monthly change rather than the level. The tool also offers plain standard-deviation bands for comparison: one standard deviation flags about a third of ordinary months for nothing, and two let about nineteen in twenty through. Eight months is also a short baseline, so treat the first signal as a prompt to check the limits before you treat it as a finding. Some of the formal machinery is more than a monthly pack needs; the simple idea behind it is the powerful part. If you pick a threshold only after you've seen the numbers, it will just back up whatever you already wanted to do, whether that's acting or leaving well alone. That's why it has to be set first. Then accept that most months are ordinary, with no root cause to find and nobody to blame. That's okay. ---