THE SITUATION
Kestrel roasts coffee for 34 cafés. Since 2019 the entire operation — orders, roast plan, price list, invoicing — has lived in one workbook on a shared drive. And here’s the uncomfortable part: it worked. For years. Spreadsheets don’t fail on day one; they fail on row 214.
WHAT WAS ACTUALLY BROKEN
Not “messiness”. Specific things. The invoice total was a SUM written back when orders ended at row 207 — orders now reached 219, and the twelve at the bottom were being roasted, shipped, and never billed. A price rise in March reached every cell except the four where someone had once typed the number in by hand; those four accounts got 2024 prices for six weeks, £212 of quiet under-billing that we found during the build, not before it. Saturday orders came in from a phone as “12 kg” and “2 boxes”, which SUM skips without a word. And on Sunday nights two people were routinely in the file at once, which the shared drive resolved the only way it knows how: last save wins, loser’s work gone, no note.
WHAT WE BUILT
Deliberately small. An order system where quantities are numbers or they don’t go in. One price list, with dated changes that reach every order automatically — there is no cell to have typed over. Invoice totals are computed and can’t be edited; overrides exist, but they’re logged, carry a delta, and want a reason. Two people can work at once because that’s table stakes, not a feature. And a one-click export back to a spreadsheet, because the accountant wanted a spreadsheet, and for reading, a spreadsheet is fine.
WHAT CHANGED REPRESENTATIVE FIGURES
Friday invoicing went from most of an afternoon to about twenty minutes, and the twelve unbilled orders surfaced in week one. The roast plan now reads the same numbers the invoices do, so the two can’t drift. The workbook still exists — as an export. Which is the job it was always good at.