Skip to content

Software engineering

Most of what I know about software engineering I learned by keeping software running after it shipped. These are the choices I make and where I made them.

Application architecture

I default to a modular monolith. In Rechvix an invoice must change stock, the ledger, tax and numbering in one transaction, so the modules live in one process and talk through application-layer interfaces. Domain packages hold pure rules and import no HTTP or database code. That boundary is what keeps a ten-year codebase testable.

OrderRestro went the other way on framework weight. It has twenty product domains that must be addable independently, so I used NestJS and its module system instead of hand-building the same structure on Express.

Languages and where I use them

  • Go for backends where correctness and a single deployable binary matter: Rechvix, KinetiRx and Submify.
  • TypeScript for the web layers and for NestJS and Node.js services: OrderRestro and the frontends of every project.
  • React and Next.js for interfaces. Next.js App Router also runs this website.
  • Python for automation and data work, described on the AI and automation page.

Data modelling

I treat the database as the system of record and the place where invariants should live. Rechvix stores stock as an append-only movement ledger with a rebuildable balance projection, and money as a decimal type, never a float. PostgreSQL is my default. Redis appears where a background queue is needed, as in the construction ERP. SQLite is a reasonable choice for single-user tools, but for OrderRestro I chose one database dialect over two.

Realtime

OrderRestro uses WebSockets through Socket.IO so a kitchen ticket reaches the display when it is created. KinetiRx uses server-sent events for live sync between counters, which is simpler and enough when updates only flow one way.

Desktop and packaging

Business software often has to run on a Windows machine at a shop counter. NodeDR POS ships as a Windows installer and a Debian package, and several products are packaged for the Microsoft Store. Packaging is part of the engineering: an install that fails costs a customer faster than a missing feature.

Testing and maintenance

Rechvix has unit and integration suites that run against a real PostgreSQL, a Playwright and axe-core accessibility suite on every pull request, and security scanning with govulncheck. I keep changelogs that state what is built and what is not. When a test or a review exposes a gap, I write the gap down.

Have something in mind?

Let’s build something useful.

Tell me about the idea, product, or workflow you’re working through.

Tap to say hello