The Machine Monitoring grid: six machines in Milling A, each card showing its status, active operation and operator, quantity made against quantity required, and OEE beside cycle time

Machine Monitoring

The first tool built on ProShop's AI-native platform.

Role
Design Lead, sole designer
Timeline
5 weeks, PRD to development
Team
Zach Clarke (PM), Paul Beavers (CTO & lead engineer)
Status
Early Access · GA September

Launched at Lightning Strike, June 24.

Overview

I wasn't assigned to this project. I saw it hit the roadmap, recognized it as the module that would set the design bar for everything built on the new platform, and asked the PM and VP of Product to let me lead it. That's why I was in the room at PRD stage — and why the decisions below were mine to make.

In five weeks I taught myself an industry I'd never designed for, made three decisions the module still runs on, and escalated a cross-module gap that is now listed in our competitive analysis as a capability no standalone competitor can match.

Impact
Delivery 5 weeks PRD to development, three people
Competitive gap ProShop‑only One of five capabilities no standalone tool can match
Revenue New line Created a paid add-on where none existed

Why shops were buying a second system

An ERP knows what work should be happening. A monitoring system knows what is happening. Almost no ERP does both — so a shop buys two systems, then pays a third time to connect them.

How a shop sees its floor today
🧑‍🏭

“Is 04 still cutting?”

Walk and ask

stale the moment you leave
🧑‍🏭

“I’ll know at end of shift.”

Hand-logged OEE

true after it matters
🧑‍🏭

“Two logins. Two bills.”

A second system

one more tool to run
Why not just buy a monitoring tool?
Buy one
ProShop ERP
Monitoring tool

wired in from outside

$100–150

per machine, per month

a bill per machine

😵‍💫

still sends everything

Build it in

ProShop

what should runwhat is running

  • one system, one bill
  • no integration to buy
  • only what earns space
  • status tied to the work order

That integration cost is the whole argument.

Several early-access candidates were days from signing with competing vendors. One — Hill Manufacturing — paused a MachineMetrics evaluation because they wanted monitoring inside ProShop, not in a second vendor's interface. I designed against that sentence more than any persona document. They weren't asking for a better dashboard. They were asking not to leave ProShop.

Machine Monitoring didn't exist in ProShop, so every convention had to be decided rather than inherited. Our PM's POC answered what and why credibly, but not how best — and with one developer and five weeks, getting that wrong meant a bad foundation under everything the platform builds next.

If a data point doesn't change a decision, it doesn't earn space.
Not my taste — the market's complaint about the incumbents. Shops evaluating Datanomix and Excellerant told our 2024 Customer Advisory Board the problem was too much data: several said outright they didn't know what to do with what they already had. Recorded two years before I designed anything, which is why I could argue for cutting things in week one.
How might we turn a raw telemetry feed into something a shop supervisor can act on in the ten seconds they'll give it — and make it worth abandoning a tool they already pay for?

Three problems, three decisions

  1. 01 Monitoring and alerting are two different jobs One flat grid was trying to serve a desk and a wall at once
  2. 02 Opening one machine without losing sight of the rest A detail view that destroys the comparison you opened it for
  3. 03 Proving the machine is running the right job The controller knows a program name, not a work order

How three people shipped in five weeks

The second mandate on this project wasn't a feature: work out how a team collaborates using AI agents, and keep the method.

W1 W2 W3 W4 W5 Design Scope · market research · IA Prototypes Validate as built PM Scope Attribute-to-field mapping Validate as built Dev Backend and investigation Front-end shell Gate SME walkthrough All three Onsite customer testing

It wasn't a relay. Dev started backend work in week 2 while the design was still forming, which only worked because weekly syncs meant Paul was building toward a picture he'd already seen. Validation ran alongside implementation rather than after it, and the SME walkthrough at the end of week 4 was the one real gate in the whole schedule.

What AI did, and what it didn't

I used AI to break the PRD into its constituent decisions, run competitive research, and synthesize two years of Customer Advisory Board notes and product specs into the handful of findings that bore on a design decision. But the IA and workflow were mine, in Figma, first. The prototype's job was to test concepts I'd already formed — generating first and rationalizing after is how you end up defending an output you didn't choose.

