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

Operations

Hundreds of Exceptions, a Few Dozen Decisions

A big backlog of exceptions does not shrink because you work faster through the rows. It shrinks when you turn rows into decisions, then make the decisions that clear the most rows first. Hundreds of rows usually hide a few dozen real choices.

I have faced this shape of problem twice, on two very different teams. One was a pile of stuck records with a deadline the next morning. The other was a list of naming conflicts left behind by years of people setting up projects their own way. The fix was the same idea both times: stop counting rows and start counting decisions.

In one back office: hundreds of rows, due by morning

A hold backlog had grown into the hundreds. Every row was a record the system would not process, and the whole lot needed to be cleared or routed by the next morning.

My first worksheet was the natural one. One line per row, a status column, and a summary at the top that counted what was cleared. The summary looked rows up by their position in the sheet. Then I sorted the sheet to put similar rows together, and every summary formula broke at once. The numbers still showed. They were just counting the wrong rows.

That was the first lesson, and it is a small one with a big cost: never let a formula depend on row order. Every lookup has to point at something that stays with the row when it moves, like an ID.

The second lesson came from the sort itself. Once similar rows sat together, it was obvious that most of them were not separate problems. The same account, the same person and the same code showed up again and again, once per date. One fix would clear every one of those rows.

So I grouped the rows by that key: account plus person plus code. Each group became one check, with its own stable ID, and every lookup was rebuilt on that ID. Hundreds of rows became a few dozen checks. That is about five times fewer decisions, and roughly half of them were cleared in one morning. The rest went to the people who owned them, each with only their own checks attached.

Find the smallest key where one decision fixes every row that shares it. About five times fewer decisions is common.

On another team: a hundred naming decisions

Somewhere else, I was reconciling a task tracker that many people had set up over time. Lining the projects up produced about a hundred naming decisions. Was "In Progress" the same as "Doing"? Should "Completed" become "Done"? What should an untitled section be called?

I started at the top of the list and worked down. The first hours went into names that each appeared in exactly one project. Meanwhile one unnamed section appeared across dozens of projects, waiting near the bottom of an alphabetical list.

The fix was a single extra column: reach. For each value, how many distinct places does it appear? Sort by that, descending, and the list reorders itself by payoff. The first decision now cleared dozens of places. The first ten cleared most of the list.

14 ROWS, GROUPED BY ACCOUNT + PERSON + CODEC13 rowsC22 rowsC32 rowsC42 rowsC51 rowC61 rowC73 rows14 rows became 7 checks. On a real backlog of hundreds: about 5x fewer.NAMING CONFLICTS, SORTED BY REACHuntitled section4 placesin progress2 placesto do2 placestail: 6 more values1 eachFirst batch: 3 rulings clear 8 of 14 places.Each ruling is written once in the crosswalk. The tail goes last.Group rows into checks, then rank the checks by how much they clear.
Figure 1: rows grouped by a stable key collapse into checks. Sorted by reach, the first few rulings clear most of the list.

Find the smallest key

Grouping only works if the key is right. The test I use is one question, asked of every group: would one action fix every row in it?

If the key is too broad, the answer is no. Group by account alone and you merge different people with different problems into one check that nobody can close. If the key is too narrow, you get your rows back. Add the date to the key and every group is a single row again.

The right key is the smallest one where the answer is yes. In the back office it was account, person and code. In the tracker it was the normalized name. Write the key down at the top of the sheet, so the next person groups the same way.

Rank by reach, rule once

Reach is the number of distinct places an exception touches: records, projects, people. Count places, not occurrences. A value printed twice in the same project still has a reach of one.

Before counting, normalize the obvious variants: case, spacing, punctuation. "Untitled section" and "untitled Section" are the same problem, and they should land in the same row.

Then take the list in batches of about ten, one sitting per batch. For each item, write the ruling once in a crosswalk:

FromToRuled byDate
untitled sectionGeneralTeam leadDay 1
in progress, doingIn progressTeam leadDay 1
completedDoneTeam leadDay 1

The crosswalk does two jobs. It means no exception is ever decided twice, because you check it before deciding. And it is the only source for changes: rulings are applied from the crosswalk in bulk, never by scattered hand edits that drift from what was agreed.

The crosswalk starts empty on purpose. Nothing gets applied without a ruling, and rulings that belong to someone else go to that person as a batch, not one message per item.

Stop at the tail

Every reach-sorted list ends in a long tail of items that each touch one place. Working the tail feels productive, because each item closes quickly. It is mostly not worth the time.

So set a stop rule before you start. When the remaining items touch one record each, stop and decide, as a separate question, whether the tail is worth clearing at all. Sometimes it is. Often it can wait for the next time someone opens those records anyway.

What goes wrong

When the fixes are in, re-export the backlog and compare it with the original. That is the proof the fixes landed, and that nothing new appeared while you worked.

If your exceptions come from matching payments to invoices, the same grouping logic applies to the payment reconciliation exception queue. For any list, the free backlog grouper ranks values by reach, cuts them into batches of ten, and shows how much each batch clears. The full method, with the crosswalk template and checklists, is in The Backlog Playbook (PDF).

The takeaway

Before you work any exception list, add two things. A grouping key, so rows become decisions. And a reach column, so the decisions that clear the most go first.

Rule each one once, write it in a crosswalk, and apply only from there. Never let a formula depend on row order. Stop at the tail and decide it on purpose.

Count decisions, not rows. Group by a stable key, sort by reach, and rule each exception once.

Paul Prado Pacardo is a Senior Executive Assistant and Operations professional with over ten years supporting C-level leaders, and the solo founder of a multi-product software studio. Available for remote Chief of Staff, Operations, Senior Executive Assistant and Project Manager roles.