← All case studies

We met the buying desk of a lumber and millwork operation that had tried twice to benchmark its own supplier prices and abandoned both attempts. The reason turned out to be structural. Lumber is bought against an item code, the length is not in the code, and length is one of the things that moves the price most.

Six figures
Of proven saving, in the narrow sense that a cheaper supplier already sold the same product at the same length in the same quarter. A similar sum of cross-length leads sits beside it and is never added in.

Who we met

A buying desk of a handful of people covering thousands of items across two sites, and the strategic director who owned the supplier relationships. They knew perfectly well that some suppliers were dearer than others. What they could not do was prove it on a given product, which is the only form in which the argument is worth having with a mill.

Two earlier attempts had died on the same rock. Lumber prices moved a long way over the period, so any comparison reaching across time measures the calendar as much as the buying. One of those attempts produced a headline saving several times larger than the one now published, and most of it was simply the market falling.

What we did

Interviews with the buyers and the director who owned the supplier relationships, then a read of the workbooks they were using to get round the reporting.

Softwood logs stacked lengthways behind steel bunk stakes, cut ends and bark visible
What arrives is a grade, a length and a species. What the system stores is a code, and the attributes that set the price sit in the text beside it.

Checking the fix against the market, not against itself

Watching a purchase actually get made is where the description field came up. Along the way we corrected a unit-of-measure convention on a small number of lines that had been overstating reported purchase spend for years.

That correction was checked against the outside world rather than against itself. Normalised, the cost series tracks the lumber market through its spike and its crash. That agreement is what tells you a fix is right rather than merely different.

Length came out of free text through a parser we wrote against their own descriptions, with self-tests so it fails loudly rather than drifting. It knows that random length is a real trade category and not a missing value, which is the sort of thing you only learn by asking.

Then we defined the terms with them rather than for them. A credible supplier is one already carrying a meaningful share of that product's volume in that quarter, because without a floor a single small keenly-priced lot sets a benchmark and the whole number becomes fiction. Suppliers merge on name rather than identifier, since one supplier can hold several. And a handful of external mills that look internal, sharing a prefix or a home town, are excluded by an explicit list that was checked line by line rather than by a pattern that would have deleted real suppliers.

On the receivables side we connected the open ledger, modelled ageing against the due date rather than the invoice date, and surfaced credit-hold status from a field that existed in the raw data and had never been modelled.

What we left them with

A page a buyer opens to see which products are worth renegotiating, ranked by the money on the table, with the incumbent marked and the alternative beside it.

One code, several products.

// Illustrative · not the customer's data
// Same code, same supplier, same daydifferent product

Read the attributes out of the description and a supplier comparison becomes like-for-like. Leave them there and part of every reported saving is a measurement of board length.

// Two columns, never oneproven vs potential

Named so they cannot be read as one figure. A cheaper supplier at a different length is a call worth making, not money already in hand.

// Promised against deliveredwho to plan around

A supplier quoting a fortnight and taking a month is harder to plan around than one quoting a month and keeping it.

Beside it, a receivables worksheet that opens on the largest overdue balance rather than an alphabetical list, and shows an account that is technically current and over its credit limit as both of those things at once. That distinction came directly from them.

We view the customer as on hold, not just the order. It's that they are over their credit limit so we won't release any more orders. It's really about their account is suspended and they can't buy anything else from us.

Strategic business director, lumber and millwork operation

The system models a hold against an order, because an order is where the transaction sits. Commercially the hold belongs to the customer. A tool that mirrors the system rather than the business keeps giving technically correct answers that feel wrong, and eventually nobody opens it.

The result

Six figuresOf proven saving: same product, same length, same quarter, a cheaper supplier already carrying volume
Held apartA similar sum of cross-length leads, listed separately and never added to the proven figure
4 in 10Purchase orders arriving on or before their promised date, now scored per supplier
~1 in 3Of the open receivables book past due, aged per invoice rather than per account

Twelve months of purchase lines and a single day's receivables position, computed by Quarri from the operation's own order, purchase and receivables data. Transfers, cancellations and internal accounts excluded. Figures given as proportions and orders of magnitude throughout.

MarginSix figures

Provable on a named product at a named length, which is the only form the conversation with a mill can take. The leads sit separately so the two can never be read as one total.

CashPer invoice

Ageing against the due date, credit exposure against the limit, and account holds visible for the first time. Several accounts were over their limit while reading as current.

Time

Two questions that used to need an export and an afternoon now open on the answer: what should we renegotiate, and who do we call today.

What made the difference was not the benchmarking so much as agreeing what counted as comparable before any of it ran. More on how that works across a finished-products operation on the wood products page.

See it on your own data.

Live in two weeks, on the systems you already run.