Decision 01

Monitoring and alerting are two different jobs

The POC had one flat grid, and I first read this as a sizing problem: the same view needs to work at a desk and across a shop. That's the shallow version. The real difference is job.

An ops manager asks "is the floor running well, and what do the numbers say?" Someone walking past a wall display asks "is anything wrong right now?" — and will never drill into anything, because they're on their way somewhere. One view serving both fails both.

Grid
Standard Grid: machines grouped by department, each card showing the active work order and operation, the operator, quantity made against required, OEE and cycle time
  • WhoAdmins, ops managers, owners
  • JobMonitor performance, read the metrics
  • BehaviorEntry point to drill-down
  • ContentStatus, OEE, active WO, cycle progress, grouping, filter and search
Floor Status
Floor Status: large color-coded tiles sorted alarms first, each showing machine name, status, OEE and cycle percentage at wall-display scale
  • WhoAnyone on the shop floor
  • JobCatch what's wrong, fast
  • BehaviorNo drill-down at all — diagnose, then walk to the machine
  • ContentMachine name, status, active WO/part, OEE. Nothing else

Rejected Scaling the Grid card up for the TV — bigger type on the same layout still forces the eye to hunt for status among five other numbers. Legibility at distance is an editing problem, not a font-size problem.

What the shop floor taught me about the wall

I'd drafted Floor Status as a subtraction exercise: fewer things, bigger. Then I got onsite at CNC Swiss — 34 machines, three shifts, a lights-out run from midnight to 6am — and watched people read the floor.

They register the one in the back corner is red and turn around. Their machines were labeled A1, A2, B1, B2, and every one had its own indicator light. The floor was already running a spatial status signal that required no literacy at all.

The wall display above a plan of the floor: machines labeled A1 to B3, each with its own indicator light, and the one red light in the back corner traced up to the red tile on the board

So Floor Status ships with card customization and a re-arrange mode — a shop orders the tiles so the board mirrors its actual layout. The display stops being a list and becomes a map, which is what turned that view from a smaller dashboard into a spatial one.

The Customize view panel: toggles for the OEE ring, utilization, cycle percentage, trend sparkline and progress bar, a layout density control, and a button to arrange tiles on the board
Card customization — a shop turns off what it doesn't read, so the tile carries only what earns space.
Floor Status arrange mode: a banner reads drag cards to set your floor order, every tile has a drag handle, and one card is mid-drag with a drop indicator
Re-arrange mode — tiles dragged so the board mirrors the shop's actual layout.

Where I pushed back on the PM

Zach wanted override signals — feed, spindle and rapid adjustments made at the control — on every card by default. No competitor surfaces them, and my objection was to the default, not the data.

An aerospace shop running tight tolerances wants to know the moment someone dials feed back; for another shop it's four more things between the eye and the status. Where a data point's value varies by shop, it belongs in preferences, not defaults.

Machine cards each carrying a third row of override chips — rapid, spindle and feed — with the overridden values highlighted in red
Override signals on every card — a third row of chips, and four more things between the eye and the status.

The trade-off I lost, and agreed to

I prototyped a full interactive Floor Map — machines on a dot-grid canvas with draggable department zones.

It didn't make V1, and I agreed with the cut. Spatial positioning is expensive and closes no competitive gap; downtime root-cause coding — which all four competitors have — didn't make it either. It still paid off: the machine model stopped caring where a machine sits, which is what let Floor Status carry re-arrangement.

The cut Floor Map prototype: machines on a dot-grid canvas inside draggable department zones for Mill A, Turn B and Grind C, in a separate arrange mode with a Done control
The Floor Map prototype, cut from V1 — department zones dragged on a dot-grid canvas.
Decision 02

Opening one machine without losing sight of the rest

The question that made a supervisor click was comparative — VMC-03 is at 48%, how are the others doing? A detail view that answers it by destroying that comparison is worse than none.

Where the detail opens

