← Build log
2026-10-10

The Hardest Part of Industrial Software Is Being Lie-able

The Hardest Part of Industrial Software Is Being Lie-able

A dashboard that always looks fine is a nicer dashboard. It is also a dashboard that will eventually be wrong at the exact moment you needed it to be right.

The temptation

The failure modes are all in the same direction. A light stops responding — show the last known level, it looks less alarming. The broker is unreachable — show a cached snapshot, the page still renders. A command times out — keep the optimistic state, the button stays lit.

Each of these is a small, reasonable, individually defensible decision. Together they build an interface that is systematically more confident than the underlying system.

Where the lying shows up

  • Freshness. Every reading needs a timestamp and a notion of “how old is too old”. A value from ninety seconds ago displayed next to a live one, with no distinction, is a lie by omission. Stale data gets marked stale.
  • Health isn’t connectivity. The controller being connected to the broker says nothing about whether the lights are there. Two different facts, two different indicators.
  • Gaps are real. When the office link drops, the historian leaves a genuine hole. It doesn’t fill it in. A fabricated continuous line looks better than the truth and tells you nothing.
  • Partial success is partial. A broadcast that hit four of five zones is not a success and not a failure. It needs its own state.

The rules I ended up with

Mark, don’t hide. Stale, offline, unverified, partially applied — each gets its own visible state. Dashed instead of solid. A different colour instead of the same green.

Never fabricate a reading. If the number isn’t there, the interface shows that the number isn’t there.

Verify against the thing that matters. A command is only confirmed once the state comes back and matches what was asked for. Accepted is not the same as done.

Absent is a real value. A light that never responded is not “level unknown, probably fine”. It’s a light that never responded.

Why this matters more than it sounds

The cost of a wrong dashboard isn’t embarrassment. It’s a technician standing in front of a dead fixture trusting a screen that says it’s fine, and burning an afternoon on the wrong thing.

The interface and the physical world have to agree. Everything else on this list is in service of that one agreement.

The uncomfortable part

Being honest is easier to build than to look at. A page full of dashed chips and stale badges looks less impressive than a page of solid green. Every one of those honest states is a failure I’m choosing to display rather than a failure I’m choosing to hide.

The polished version of this interface was the version that lied.