Building Real Systems
Operational software for a physical process: modelling the floor in software, the data model, imports, paperwork and reporting, and what happens when the model and the floor disagree.
Most of this comes out of RPOMS.
Installing Drivers From Official Sources Only: Allow-Lists, Catalogue Hashes and Authenticode
How the Established Malaysian technology company Laptop Inspection Tool finds, downloads, installs and verifies a driver for a refurbished laptop without ever running an unsigned or unofficial package, and why its status vocabulary has no word for a success it did not confirm.
4 min read
Refusing Runtime DDL on Production: Schema Stamps, a Gate, and Schema-Only Migrations
RPOMS used to build its own tables on a cold start. On a shared production database that is a race and a risk, so the application now refuses to alter production schema, and a release ships as ordered, schema-only migration files with rollback blocks.
4 min read
Extracting Hardware Serial Numbers Over LAN: UPnP, CSTECGI, and SNMP Across Telco Router Vendors
How the Established Malaysian technology company Multi-Vendor Network Hardware Diagnostic Tool extracts authentic factory serial numbers directly over an Ethernet connection without an external barcode scanner, handling Kaon, Huawei, and TP-Link routers.
2 min read
Excluding a Damaged Display Zone via the Windows AppBar API (SHAppBarMessage)
How to salvage a laptop or monitor with a broken, flickering line of pixels by registering a hidden Windows Application Desktop Toolbar to shrink the system work area at runtime.
2 min read
Why Hardware Identity Matters: How Generated Stock Prefixes Concealed Duplicate Refurbishments in ITMS
An architectural audit of enterprise refurbishment systems: why generating sequential stock prefixes like 'HP1' creates phantom inventory, and how binding to immutable SMBIOS hardware serials provides a tamper-proof audit trail.
3 min read
Connection-Pool Exhaustion Under Serverless Scale: Investigating Supavisor and Vercel in Production
A postmortem of production incident INC-2026-10-11-01: why Vercel serverless functions saturated Supavisor transaction pool connections during a warehouse shift change while CPU was under 5%, and how we recovered with zero data loss.
4 min read
Versioning an Operational Spreadsheet Like Software
A stock tracker's Change History sheet as a release log: eight iterations before go-live, a 1.x line after, user-requested versions, and what an in-file changelog cannot give you.
5 min read
Vercel or a Self-Hosted Ubuntu Box? How I Chose Hosting App by App
Eight deployed apps, three hosting shapes: Vercel for pages and serverless APIs, a self-hosted Ubuntu box for a stateful API, and a hybrid for a model Vercel can't run.
6 min read
Testing Without Paid APIs or Hardware, and the Places Fakes Lied
Fake LLM providers, a simulated label printer and an in-process Postgres keep my test suites free and offline. What each proved, and three places a fake fell short.
5 min read
Backing Up a Database on a Plan With No Backups, and a One-Way Staging Refresh
The procedure and scripts I designed for a production Supabase database on the Free plan: a read-only JSON export, a restore that only targets staging, and an anonymising refresh.
4 min read
A Stock Request Portal With a State Machine and an Event Log
The lifecycle behind the RPOMS Ecommerce portal: a transition table, terminal states, a void that reverses, version-checked edits and an event per step.
5 min read
Splitting RM 10 Three Ways: Integer Sen and the Largest-Remainder Method
Floating-point money drifts and naive splits lose a sen. Integer sen at one boundary and the largest-remainder method, so shares always add up.
4 min read
Detecting a Device Model From Its Serial Number With Prefix Rules
How RPOMS and its print engine tell a router's model from its serial: prefix and length rules stored as data, longest prefix first, unknowns flagged.
5 min read
Schema Setup on Cold Start: One Statement, One Winner, and a Building Sentinel
Serverless instances that create tables on first use race each other and hold exclusive locks. How RPOMS claims the schema build with one SQL statement, and the bug in the first version.
4 min read
Apple Pay Is Not a Bank: Payment Channels, Funding Accounts and Reconciling Double Records
One purchase can arrive as an Apple Pay tap and again as a bank record. Separating how you paid from where money came from, and merging the duplicate.
6 min read
Preview and Commit From the Same Plan: Stock Transfers You Can Reverse Exactly
In RPOMS one pure function plans a stock transfer: the preview shows it, the commit re-runs it, and a void inverts the frozen executed plan exactly.
5 min read
Deletes That Don't Come Back: Tombstones and Last-Write-Wins in Offline Sync
In offline sync, a deleted record comes back when another copy is pushed. DriveKeep's soft deletes, tombstone list and timestamp merge, and its clock problem.
4 min read
Why My App No Longer Creates Indexes When It Deploys
A plain CREATE INDEX in a cold-start schema build locks a busy table as a side effect of shipping code. Moving indexes to CONCURRENTLY migrations, and what the app still does.
4 min read
Spending, Cash Flow and Who Owes Whom: Modelling Shared Bills in a Personal Finance App
When a bill is shared, 'how much did I spend?' has three honest answers. SpenDrop's rules for spending, cash flow, refunds and balances.
5 min read
Modelling a Multi-Stage Refurbishment Pipeline in Excel
Following one laptop through an Excel stock tracker: a completeness gate at receiving, an automatic hand-off list, status derived from department ticks, e-commerce counts, and EDATE warranties.
5 min read
Measured or Estimated: Calculating Fuel Economy Only From Full Tanks
Dividing a top-up into the distance driven gives a meaningless economy figure. How DriveKeep measures km/L only from full tanks and labels estimates.
5 min read
What Survives When an Excel Tracker Becomes a Web App
Mapping an Excel stock tracker's sheets, formulas and macros onto the tables of the web system that replaced it: what carried over unchanged, and what had to become explicit.
6 min read
A Written Conflict Policy for a Local-First Workstation App
How an offline-first PWA writes locally first, syncs on its own timer with backoff, and resolves conflicts with a rule per data type: last writer wins, server wins, append-only, never synced.
5 min read
Reference Data Nobody Can Edit: Postgres Triggers, Hash Pinning and Append-Only History
Protecting the examples an AI system is measured against: a trigger that refuses UPDATE and DELETE, SHA-256 hashes checked by tests, append-only history, and what these do not stop.
4 min read
Freezing a Label Design in CI by Hashing Its Rendered Raster
A Vitest test that hashes each label template's JSON and its exact 1-bit print raster, so any change that would move a single printed dot fails the build and the deploy.
5 min read
Encoding Vague Acceptance Criteria Without Inventing Thresholds
Criteria that said long, multiple and small with no numbers: how a pure rule engine applies vague words as categories, orders checks for safety and answers UNCLEAR.
5 min read
Configuration Health You Compute, Not Store: One Model Record Across Three Modules
How RPOMS merged three definitions of a router model into one record, and flags broken configuration with a pure function instead of an issue table.
5 min read
Dependent Drop-Downs With INDIRECT and Named Ranges, and What They Cost to Maintain
A Brand → Model drop-down built with INDIRECT and one named range per brand works well on day one. The two update procedures, orphaned #REF! names and fixed ranges are what it costs later.
6 min read
Designing a Delivery Module: Scan Boxes, Never Type Serials, Freeze What Left
How the RPOMS delivery module works: scanned boxes instead of typed serials, a load that must match its quantity, and a snapshot of what actually left.
5 min read
Proving a Release Deleted Nothing: Row-Count Gates and a Whole-Database Preservation Test
How RPOMS checks that a release or migration lost no business data: a row-count gate that fails on any decrease, read-only scripts, and a test that compares every row of every table.
5 min read
When Two Days Fill One Box: Counting Shared Consumables Without Double-Counting
A packaging box filled across two days must be charged once. How RPOMS derives each day's big-box usage from a running total, and how the rule evolved.
5 min read
Continuous Label Printing Without Duplicates: Page Counters and "Uncertain" Jobs
Why one printer job per label made the paper feed and rewind, how multi-page jobs fixed it, and how a print queue decides between a safe retry and a label that may already exist.
6 min read
Yesterday Is Not Enough: Choosing Comparison Baselines for an Operations Dashboard
The five baselines the RPOMS dashboard compares today against, how each is computed, why one rising metric is red, and why missing data shows N/A.
4 min read
A Performance Gate That Stopped Crying Wolf: Medians and a Noise Floor
A baseline-versus-current benchmark flagged regressions on identical code. Medians of three runs and a rule that ignores tiny metrics made it a gate worth trusting.
4 min read
An Append-Only Audit Log That Keeps What Was Deleted
RPOMS's audit log records who acted, from the signed session, and a snapshot of what each destructive action removed, which turns irreversible deletes into recoverable ones.
4 min read
When the Supabase Session Pooler Ran Out: An EMAXCONNSESSION Postmortem
Admin pages on a Next.js app on Vercel showed a generic error for about six minutes. The cause was Supabase's session-mode pooler hitting its 15-client limit, not the code.
6 min read
Logging Every Status Change in Excel With VBA to Measure Time per Department
Formula-driven status changes don't fire Worksheet_Change. How a stock tracker logged them with Worksheet_Calculate, timed each stage, and read the log back with SUMIFS and LOOKUP(2,1/…).
6 min read
Generating Barcode and Group SKUs in Excel From Spec Columns
How an Excel stock tracker built a per-brand serial that rolls past 99, a barcode SKU and a variant group key from spec columns with LET and TEXTJOIN, and where formula IDs break.
6 min read
Stock You Never Store: Deriving Inventory From a Ledger and the Day's Report
Why RPOMS never stores a stock balance: remaining is worked out at read time from a ledger and the daily report, so edits need no reversal and a figure can be traced.
5 min read
Staged CSV Import: Validating Operational Data Before It Is Written
The office already keeps its records in a workbook. Importing that sheet into a production system means matching its headers loosely, reading its dates the way it wrote them, surfacing duplicates before anything is saved, and never letting the client tell the server what a file contains.
5 min read
One Storage Interface, Three Backends: How RPOMS Picks Its Database
PostgreSQL on Vercel, MySQL on cPanel, or a folder of JSON files on a laptop, chosen by which environment variables exist. What that bought, what it cost, and the production lessons about pooled connections and reads that never came back.
6 min read
Reporting From Operational Data
What makes operational reporting actually useful for decisions, instead of just being a record of what happened.
1 min read
Why Software Developers Should Understand the Physical Process
Building software for a real operation goes better when the developer understands the physical process it supports, not just the data model.
1 min read
From Manual Workflow to Digital Workflow
What actually changes when a manual, paper-or-spreadsheet process becomes software, and what shouldn't change.
2 min read
How Admin Panels Help Manage Operational Data
What a well-designed admin panel actually needs to do for a production or operations system, beyond CRUD screens.
1 min read
Common Problems in Manual Production Tracking With Spreadsheets
The specific ways spreadsheet-based production tracking breaks down in practice, the tell that says it is time to move, and what a replacement has to remove.
3 min read
What Is a Production Management System?
A plain explanation of what production management software actually does, and why it's a different problem from a generic business app.
1 min read