Three options
Three wireframes side by side. Full page, marked rejected: one machine filling the window with a back arrow leaving the grid, captioned trip back to compare. Modal overlay, marked rejected: a panel centred over a greyed-out grid, captioned grid behind a backdrop. Panel that shifts the grid, marked chosen: a selected card with the panel opening beside a grid that stays light and legible, captioned grid stays readable.

Every comparison turns into a navigation — and comparing is the reason they opened the machine at all.

More room and total focus, paid for by dimming the one thing that made them click.

The grid moves instead of disappearing — one machine in detail, the others still in view.

I argued the panel from the user's question rather than from aesthetics, which is why it stuck.

How the panel is organized

One machine holds more than a panel can — five MTConnect domains plus work order data the machine doesn't know about. Rather than one long scroll, four tabs, each answering one question, ordered to how attention moves across a shift.

  1. The KPIs tab of the machine panel: current OEE with its availability, performance and quality parts, utilization and cycle time
    TAB 01KPIs

    How is this machine performing right now?

  2. The Utilization tab: run and idle time plotted across the shift so the current state can be read against the machine's own baseline
    TAB 02Utilization

    Is this normal, or getting worse?

  3. The Alarms tab: the active alarm with its controller code and timestamp above the recent alarm history
    TAB 03Alarms

    What went wrong, and what do I do?

  4. The Active Op tab with Schedule Sync flagging a conflict: part PN-2201-C at OP-20 matched to WO-0349 in amber, with a warning to verify before confirming or enter the correct number, above Confirm match and Wrong WO# actions. Below it Quantity Progress reads 14 of 25 complete against 16 counted, split into 14 validated and 2 awaiting validation.
    TAB 04Active Op

    Is the right job running, and is it on pace?

The two rejected panel layouts: one continuous scrolling panel with the alarm block pushed below a marked fold, and tabs split by data source with a question mark over the MTConnect and ERP labels
  • One continuous scrolling panel — puts alarms below the fold at the exact moment they matter most.
  • Tabs grouped by data source, MTConnect vs. ERP — an honest reflection of our architecture and useless to the user, who doesn't care which system a number came from as long as the screen says so.

When the data isn't there

A monitoring tool spends real time off the happy path. When the collector stops reporting, a machine flags OFFLINE rather than freezing on its last known status — a supervisor trusting a stale green card is worse off than one looking at a gray one, so absence of data is itself a status.

Before any machine reports, the grid shows named machines with blank cards and help text, which makes the empty state a configuration checklist wearing the interface of the finished product.

The grid filtered to offline machines. A banner reads three machines stopped reporting, flagged offline, values cleared, and explains their last known numbers are not shown because they are no longer true. Each card is marked Offline and says it lost contact with MTConnect at a named IP, how long there has been no data, and what it last reported — while the OEE and cycle fields below are blank.
The numbers clear rather than freeze, and the card says what it lost contact with.
The grid before any machine has reported. A banner reads zero of ten machines have reported yet, notes every machine below is configured and named, and says nothing here is broken. Each named card is badged No data yet and says which collector is configured at which address, with Test connection and Setup guide links.
Named slots and help text — the product waiting, not the product broken.
Decision 03

Proving the machine is running the right job

The most consequential thing I did here wasn't a screen.

Showing the active job is a display problem. Proving it's the right job spans two modules: the controller knows a program name, the schedule knows the work order. Get it wrong and every number it feeds is wrong too.

A developer works inside a module, a PM inside a feature. I was walking the whole path. I escalated it in week two as scoping, not a design workaround.

Why Schedule Sync became a state machine, not a prompt

The machine reports program O2233 for part PN-2201-C and finished parts flow out of it, but a question mark annotated nothing says which one sits between the machine and two candidate work orders for the same part: WO-0343 takes the parts while WO-0351 stays empty. Three arrows lead out of the filled work order to quantities, schedule and costing, all marked in red.
Two open work orders for the same part, and nothing in the machine's data to say which one the parts belong to.

So the match is proposed rather than assumed, and it holds a pending state until someone resolves it: one click to confirm when it's right, and a work order lookup rather than a free text field when it isn't — with the correction recorded.

