Work 01 2026 Product Designer

Onengine — the playground

The team kept rebuilding the same product because nobody owned the consequence three steps downstream. Now a new idea meets the system it has to live in on day one.

My job was to make the product’s own rules the thing people argued with, instead of each other.

The before, drawn: one work-order status in three spellings at the centre of a loop between engineer, designer, product and founder, and a single line swinging between 15 and 50 statuses across six months.
three labels the round robin 15 → 50 statuses nobody owned this
Before The before, drawn: one work-order status in three spellings at the centre of a loop between engineer, designer, product and founder, and a single line swinging between 15 and 50 statuses across six months.
Role
Product Designer
Year
2026
Kind
Professional
Idea to system
3 weeksday 1

21 days1 day

Both ends measure idea to engineer-buildable spec and exclude development. Three weeks was about a week of writing requirements plus one to two weeks of design assessment, feedback and rework. Day 1 is the current cycle, measured from an ask to a clickable page on an existing template.

01

Another process doc had already failed

The same drift ran through everything the product shared: rates, onboarding steps, payment methods, coverage areas, the fields an entity carried, every list a dropdown drew from. Statuses were the clearest case.

Work orders carried statuses. So did visits, and so did auto-dispatch. Counted together the values swung between roughly fifteen and fifty depending on who you asked. Status documents sat in Confluence. Statuses sat in Figma, and nobody knew how current they were. The backend held values that did not match the screens, and the same status was drawn differently by different designers on different screens.

Asking cost a round robin. The engineer asked a designer, the designer asked product, product remembered a call but not a document, and everyone went back to the founder. He gave a different list each time. Worn down by the repeated questions, he picked the easiest answer, which left work orders unable to complete their own workflow.

Behind all of it sat a process the team had agreed and quietly stopped following, and several PRDs per module, each written at a different iteration.

Which status is this one? The one in the design file, the one in the wiki, or the one in my database?

an engineer
Three places one list of work-order statuses lived: a wiki page with fourteen, a design file with nineteen, a backend enum with nine, the same status spelled three ways.
three sources 14 · 19 · 9 statuses same status, three spellings nobody owned this
The same list, three sources, none of them the owner. Drawn from the team’s account.

02

Wrote down how the product was meant to behave

So I stopped writing process and wrote behaviour. Each module gets one brief with the same eleven sections, covering entities, flows, screens, statuses and what the PRD did not say.

Every line carries one tag for where it came from:

  • stated in the PRD
  • clarified later, by a person with a name and a date
  • inferred, with the reasoning shown
  • covered by a repo convention
  • or an open gap, with a number against it

Pattern knowledge generates questions, not content. "No invented fields, statuses, roles, flows, or copy. Ever."

That is why the brief survives a reversal. An overturned decision arrives as a dated clarified line in the gap register, the brief changes, and the screen is rebuilt from the brief instead of from whoever remembers the last meeting.

Just make it the simplest thing. I don’t want to talk about statuses again.

the founder

Three rows from two briefs’ gap registers: rules the PRDs stated more than one way, surfaced and resolved before a screen was drawn. Names and terms redacted.

03

Built the one place the product gets checked

The playground is that brief running. It is built in layers, from the floor up.

  • Tokens. Colour, type, radii and spacing recorded under the names engineers use, so a value gets consumed, not guessed.
  • Breakpoints. Where you watch a page react instead of arguing about narrow screens.
  • Assets. Card and brand logos and iconography in one place, so nobody redraws one.
  • Fields that carry rules. Phone, email, website, currency, percent, number, ZIP and EIN each hold their own pattern. SSN, routing, account and card numbers behave as sensitive fields wherever they appear.
  • Components. Clickable, slots and props shown, so a card or a table is composed, not described.
  • Product patterns. A details summary, then a work order details summary that other detail pages extend.
  • Tables. The chip, the data cells, the wrapper, filter, sort and search.
  • Page templates. A new module starts from a page that exists.

Underneath it all, one settings screen holds what everything reads from: every option set, the columns of each module's table, and the appearance of every badge and chip, edited by a product person without code.

The Statuses panel: each value's style, colour and leading mark set once, every table re-rendering to match.
The Statuses panel in Playground Settings: style, colour and leading mark set once per value, and every table re-renders to match.
Settings

Edit a value once. Every badge in every table follows.

Fields that carry rules

EIN masks as you type. SSN keeps the same nine digits secret but the last three.

Breakpoints

Four widths, one layout that reflows.

Tokens

Three tiers, and what aliases what: a value, a role, a consumer.

Tables

One column config. The table follows.

Page templates

A new module starts from a page that exists.

04

Gave each role a workflow, not a template

Three written workflows, one per role, each with a hard stop.

  • Product ingests a PRD and ends at the brief. It never composes a screen and never edits app code.
  • Design looks for the brief before anything else and treats it as the spec. An open gap that blocks the screen goes back to the person who can answer it rather than being filled in.
  • Delivery audits the repo, then branches, commits, pushes and opens the pull request for people who do not use git, narrating each step in plain language.

A hook refuses any edit made directly on main. The founder runs the same workflows in his own instance, and his output is the team's source of truth.

There was no latest spec. There was the last conversation.

the PM

The product workflow’s provenance tags and hard rules, as written. Every line of a brief carries one of these tags.

05

Engineers get fields, types, tables and statuses

Every module gets its own brief, and an engineer opens it to find the entity tables. Every field carries its verbatim name, its type and component, whether it is required, its default, its validation rule and error copy, and where a picker's options come from. Statuses are written as a machine, with the allowed values, the transitions the product permits between them, and who triggers each one. The eight work-order statuses now live in one set, and every screen reads them from it.

A page assembled from an existing template is a change, not a build. The founder clicks through his own version the same day.

First feedback used to take four or five days. It takes one or two now, and it is about whether the thing works rather than which pattern it matches.

The invoice entity table from a brief: each field with its type, component and provenance tag, client and people details redacted.
The PRD before the brief: one invoice status field defined four different ways across four sections, names and terms redacted.
Before After
The Option sets screen with the work-order status set open: eight values, each with its label and its stored value, the one place every dropdown and badge on the product draws from.
After

Lines from the team are paraphrased from memory.

Got something half-defined and difficult? Those are the ones I want.

maruti.avantsa@gmail.com