Twelve thousand files renamed in one pass is twelve thousand chances to be wrong at once. The preview is what makes that survivable — and it is the reason a person stayed in the loop without a person doing the typing.
Every certificate got a permanent address before a single message went out. That is what turns a correction into a regeneration instead of a re-send — and it is the cheapest decision on this page to make early, the most expensive to retrofit.
A matcher confident enough to correct a name is confident enough to attach the wrong family to a sacrifice. So above the bar it matches, below the bar it asks — and the question goes to the one person who can actually answer it, which is the customer.
Five, and the fourth one is the reason the system survived its first correction round.
| The manual step | What it cost | What replaced it |
|---|---|---|
| Renaming each file | Two admins, a week, 1,000 a day | Generated from the order record in one run |
| Matching a file to an order | Read by eye, so a typo mis-delivered | Matched on the order number, never on spelling |
| Chasing a missing name | Chased by a person, or silently never chased | Detected automatically, and the customer gets their own WhatsApp asking for it |
| Reading a name that arrived broken | Apostrophes and spacing corrupted by the export | Repaired on import, and never guessed at |
| Splitting a multi-name order | Up to eight names in one box, numbered three ways | Split on entry, type sized so the longest still fits |
| Sending each certificate | One email per order against a daily mailbox ceiling | One message per order carrying a link, nothing attached |
| Re-sending after a correction | Every fix was a second outbound campaign | Regenerated at the address the customer already holds |
| Tracking who replied | Replies scattered, no record of who was still waiting | One enquiry queue, every request in the same place |
Row three is the quiet one. Before, a blank or wrong name was only discovered when the customer complained, which meant the ones who did not complain simply received the wrong certificate. Now the system finds it and asks that specific customer for the correct name over WhatsApp, automatically. The chase stopped depending on somebody remembering to chase.
The certificate platform below is the flagship. It is not the whole engagement.
| System | What it replaced | Measured |
|---|---|---|
| Certificate platform This page | Two admins renaming files by hand, then emailing them one order at a time | 21,850 documents 5,414 orders |
| Order tracking | A Google Sheet acting as the database, edited live by staff | 2.5–4.3s → ~0.05s per action |
| Ticketing | Enquiries arriving on WhatsApp with no ticket, no owner and no clock | SLA measured in business hours only |
The order system ran on a spreadsheet. Every action a staff member took cost 2.5 to 4.3 seconds, measured, because it was a round trip to a Google Sheet. On the rebuilt engine the same action costs about 0.05 seconds. That is not a tuning gain, it is a fifty to eighty times difference, and it is the reason the board became something staff use all day rather than something they avoid.
Plenty of people can name a process problem. Fewer can write the requirement. Fewer still design the schema, ship the code, then run a security test against their own build and publish what it found — zero critical, zero high, four raised, two fixed the same day. Then write the staff guide, because a system nobody adopts is a system nobody built.
The first release made the old process faster. That is why it did not survive contact with the real volume.
The inputs were fine and the output was fine. Two steps in the middle were per-item, in a process counted in thousands of items — and neither of them required a decision from the person doing it.
Method, data and delivery were fixable. People, tooling and volume were not — a religious deadline does not move, and the window is staffed by whoever is available. The constraints had to be designed around, not argued with.
The expensive-looking options all left the renaming step in place. The previous release had done exactly that — parallelised the renamer so it ran faster, which is real engineering that changes nothing. Faster wrong is still wrong, and it is the most common way a process project spends its budget and ships no result.
The run is the easy half. The loop underneath it is the half that keeps working after handover — an enquiry arrives from the portal, a person rules on the name, and the certificate regenerates at the address the customer is already holding.
Names arrive typed by hand at checkout, so they arrive broken: eight in one box, numbered three different ways, apostrophes corrupted by the export, or simply blank. Eleven components clean and match. The twelfth stops and asks a person, because a confidently wrong name is worse than an unanswered one.
The batch had to be right before it was published, because a religious certificate cannot be quietly reissued.
| Check | What had to be true |
|---|---|
| Completeness | Every paid order produces at least one certificate, and the counts reconcile |
| Name integrity | Multi-name orders split into the right number, in the right order |
| Character handling | Apostrophes and non-standard characters render as typed, not as replacement marks |
| Typesetting | One name and eight names both fit the plate without overflow |
| Duplicates | The same name on different orders resolves to separate certificates |
| Address stability | A regenerated certificate keeps the address it was first published at |
| Exposure | A lookup returns only that order, and the full list is not enumerable |
| Repeatability | The same input produces the same output on a re-run |
Regeneration was written to reuse the existing address by default and mint a new one only for a genuinely new certificate. In the July round that split 54 in place against 9 new — which is the whole difference between a quiet fix and a second campaign.
The order number decides which certificate belongs to whom, so a typo can no longer mis-deliver one. Where the match is not confident the run stops and a person rules on it. Most of last year’s complaints were a name problem, and both changes attack the name problem directly.
The supplier batch stopped being the input. Certificates are rendered from the order data in a single unattended run, with the type sized to fit whatever name arrives, so no file is ever opened to be renamed.
Regeneration reuses the address by default. A name corrected after issue updates where the customer is already looking, so the correction never becomes a second outbound send.
Three releases, twelve components, and a working reconstruction you can click.
Everything above is the bottom line. If that is what you came for, you already have it.
What follows is the full working: 8 diagrams and 9 sections of working, the analysis behind each decision, and why it went that way instead of the obvious way. It is long on purpose. It is written to be checked, not skimmed.
Only wanted the overview? Stop here. You will not miss a single result — every number is already above this line.