Two rejected Schedule Sync layouts side by side. Free-form WO editing, marked rejected: the matched work order replaced by an open text field mid-entry, annotated anything saves, above Save and Cancel. A binary yes / no, marked rejected: the matched work order shown as read-only text above Yes and No buttons, with No annotated as a dead end.
  • Free-form WO editing — too error-prone for a field feeding job costing.
  • A binary yes/no — leaves no recovery path.
The Active Op tab of the machine panel, Schedule Sync marked pending validation: part PN-4421-B at OP-10 from machine data matched to WO-0342 from the schedule, with that work order's part name, customer, due date, quantity and scheduled window beneath, above a Confirm match button and a Wrong WO# link.
The proposed match, held pending until someone resolves it — one click confirms.
The same panel after choosing Wrong WO#: an Enter correct WO number field with a placeholder work order, a Fetch WO button and Cancel, and help text explaining that entering the correct number re-links this machine to the schedule.
When it's wrong — a work order lookup, not a free text field.

Labeling where every number came from

Quantity Progress splits one count into three, each labeled with where it came from.

Qty
WO
The target on the work order, and the denominator on the bar.
Machine count
Live
Counted by the machine.
Total complete
Manual
Conforming quantity, from ProShop's NCR records. The gap against Machine count is awaiting validation or rejected.

No machine can verify a part meets spec — only a person can. That is why the conforming count is entered rather than read.

So the panel carries both counts rather than reconciling them into one — 16 counted at the spindle, 14 validated as conforming, 2 still waiting on a person. Total complete is also the only one an operator can edit: where a number comes from decides who is allowed to change it.

The Active Op tab with the work order linked: Quantity Progress reads 14 of 25 pieces complete against 16 counted, with a bar split into 14 validated, 2 awaiting validation and 9 not started. Machine count shows 16 pieces counted, total complete shows 14 conforming with an Edit control, and the machine card behind carries the same split with a note that conforming quantity requires operator validation.

The active operation is now sourced from the schedule's first-in-queue position rather than inferred from the program name — an architectural decision our product overview cites as separating ProShop from standalone tools.

A design escalation in week two became a reason the product wins deals.

Impact

Business

  • A new revenue line — a paid add-on where none existed.
  • 1 of 5 capabilities marked ProShop-only in our own competitive analysis.
  • Five weeks is what made the platform announcement credible rather than aspirational.
  • Closed the biggest competitive gap, against MachineMetrics and JITBase — a retention story as much as an acquisition one.

User

The module is in Early Access and onsite configuration has made rollout slow, so nothing is measured yet. These are the two numbers it will be judged on.

  • Machines connected — the primary target, counted per account.
  • Unprompted opens — whether supervisors open the module at shift start without being asked.
  • Validated so far: the data model, through SME review and one shop visit. Not the flow — nobody has used it across a real shift, on their own machines.

Org

  • The first run of an AI-assisted workflow, end to end — research and synthesis through ideation, prototyping and handoff. Working out that method was a stated mandate, not a by-product.
  • Two things are being reused on other platform work: the dual handoff, and the sequence where the PM builds a POC, design interrogates it, and design escalates what it exposes.
  • A concept you can show in days changes what gets decided. Prototyping being nearly free is why a week-two escalation changed V1 scope rather than becoming a V2 ticket.

Reflection

  1. 01
    Getting into the room early is a design skill

    I could have received this as a brief three weeks later. Nearly every decision here was only mine to make because I asked to lead it before scope was set.

  2. 02
    My most valuable contribution wasn't a screen

    It was noticing that Schedule Sync couldn't work inside one module's boundary, and escalating it in week two. Designing the full journey is what makes those seams visible.

  3. 03
    A finding is worth what the calendar says it's worth

    One afternoon on a shop floor produced three findings of similar quality, and three different outcomes.

    • Arrived in time — reshaped Floor Status, so the wall became spatial rather than a smaller dashboard.
    • Arrived after the build — changed nothing, because it confirmed a decision already made.
    • Arrived too late — couldn't be fixed. Cycle times needed in seconds, not minutes, asked for in week 5, which is why I'd fight for shop-floor access in week 1.

Next case study

Operator View

The shop-floor interface operators work in all day.

Read case study