Home About Experience Projects Case studies Resources Articles Briefs Playbook Tools FAQ How we start Security Get in touch

Case study 12

Hundreds of held rows, a few dozen decisions, one morning

Confidential engagement, described by its shape. Every image and file on this page is rebuilt with invented data.

All case studies · 12 of 15

A hold backlog of hundreds of rows, all filed under one misleading label, became a few dozen checks with named owners. Roughly half of it cleared in one morning, and the rest went out the same day as one message per owner.

Held records were blocking the pay run. They had piled into the hundreds and the backlog was due by the next morning. Every row sat under the same error label, so it looked like one problem with one owner. It was not. Reading the message text row by row showed several distinct error types, each owned by a different person, and some that only the supervisor could fix.

Classify by the real message. I exported every row with its full message text and sorted the rows into classes by what the message said, not by the label on top. A queue label tells you what the system thinks is wrong. The message tells you what is actually wrong.

Name an owner for every class. Each class got one owner before anything moved: rows I could fix myself, rows for the supervisor (pay types, rates, anything from a prior period) and rows for the account specialist (missing budget lines). A class with no clear owner does not wait in limbo. It gets one assigned first.

Group rows into checks. Inside my own classes I looked for the smallest key where one decision fixes every row that shares it. That key was account plus person plus pay code. Hundreds of rows collapsed into a few dozen checks, about five times fewer decisions.

Stable IDs. The first worksheet looked rows up by their position. A simple re-sort broke every summary formula in it. I rebuilt it with a stable check ID on every row and keyed every lookup on that ID, so sorting and filtering can no longer move an answer.

Prove it with a re-export. After each fix I spot-checked one row in that check. Then I re-exported the hold list and compared it with the original. A check counted as cleared only when its rows were gone from the new export, not when I believed it was done.

Hold Worksheet, Summary tab: by type

TypeOwnerRowsChecks
Missing approvalMegan Fairhall7514
Duplicate entryMegan Fairhall408
Rate not on planChris Dunmore398
Expired planRachel Ostley376
Prior periodSarah Tellwick285
Vendor mismatchJames Welford214
Total24045
Rows =COUNTIF('Raw rows'!$G$6:$G$245,$A8)   Checks =COUNTIF(Checks!$B$6:$B$50,$A8)   Check ID = Account + Person + Code

Hold Worksheet, Summary tab: reconciliation

CheckValueResult
Rows in export240OK
Rows covered by checks240OK
Unclassified rows0OK
Checks with zero rows0OK
Checks missing from Checks tab0OK
Owner totals equal type totals240OK
=SUM(Checks!$F$6:$F$50) against =COUNTA('Raw rows'!$A$6:$A$245), then =IF(C39=D39,"OK","CHECK")

Route the rest. Every other owner got one message with only their rows, grouped by check, saying what I saw and what was needed. No forwarded spreadsheet and no reply-all. Two rules held throughout: never edit a source plan to make a record fit, and if a duplicate has no surviving original, escalate it instead of deleting it.

Hold Worksheet raw rows tab: pasted export with Type and Check ID filled by formula from the message text
Raw rows: Type and Check ID are formulas
Hold Worksheet checks tab: one row per Check ID with row count, date range, owner, action and status
Checks: one row per Check ID, owner looked up
Hold Worksheet summary tab: rows and checks by type and by owner with cleared, routed and open counts
Summary by type and by owner, all formulas

Click any image to see it full size. Every file here is rebuilt with invented data.

The results, in bands. Hundreds of rows became a few dozen decisions, about five times fewer. Roughly half the backlog cleared in one morning and every remaining class had a named owner by the end of that day. A second, smaller hold class later shrank from dozens of rows to a handful of checks the same way. The worksheet became a standing tool, re-run after each re-export.

What went wrong
  1. My first instinct was to report the backlog as one problem with one owner, because that is what the label said. Reading the messages showed several. Classification now comes before any count or report.
  2. The first worksheet broke when it was re-sorted, because its lookups used row positions. I rebuilt every lookup on stable check IDs, and no formula depends on row order now.

Case study 12

Hundreds of held rows, a few dozen decisions, one morning

WhereA back-office provider running time and spend administration for many small client accounts; details changed
RoleRemote operations assistant to the supervisor, working the backlog on assignment
ScaleA hold backlog in the hundreds of rows, due by the next morning; several error types under one label
StackSpreadsheets, scripts, a shared task tracker, email