Tested, not promised.

CAD 2.0 passed all 113 automated reliability and load scenarios in our latest run, on 23 October 2026. We run them again as CAD 2.0 develops. Here are the results, the setup they ran on and how we test.

  • Offline reconcileExactly once20 sales rung up during a server outage; 26 sales and R 1 881.42 at the server once the link returned. Nothing missing or duplicated, synced in 3.1 s.
  • Busy store100 tillsSelling non-stop at 2 479.6 sales a minute, with 95% of sales finalised within 1.6 s and every sale reconciled to the cent.
Results

What we broke, and what held.

Each area is a set of automated scenarios. Every result is checked against what actually landed in the database, not against what the till reported.

Healthy till: scan and sale speed

5 of 5 passed

Normal trading with the store database up. The baseline every failure scenario is compared against.

  • Scans are answered by the store database
  • A cash sale is recorded exactly once, with stock moved once
  • A new till fills its own offline product cache without help
Average scan response
14 ms
Cash sale finalised in
50 ms

Store server unreachable

9 of 9 passed

The database service is stopped, or the network cable is pulled, while the till is trading.

  • Scanning continues from the till's own cache — no scan is lost
  • Sales are queued on the till and the cashier always gets an answer
  • When the server returns, every queued sale is sent exactly once, with nobody touching the till
Slowest scan once the till knows it is offline
11 ms
Back online after the server returns (worst)
8.2 s
Queued sales sent after the server returns (worst)
6.1 s

Database busy: tables locked by reports and backups

14 of 14 passed

The server is up but a sales or product table is locked — by a long report, a nightly backup, or another program.

  • Scans are never lost while a table is locked
  • The cashier gets an answer to every sale before the till gives up
  • Every sale lands exactly once after the lock is released; nothing is parked as failed
Slowest scan while a table is locked
5.0 s
Slowest sale answer while a table is locked
10.0 s

Connection lost in the middle of a sale

41 of 41 passed

The link to the database drops at every step of recording a sale — before a statement runs, and after it ran but before the reply arrived.

  • A write whose reply was lost is never blindly sent twice
  • Every sale ends up recorded exactly once, complete, with stock moved once
  • A second press of Finalise on the same sale is harmless
Slowest sale answer with the link cut mid-sale
12.0 s
Recovered sales recorded after the link returns (worst)
10.1 s

Till screen under faults

6 of 6 passed

The real till screen in a browser while the database is slow, busy or gone, and after a crash.

  • Scans fired while an earlier scan is slow are not lost
  • The online / offline badge changes by itself
  • A paid sale interrupted by a crash is recorded once on the next start
Badge shows offline after the server drops
27 ms
Badge back online after the server returns
13.6 s

Account, lay-by, voucher and points sales refuse cleanly offline

20 of 20 passed

Sales that need the store server's agreement are never queued — they are refused clearly when it cannot be reached.

  • Refused while the server is down, drops just before Finalise, or a table is locked
  • Nothing is saved and nothing is queued when refused
  • They go through normally when everything is reachable

Loyalty server outage after the sale

4 of 4 passed

The loyalty server drops after a voucher or points sale was approved.

  • The voucher or points commit is kept and sent once the loyalty server returns
  • A long outage never uses up the retries
  • A refusal is kept and shown, never silently dropped

Two tills, one database, faults hitting both

4 of 4 passed

Two tills, each with its own queue, selling at the same time while the server goes down, the link flaps, or a table is locked.

  • Both queue and replay at the same time; nothing is lost or doubled
  • Stock moves by the combined quantity of both tills
Slowest sale answer with both tills selling
10.0 s
Both queues sent after the server returns (worst)
10.2 s

Offline reconcile: sell offline, restore, totals match to the cent

1 of 1 passed

A trading session with the store server unreachable in the middle of it. Sales before, during and after the outage are compared with what the server holds once the link is back.

  • Transaction count at the server equals the count at the till
  • Rand totals of sales, lines and payments match to the cent
  • Nothing missing, nothing duplicated, stock moved once
  • The queue is sent by itself — nobody presses anything
Sales rung up while offline
20
Sales in the session
26
Sales at the server after sync
26
Rands taken at the till
R 1 881.42
Rands at the server
R 1 881.42
Missing
0
Duplicated
0
Sync time after the link returned
3.1 s
Load

Busy store: many tills selling at once

Simulated tills each ringing sales back to back — scan every item, then finalise — with no pause between customers. Far busier than real cashiers, so these are ceilings, not a typical day.

TillsSales / minFinalise p95Finalise p99Scan p95Scan p99Sales reconciled
52 241.654 ms64 ms36 ms47 ms2 251
102 488.7116 ms144 ms65 ms80 ms2 506
252 620.3301 ms375 ms147 ms175 ms2 664
402 520.7600 ms749 ms267 ms354 ms2 600
1002 479.61.6 s1.8 s663 ms904 ms2 650

p95 and p99: 95% and 99% of responses were at least this fast. Checked: every sale answered before the till's 25-second limit; every sale recorded exactly once; rand totals match to the cent. From 10 tills up, sales per minute level off while the time each sale waits rises. The database, the POS server and every simulated till shared one machine.

Setup

What it ran on.

Software
CAD 2.0, production build
Last run
23 October 2026
Hardware
AMD Ryzen 7 260, 16 logical cores, 16 GB RAM
Operating system
Windows 11
Database
MySQL, with the table layout stores run today, about 64 000 products
Where it ran
One machine runs the POS server, the database and every simulated till
Tills
Up to 100 at once
Method

How we test.

  • Each scenario runs the CAD 2.0 POS server software (the production build a till runs) against a real MySQL database with the legacy store schema.
  • A fault proxy sits between the POS server and the database and breaks the link the way it breaks in a store: connection refused, packets silently lost, the link cut in the middle of a statement, or tables locked by a report or a backup.
  • Every result is checked against what actually landed in the database — sale headers, lines, payments and stock — never against what the till reported.
  • Test sales use the store's ordinary product range, cash tenders and the suite's own test accounts. No customer records are used.
  • Scenarios are fully automated and repeatable; there are no retries — a scenario that passes only sometimes counts as a failure.
  • A lab run shows how CAD 2.0 behaved under these conditions. It isn’t a guarantee for every store, so each installation is sized for the store. How CAD 2.0 works
Questions

Asked and answered.

What happens to sales when a CAD 2.0 till loses its connection to the store server?

The till keeps scanning from its own product copy and queues each sale. When the connection returns, the till sends the queue by itself. In the lab, every sale was recorded exactly once, and the counts and rand totals matched what the till took.

Can account, lay-by, voucher or loyalty-points sales be taken offline?

No. Sales that need the server’s agreement are refused with a clear message while it can’t be reached. Nothing is saved or queued, and they go through normally once it’s back.

What if the connection drops halfway through recording a sale?

A write whose reply was lost is never blindly sent again. The sale is either completed or undone, and recorded once, with stock moved once.

How many tills can one CAD 2.0 store database handle?

In this run, 100 simulated tills sold at the same time with no pause between customers, on one AMD Ryzen 7 260, 16 logical cores, 16 GB RAM machine that also ran the database. 95% of sales were finalised within 1.6 s, and every sale was reconciled to the cent.

Do these results guarantee how CAD 2.0 performs in my store?

No. They show how CAD 2.0 behaved under the conditions on this page. Your hardware, network and trading pattern will differ, so we size each installation for the store.