CASE 02 · REZYSAVE

Owning an IoT product, from 20M unclean rows to nine kinds of reader.

The executives came with a high-level styling request. Underneath it sat 20M+ rows across 120+ columns, unorganized and unstandardized, and nine kinds of reader who each needed a different answer out of it.

(TL;DR)

SITUATION
A high-level styling request from the executives, and 20M+ rows across 120+ columns underneath it, unorganized and unstandardized, with nine kinds of reader to answer.
WHAT I DID
Client-side product owner to a 20+ person offshore team: I standardized the data, built the device naming, inventory and install system, and wrote the direction the build was made against.
RESULT
A working dashboard all nine can read, and 1,265 connected devices findable by their code alone across 11 properties and 229 buildings, counted 2026-08-27.

(THE ROLE)

I owned the product from the client side of a 13-hour time difference.

I arrived on a two-month contract with 20M rows and 120 columns to analyse, and inside two months I owned the product for a 20+ person offshore team. I did not design the dashboards. I called the delivery team at five and six in the morning, worked through each page with their design manager, and told them what the system had to know. The job was to hold what nine kinds of reader each needed out of it, and to say so before it got built.

DECISIONStayed the client-side owner rather than the drafting hand, so every screen answered a named reader instead of a preference.

(THE NINE READERS)

  • PROPERTY MANAGERS
  • ADMINS
  • INSTALLERS
  • TENANTS
  • REGIONAL PROPERTY MANAGERS
  • OWNERS
  • INSURANCE
  • INVENTORY MANAGERS
  • INSTALL MANAGERS

(THE FLAW NOBODY ELSE CAUGHT)

Anyone could sign up with any role they wanted. The whole team missed it.

The approved Figma mockups never had a ‘pick a role’ step. Design and dev built the sign-up flow with one anyway: one link to every email, and anyone could claim any role, unchecked, straight up to regional manager. Nobody checked the build against the mockups; I caught it because my job spans design, development, and the client’s business, not just one of them. I drew the flow that closed the gap, sign-up links already resolved to a tenant and unit before they go out, to show the team what to build instead. No role to pick, nothing to approve.

DECISIONHeld QA alongside product ownership, and checked the build against the approved mockups rather than against itself.

The mockups never had ‘pick a role’; the built flow did. I caught the gap and drew the fix.

(THE NAMING, INVENTORY AND INSTALL SYSTEM)

Building an enterprise naming, inventory, and install system.

Every device carries a code that says exactly where it belongs, down to the property, the building, and the unit. The code does three jobs at once: it tracks what exists, it maps each device to its place, and it plans the install in advance, so a crew arrives already knowing what goes where instead of scanning anything in the field.

DECISIONDesigned the naming scheme before the fleet outgrew anyone’s ability to track it by hand.

1,265 CONNECTED DEVICES ACROSS 11 PROPERTIES AND 229 BUILDINGS, COUNTED 2026-08-27

A grammar is only worth what it joins to. Every property, building, unit and device sits in one master table, and every install and every report resolves against it rather than against somebody’s copy.

The property device install flow redrawn: CRM entry, rent roll, project plan and installer account, then device assigned, installer login, location, QR scan, install, and a device counted only once its data has sent
The inventory to property flow redrawn: two paths, one assigning a device by QR at install and one with its location set in advance

SCROLL THE DIAGRAM SIDEWAYS TO READ IT →

Planning it in advance is only real at the point where an installer opens the app: the unit and the code are already decided before the phone comes out of the pocket. And a device is not counted as installed until its data has actually sent, which is on the flow above because it is the part everybody wants to skip.

The mobile Add Device screen: install instructions for a fire, temp and humidity sensor, then its serial number, device location, a photo upload and the unit number
THE MOBILE ADD-DEVICE FLOW · SHIPPED PRODUCT · DESIGN BY THE CLIENT-SIDE DESIGN TEAM · DATA AS CAPTURED

(20M ROWS INTO A WORKING DASHBOARD)

20M rows of unclean data into a working product.

Getting from the one to the other meant sitting with the real schema and standardizing it first: 120+ columns, no standard between them, and one measurement arriving in five different formats. What shipped is a working dashboard all nine kinds of reader can read, each of them getting a different answer out of the same devices.

DECISIONSat with the real 20M-row schema and standardized it before validating a single screen.

The RezySave dashboard overview: a fire-department alert banner across the top, an alert trend chart, and alerts by stage
THE OVERVIEW · SHIPPED PRODUCT · DESIGN BY THE CLIENT-SIDE DESIGN TEAM · DATA AS CAPTURED
The system view: every device type reporting how many units are online, offline and low on battery, beside the alerts and insights feed
THE SYSTEM VIEW · EVERY DEVICE TYPE, ONLINE, OFFLINE OR LOW BATTERY · SHIPPED PRODUCT · DESIGN BY THE CLIENT-SIDE DESIGN TEAM · DATA AS CAPTURED

A property manager opening the water view is not asking what the portfolio looks like. They are asking whether a leak is running and what it is costing, off the same device stream that fills every other screen. That is the whole point of standardizing it first: nine readers, one stream, nine different answers.

The water utility view: estimated against current usage by day, a gallons and cost table, and the active leak and freeze alerts beside it
THE WATER VIEW · SHIPPED PRODUCT · DESIGN BY THE CLIENT-SIDE DESIGN TEAM · DATA AS CAPTURED

(DIRECTING THE BUILD)

The direction went on the working documents themselves.

Rather than hand over a picture and hope, I annotated the property manager view panel by panel: the renames, the gauge bands, and what each section had to tell its reader. Behind it sat the rest of the direction: the data dictionary every sensor mapped into, the payload each alert had to carry, the mold and water rules, and the master table the whole system joined against.

DECISIONWrote the direction on the working documents themselves, so the team read each requirement next to the thing it applied to.

THE PROPERTY MANAGER VIEW, MARKED UP IN MY OWN DIRECTION NOTES TO THE TEAM · ITS BODY COPY IS PLACEHOLDER TEXT

(WHO MADE WHAT)

Product management mine; the screens were designed by the client-side design team.