The shop had been trading for nineteen years. Two stores, eleven staff, 4,118 product lines, and a manual till that did exactly one job: it opened when you pressed the button. Prices lived on stickers and in the heads of the two longest-serving cashiers. Stock was counted once a year, over a long weekend, by everybody, badly.
None of that was stopping the business trading. It was stopping the owner from answering three questions: how much did we actually make today, what do we own right now, and which of these 4,118 lines is worth the shelf space.
This is what it took to change that: twelve weeks from the first walk-through to the second store trading on the new system.
What "manual" actually looked like
It is worth being specific, because "we run on a manual till" hides a lot of quiet workarounds.
- Cash-up was a subtraction. Count the drawer, subtract the float, compare it to a hand-written total from the receipt book. A variance under a couple of hundred rand was normal, and normal meant nobody investigated it.
- Prices were negotiable by accident. Two staff members knew the trade discounts. When they were off, customers were charged whatever the sticker said, including stickers from two price increases ago.
- Reordering was a walk. The manager walked the shelves on a Tuesday with a clipboard and ordered what looked low. Fast lines ran out between walks. Slow lines were reordered because they looked tidy and full.
- Stock value was an estimate in the annual accounts. The number that went to the accountant was a count adjusted by a feeling.
- Nobody knew line-level margin. Total sales minus total purchases, once a year, told them the business made money. It never told them which products did.
A manual till does not lose you money on the day. It loses you money over a year, in a thousand decisions made without the information that a till could have been collecting all along.
What we put in
Deliberately unexciting. A mainstream cloud point-of-sale package with a stock module, configured properly, rather than anything bespoke. The custom work was limited to two things the package could not do: their trade-pricing rules, and a nightly push of sales and stock movements into the accounting package they already paid for.
| Piece | What it is | Why it was needed |
|---|---|---|
| 4 till stations | Touchscreen, receipt printer, cash drawer, barcode scanner, card machine integration | Three at the main store, one at the smaller branch |
| POS and stock software | Cloud package, per-till monthly subscription, offline mode on each till | Load-shedding and a flaky line meant trading could not depend on the internet |
| Product file | 4,118 lines cleaned down to 3,380, each with a barcode, cost, price and supplier | The single biggest piece of work, and the one nobody quotes for |
| Label printing | One label printer per store, shelf labels and own-barcode labels for unbarcoded lines | Roughly 600 lines arrived from suppliers with no scannable barcode |
| Accounting link | Nightly summary of sales, payments and stock movements into the accounting package | Stopped the shop and the books being two separate opinions |
Twelve weeks, in order
The build was never the long pole. Getting the product file honest was, and it always is.
| Weeks | Phase | What actually happened |
|---|---|---|
| 1–2 | Look and decide | Two days on the floor watching sales, cash-ups and deliveries. Package shortlisted, offline behaviour tested on purpose, pricing rules written down for the first time. |
| 3–6 | The product file | Export, deduplicate, kill dead lines, set cost and price, attach suppliers and pack sizes. Two of their staff worked on this half-days, with us cleaning and loading. This is where projects overrun. |
| 5–7 | Build and configure | Tills configured, trade pricing built, accounting link written and tested against real invoices. Hardware landed and was burned in for a week. |
| 8 | Count | A full physical count of the main store on a Sunday, entered as opening stock. Not glamorous, and non-negotiable. |
| 9 | Train | Everybody, in shift-sized groups, on the real system loaded with real products. |
| 10 | Main store live | Tuesday, not Friday, and not month-end. Both of us on the floor for four days. |
| 12 | Branch live | Two weeks later, run by their own staff with us on the phone. That gap was the best decision in the project. |
Count first, go live second
A point-of-sale system with a stock module inherits whatever opening number you give it. Go live on an estimate and every report for the next year is built on that estimate, while the staff quietly learn that the system's stock figure is not to be trusted. Close for half a day, count properly, then start. The cost of that half-day is the cheapest part of the whole project.
The training was the project
The software was live in week ten. Adoption took until week twenty, and it is the only part of this story that determined whether the money was well spent. Our rule of thumb is unchanged: adoption is the project, and the go-live date is just a day in the middle of it.
What worked:
- Shift-sized sessions, 45 minutes, on the real system. Not a slide deck, not a demo tenant. Eleven people in four groups, each on the till they would actually use, ringing up products they actually sell.
- One laminated card per till. Six things: sale, refund, price check, account customer, void a line, end of day. Everything else could be asked. The card is still there.
- A champion in each store. Not the manager. The person the others already ask when something is confusing. They got an extra two hours and a direct line to us.
- Four days of floor-walking at go-live. Standing behind the till at the actual Saturday rush, not on a phone line. Queue pressure is where new systems get abandoned.
- A second session at week six. By then they had real questions, and they had invented two workarounds we needed to know about. One of those workarounds was a genuinely better way of handling deposits, and we built it in.
What did not work: the written manual. Twenty-two pages, opened by nobody. We replaced it with the card and eight ninety-second phone videos, which are watched.
What it cost
Two stores, four tills. The split matters more than the total: the software licence was the smallest line, and the people work was the biggest.
| Line | Once-off | Notes |
|---|---|---|
| Till hardware, 4 stations | R71,640 | Screen, printer, drawer, scanner per station |
| Network, UPS, label printers | R32,880 | Each till holds up through an outage |
| Implementation and configuration | R94,500 | Setup, trade pricing, accounting link, testing |
| Product file preparation | R27,600 | Plus 124 hours of their own staff time |
| Training and go-live support | R31,750 | Sessions, cards, videos, four days on the floor |
| Contingency, used | R25,900 | Extra counting weekend and 600 own-barcode labels |
| Total once-off | R284,270 | Spread across a quarter |
| Running cost | R7,940 / month | Software subscription for four tills, support, card fees excluded |
For scale: a single-till shop lands far lower, and a five-store group with integrated e-commerce lands well above.
What changed, measured
Six months after go-live, with the second store settled:
- Cash-up variance fell from R880 a week to R74, and, more usefully, every remaining variance now has a till, a time and an operator attached to it.
- Cash-up time went from 38 minutes to 6. Across two stores, six days a week, that is most of a working day a month handed back to the managers.
- Stock accuracy on a sample count moved from 62% to 96%, held there by counting a rotating slice of shelf every week instead of everything once a year.
- R178,400 of stock was identified as dead in the first quarter, most of it in three ranges nobody had noticed going quiet. It was cleared at a discount rather than written off two years later.
- Line-level margin became visible, and immediately upset somebody: the second busiest range in the shop was the fourth least profitable, because the trade discount had been applied on top of a price that had not moved in two years.
- Reordering became a report, not a walk, saving the manager two hours a week and cutting out-of-stocks on the top 200 lines noticeably.
What we would do differently
Three things, honestly.
First, we would barcode the unbarcoded lines earlier. Those 600 items were left to week eight and became a scramble. Capture at the source only works when everything can be scanned, and the shop's own labels needed printing, sticking and checking.
Second, we would migrate less history. Nine years of sales history was loaded because it was available. Two would have been plenty for buying decisions, and it would have saved a week of reconciliation over data nobody has looked at since.
Third, we would push harder on the price list before go-live. Old stickers came off, but the underlying question of what the trade discount should actually be was a business decision, not a systems one, and it got dragged into the project. Settle it first, then configure it.
If you are the one deciding
The honest version: a rollout like this is a quarter of your attention, a defensible amount of money, and a product file you will spend more time on than you expect. What you get is not "a new till". It is the end of guessing, and the numbers you have been running the business without.
Start smaller than you think. Get the product file clean, count properly once, put one till in and use it for a month before rolling out the rest. The stock discipline underneath it matters more than the brand of software on the screen.