For a shop, "the system is down" is not an inconvenience. It is a queue of customers walking out. That requirement rewrites the architecture.
Most business software is allowed to wait. A report can render a second late; an invoice can be saved when the connection returns. A point of sale is not allowed to wait, because the person at the counter has a queue behind them and a decision to make right now.
We built a POS for supershops where the internet is not dependable. The requirement was blunt: the counter keeps selling when the line is down, and nothing is lost when it comes back. Almost every architectural decision in the product traces back to that sentence.
A cached application is an online application that degrades. An offline-first application is a local application that happens to synchronise. The difference shows up in where the truth lives.
In the offline-first version, a sale is complete the moment it is written locally. The server is not asked for permission; it is informed later. That inverts the usual flow and forces you to answer questions the online design lets you avoid — chiefly, what happens when two tills and a server all believe different things.
Not everything needs to work offline, and pretending otherwise makes the product enormous. We split it:
Writing that list before writing code is the single most useful hour in an offline project.
Two tills sell the last unit of the same item while both are offline. No synchronisation algorithm can tell you what should happen, because that is a question about the business, not the data. Does the shop oversell and reconcile? Does the second sale become a back-order? Does stock go negative and get flagged?
Our rule: the engineering team never picks the resolution. We present the cases, the owner decides, and the decision is written down and implemented explicitly. A conflict rule discovered by a cashier at the counter is a defect regardless of what the code does.
Synchronisation is the part most likely to lose data, so it gets the dullest possible design:
A system that genuinely works without the internet invites an obvious question: why is it billed monthly like a service that depends on being online? For this product the answer was that it should not be. It ships on a one-time licence — which is also a constraint on us, because software sold once has to be cheap for us to support.
You cannot verify an offline product on a good connection. Our test routine includes pulling the connection mid-transaction, restarting the machine with unsent events queued, running two tills against the same stock while both are offline, and reconnecting them in the wrong order. Each of those found something the first time we ran it.
SATUMM's POS System is deployed at TS Future in Klang, Malaysia. The approach described here is what that deployment runs on.
Artificial IntelligenceTranslation was the easy part. The hard part was everything a language touches that is not text.
Quality AssuranceSelf-healing automation is sold as a fix for flaky suites. Used carelessly, it hides exactly the failures you built the suite to catch.
Artificial IntelligenceAn AI that can publish is an AI that can publish a mistake under your name. Approval is not a setting — it is the architecture.
If it is, we would rather talk it through than have you read another article about it.