stuck orders reconciliation

Your Stuck Orders Aren't Stuck

November 10, 2026 · By Michael Pam

When a dashboard says your orders are stuck, don't send anyone to chase them yet. Check every flagged item against your system of record first, and do it read-only. In order pipelines we run, about half of what the alarm called stuck was already finished. The work had been done. The app's record just didn't know it. The fix for that drift belongs inside each app that owns the data, and never inside the monitoring tool that raised the alarm.

That's the whole argument. The rest of this post shows what we found and how we handled it, and it ends with a checklist you can run on your own queues this week.

What our first alarm actually found

We run order pipelines with several work queues, each with its own app tracking where every item stands. For weeks our alerting had been storing alerts without sending them. When we switched it to send, the first check flagged the oldest waiting item in four queues. The worst was about 90 days old against a three-day limit.

A 90-day-old order against a three-day limit is the kind of number that sends people scrambling. We didn't scramble. Before anyone chased a single item, we checked every over-limit item against the system of record, read-only. Nothing was changed, closed or touched until we knew what was real.

Here's what that check showed:

  • In the largest queue, about 55 percent of flagged items were already finished. The work was complete in the system of record. The app's own record had simply never been updated.
  • Across all four queues, 52 percent were already done. Roughly half the backlog existed only in the app's view of the world.
  • One queue's oldest item wasn't stuck at all. It was waiting on the end customer's approval. That alarm was measuring how long customers take to respond, which is a different number from app drift and deserves its own alert.

If we had started chasing from the dashboard, half the effort would have gone to work nobody needed to do. Customers who had already been served might have gotten follow-ups they didn't need. Someone might have redone finished work. And the real backlog would have stayed buried under the false one.

Why the records drifted

The largest queue's app had an automatic reconciliation step. Its job was to compare open items against the system of record and close the ones that were finished. It had never closed a single item, because of a software bug. The step existed, it ran, and it did nothing. No one noticed, because a reconciliation step that quietly closes nothing looks exactly like a reconciliation step that has nothing to close.

We fixed the bug the same day.

That detail matters more than any of the percentages. The app had a safeguard on paper. What it lacked was any check that the safeguard was working. A step you assume is running is worth nothing until you've seen it close something.

The rule we adopted

Once the cause was clear, there was an obvious shortcut on the table. The monitoring layer already knew which items were over the limit. It could have reached into each app and closed whatever the system of record said was done. One script, one afternoon, a clean dashboard.

We didn't do that, and we wrote down why. The rule we adopted:

Each app owns its own state and reconciles it against the system of record. The monitoring layer only collects and alarms. It never rewrites an app's data.

If monitoring starts fixing state, you end up with two things changing the same record for different reasons. The app thinks an item is open. The monitor closed it. The next time the app runs, it may reopen it, or skip it, or act on stale information. Now you have drift between the app and the system of record, plus drift between the app and the monitor, and nobody can say which record is right. Worse, the bug that caused the original drift stays hidden, because the monitor keeps papering over it.

So we closed finished items through each app's own close process, with an audit record for every one. In two queues, we archived items older than 30 days on the owner's ruling, in a way that can be undone. Every change has a trail.

Then the alerts kept firing. That's correct. What remained after cleanup was the real work, and the alarm should stay loud until that work is done.

We hold ourselves to the same standard we'd want from any system we hand a client, which is part of why we run our own marketing engine before selling it. Fixing the pipelines we run, in public, is how we know what reliable looks like.

1. Before chasing a backlog, reconcile it against your system of record

Your system of record is whatever holds the final truth about whether work is done: your order management, your accounting, your fulfillment records. Before anyone picks up the phone, pull the list of flagged items and check each one there. Read-only. Change nothing yet. Sort the list into "done there, open here" and "open in both places." Only the second group gets chased.

This is stuck orders reconciliation in its simplest form, and it costs far less than chasing ghosts.

2. Give each app an automatic reconciliation step, and check that it actually closes items

Every app that tracks work should compare itself against the system of record on a schedule and close what's finished. Having that step isn't enough. Check its output. If it has run for weeks and closed zero items while your backlog grows, assume it's broken until you prove otherwise. Ours was.

3. Separate "waiting on us" from "waiting on the customer"

An order waiting on your team and an order waiting on a customer's approval are different problems with different owners. Lump them together and your alarm becomes a blend of your speed and your customers' response time, which tells you nothing about either. Give each its own alert and its own limit. The customer-side alert tells you when to send a reminder. The team-side alert tells you when something is broken.

4. Set an age-out rule with an audit trail and a way to undo it

Some items get old enough that chasing them makes no sense. Decide in advance what that age is, who approves archiving, and how it's recorded. Every archived item should carry a record of when, why and on whose ruling. And it should be reversible, because the item you archive today may be the one a customer asks about next month.

5. Keep the alarm firing until what is left is real

After cleanup, resist the urge to raise the limit or mute the alert so the dashboard looks green. If items are still over the limit after reconciliation, those are your real problems. A quiet alarm over a real backlog is worse than a noisy one. Let it fire until the work is done or the rule is honestly changed.

An alarm earns trust only when what it counts matches reality.

Where this could be wrong

All of this assumes your system of record is right. If it's incomplete, or if work sometimes finishes somewhere that never reaches it, reconciling against it will close items that aren't done. In that case, fix the system of record first, then reconcile. Everything else in this post still applies.

Find out how much of your backlog is real

Metrix Digital helps businesses find out how much of their backlog is real, and then set up reconciliation that keeps it honest: each app owning its own state, monitoring that alarms without rewriting data, and age-out rules with a trail you can undo. If your dashboard is telling you work is stuck and you're not sure you believe it, request a proposal and we'll start with a read-only check against your system of record.

← All posts
Begin

Want this run for you?

We take on a small number of new partners each quarter. If you'd rather have a team build and run it, let's talk.