The business supplied the volume, the handling time and the resolution days. Everything else is arithmetic on their figures.
A human has to confirm every bank transfer. That is unavoidable. Where the proof landed was not.
Payment was requested on one WhatsApp number. Proof went to another. Neither was linked to the order, so one payment meant three surfaces in your head.
Both interfaces, playing themselves. The staff side is the product: the proof is already on the order, so the entire remaining job is looking at it and deciding.
Recreated interface on invented orders. Nothing here is connected to a live store.
It is already on your order. Nothing else to send.
Recreated interfaces on an invented order. The real page needs a live order and a signed link.
Not into the payment. Into the lookup. The bottleneck was the search — the proof sat in a chat instead of on the order, and a chase with no deadline meant the order left the workflow and had to be found again from scratch.
Eight of the nine steps disappear. Not because anyone works faster, but because the proof arrives on the order, so there is nothing left to look for.
Three surfaces became one. Two inboxes became zero. The customer is told the exact amount. On an order that pays itself, staff do one thing: open the screenshot and approve it.
And noticing stopped being a person's job. An unpaid order chases itself at six hours and closes at twelve, so nothing waits on somebody remembering it.
The business knew the process was slow. Nobody had a number for it, and without one there is no case for building anything. So the old workflow was reconstructed step by step from how staff actually described it, and each step was given a duration.
| Step a person does | Before | After |
|---|---|---|
| 1. Send the request from the first number | 35s | — |
| 2. Open the store admin, find the order | 30s | — |
| 3. Read the phone number off the order | 10s | — |
| 4. Check the number it was meant to go to | 25s | — |
| 5. Check the other number too | 30s | — |
| 6. Chase them | 25s | — |
| 7. Move on, nobody can wait | 5s | — |
| 8. Days later, find the order again | 55s | — |
| Open the board | — | 10s |
| Open the screenshot | — | 15s |
| 9. Check it and set the outcome | 25s | 10s |
| Per order | 240s · 4 minutes | 35s |
Multiplied by four thousand it is 267 hours a month, and one person has about 160. That is a 107-hour shortfall — 40% of the work with nobody to do it.
A shortfall like that does not announce itself. It comes out as delay, and as orders that die waiting. Which is exactly the shape of the three figures the business measured: 3 to 7 days to resolve an order, 3 to 7 days before anyone notices an unpaid one, and one in five cancelled.
Eight of the nine steps are lookup, not payment. Only step nine — reading the screenshot and deciding — is the actual job. Automating the payment would have saved nothing. The target was never the transaction, it was the search around it.
Three decision points, and every one of them is a search. One loops back on itself: chase, park, return, and start the lookup again from nothing. That loop is why an order took 3 to 7 days rather than four minutes.
Eight moments where they start to doubt the shop, against none afterwards. Not inconveniences — reasons to abandon the order or to call.
The worst is the last one. Being chased for money you have already paid is the moment a customer stops trusting a shop, and it is caused entirely by the proof landing somewhere that is not the order. It is the one failure the new flow cannot produce, because there is nowhere else for the proof to go.
Mostly yes. The cancel action is already wired and staff fire it from the dashboard today, so automatic cancelling is the same call on a timer. The messaging channel already exists too.
What genuinely has to be built is the timer — there is no scheduler of any kind. That is the work, and it is small. Sizing it this way is the difference between a proposal that gets built and one that gets deferred.
It would remove the problem at source. It is not available: payment-step extensions on this platform are restricted to its top tier, and there is no supported theme workaround.
It also inverts the failure. Today a failure means an order with no money against it. That version would mean money with no order against it, which is worse for the customer and worse for the business.
Three gaps, all closed the same day. The customer-facing pages shipped with no security headers, so the upload page could be framed by another site. A bad token returned a page instead of refusing. And the signed payment links never expired.
Fixed with a strict header policy scoped to the customer routes only, a proper refusal on a bad token, and a seven-day expiry that still honours links issued before it existed.
The post-deploy checks all passed while the app was refusing every real buyer. They tested that the lock worked — a bad token rejected, an unsigned request rejected, the public page loading. None of them tested that the key worked.
It was found by driving the real storefront in a browser and reading what the customer's own request actually returned. What ships with it now is a checkout test that places a real order, and an alarm that fires when a genuine buyer is refused. A check that only ever proves the negative case will pass on a completely broken system.
| Before | Today, live | With the automation | |
|---|---|---|---|
| Time a person spends on one order | ~4 minutes | ~35 seconds | ~35 seconds |
| Across 4,000 orders a month | ~267 hours | ~39 hours | ~39 hours |
| People that much work needs | 1.7 | 0.25 | 0.25 |
| Places to look | 3 | 1 | 1 |
| Steps done by a person | 9 | 3 | 1 |
| An order is resolved in | 3 to 7 days | Depends on staff noticing | 12 hours or less |
| Chases sent by a person | 800 a month | 800 a month | None |
| Orders that can go unnoticed | Any | Any | None |
Nothing about the payment itself got faster. What changed is that nobody has to remember it, so the waiting stopped being a function of whether one person got to it that day.
There is one member of staff on this. The work needed 1.7 people. That gap is the whole story, and it is why the delays and the cancellations looked like a people problem when they were a process problem.
One in five orders is cancelled unpaid — around 800 a month. That is the largest number in this project and it is deliberately left unpriced, because the average order value has not been supplied. One figure would turn it into money, and until it arrives this page states it as orders and nothing more.
It is also not yet confirmed whether that 20% is a share of all orders or only of the 20% that get chased. Read the conservative way, it is 800 a month. Read the other way, it is 160.
The designed chase fires at six hours and the close at twelve, so resolution stops depending on somebody noticing. The cancel action was already wired, so the work was the timer around it.
The upload attaches to the order automatically, so eight of the nine steps have nothing left to do. 267 hours of monthly demand becomes 39.
Asking, calculating, searching two inboxes and re-finding the order are all gone. What remains is opening the proof and deciding.
Three security gaps found on the live app and closed the same day, scoped so the merchant-facing side was untouched.
A test that places an actual order on the storefront, and an alarm that fires when a genuine buyer is refused rather than when a scanner is.
The payment section rides on the order confirmation email too, so a slow-loading prompt is no longer the only route to paying.
The time study, five findings, the requirements, and two more diagrams.
Everything above is the bottom line. If that is what you came for, you already have it.
What follows is the working: how the four minutes was established step by step, the five questions the analysis turned on, what got ruled out and why, the five requirements, and the security assessment. It is long on purpose. It is written to be checked, not skimmed.
Only wanted the result? Stop here. Every number is already above this line.