Skip to content
02Engineering notes

Decisions, and why they went that way.

Notes from the systems on this site — the trade-off each one turned on, written down so the reasoning outlives the result.

  1. 01

    A modular monolith, on purpose

    Retail software moves money and stock, and both need to be correct at the same instant. Splitting sales, inventory and payments into separate services would have bought independent deployability at the cost of distributed transactions across exactly the operations that must not drift. The POS backend is one Spring Boot application with hard module boundaries instead — the seams are there to extract later, if scale ever justifies the operational cost.

    ARCHITECTURETRANSACTIONSPOS

    See Aqvion POS
  2. 02

    Keeping search off the write path

    Indexing a journal entry into Elasticsearch as part of saving it makes the editor as slow as the search cluster, and as unreliable. In Mindora the journal service publishes to an exchange and the search service consumes from it, so a save completes on the database write alone. Indexing lags by a moment and nobody notices; the alternative is an editor that stalls when the index is busy.

    EVENT-DRIVENRABBITMQELASTICSEARCH

    See Mindora
  3. 03

    Degrade the feature, not the request

    An AI feature that depends on one provider inherits that provider's outages. Mindora's AI service falls through Gemini to Anthropic to HuggingFace and finally to deterministic heuristics. The last tier is not clever, but it always answers — so mood detection gets worse under failure rather than disappearing, and the request never hangs waiting for someone else's API.

    AIFALLBACKRELIABILITY

    AI & Intelligent Systems
  4. 04

    Stock is a ledger, not a number

    Storing a single quantity per product makes every discrepancy unexplainable: you can see that the count is wrong but not when or how. Inventory is kept as an append-only history of movements — received, sold, damaged, adjusted — with current stock as a read model over it. Reads stay fast, and every number can be traced back to the events that produced it.

    DATA MODELLINGAUDITINVENTORY

    See Aqvion POS
  5. 05

    Shipping a server as a desktop app

    A shop with an unreliable connection cannot depend on a hosted till. Aqvion POS is packaged with Electron bundling the Next.js front end, the Spring Boot backend, a JRE, Node and PostgreSQL into one NSIS installer. The main process supervises those children with readiness checks, a single-instance lock and graceful shutdown — the complexity moves into packaging so it stays out of the shop.

    ELECTRONPACKAGINGOFFLINE-FIRST

    See Aqvion POS
  6. 06

    Offline-first means no server at all

    Offline-capable usually means a cache in front of a server. For a school with no reliable line, that is still a dependency. The School Management System runs against a local SQLite database with no server process and no network call in any core path — admissions, fees, results, attendance. WhatsApp messaging is deliberately isolated as an optional integration, so the one networked feature can never take the rest down with it.

    OFFLINE-FIRSTSQLITEEDUCATION

    See the School Management System
03Work with us

Have a problem that turns on a decision like these?