Problem

Cadmium's previous reporting solutions failed two ways. Custom Word reports were hand-built and already losing real money — $172,783.91 on 299 reports in a single year. The alternative, Cadmium's stock reports, went the other direction: rigid templates with zero formatting variation, inconsistent author blocks, and slow load times.

Solution

I led five months of design on a flexible Word Report Builder — facilitating a workshop that turned a deadlocked sort/grouping debate into one isolated disagreement, running a black hat critique session that surfaced and resolved an invisible insert-flow bug, and usability testing the prototype with five non-technical employees to validate it before build.

Result

By December the design had converged — validated, prototyped, ready to build — and its findings became the evidence behind Cadmium's later pivot to a smaller set of stock reports, with custom work pushed to a paid tier. The build itself stalled on a business decision above the design team's scope, not the design.

Report builder editor with three merge fields — presentation_number, session_datetime, and Author_Block_test — inserted as removable chips via Quick Insert

Quick Insert, live in the report builder — fields land as removable chips in the document

Settings panel with Filtering, Tiered Sorting, Groups, and Page Layout sections

Filtering, tiered sorting, groups, and page layout, all in one settings panel

Edit Author Block modal, showing a template with author_last_name and author_first_name tokens next to a list of available author fields

Author blocks — a reusable, field-driven template instead of hand-typed formatting

Preview mode showing a rendered submitter record with Previous and Next navigation

Preview mode — paginated, record by record, before export

The discovery call

A discovery session with the product specialist who hand-built custom Word reports for clients exposed how rigid Cadmium’s stock templates were, how inconsistent the custom ones had become, and how central sorting and grouping submissions was to a usable report. The PM had already built a first-pass prototype to solve it, but its sorting and grouping didn’t hold up, and two dozen fields and settings all visible and clustered at once made it hard to use besides.

Two competing models

The hardest design question: how do you let someone configure a report like “group these by final decision, with a header above each group, sorted alphabetically inside it” — without exposing the complexity underneath? Two approaches competed to answer it: tiered sorting, which treats a group as just another level of sorting (cheaper, one template), against custom reusable blocks for each group (more flexible, but costlier to build and maintain).

Three sessions in, I said the real problem out loud: “What’s the difference really between groups and sorting?” Nobody could answer it — or the bigger question underneath, which our engineering lead put simply: “We’re trying to build a tool that’s simple enough, yet flexible enough. And those two don’t go together.”

The workshop that broke the deadlock

Instead of a fourth circular conversation, I turned the transcript of the one that went nowhere into a structured workshop — stated goals, named pain points, three options side by side.

It isolated the one variable nobody had named: headers on the second sort tier, which would force engineering to re-derive group boundaries. Once that was the only real disagreement, it got conceded — tiered sorting, custom order, headers at the top tier only, confirmed as substantially less work.

Diagram of Step 1: three workflow options mapped side by side — Option A sorting with optional headers, Option B single group with in-group sort, Option C custom blocks and partials

Step 1 — mapping each option's workflow, sticky note by sticky note, before scoring any of them

Chart comparing Tiered Sorting, Single-Group Sort, and Custom Blocks on learnability, setup speed, error risk, and scalability — tiered sorting leads on most criteria

Step 2 — scoring the three options on learnability, setup speed, error risk, and scalability to isolate the one real disagreement

Building the prototype

I rebuilt the prototype myself in Figma Make, feeding in my own designs rather than prompting from scratch. V2 moved editor and preview into tabs and swapped per-field toggles for an overflow menu once the field count got cluttered.

Validating with real users

Five non-technical employees tested the prototype. It held up structurally, but surfaced two concrete gaps: nobody discovered the toggle for hiding per-field labels, and half the group never found the author-separation setting, typing semicolons by hand instead.

V1 Merge Fields panel listing around two dozen individual fields, each with its own settings gear icon and download icon, all visible at once in a single scrolling list

V1 — two dozen fields, each carrying its own settings and download icon, all visible and clustered in one long list.

Word Report Builder interface with Editor and Preview tabs, a Fields sidebar listing Submission Info, Author Blocks, and Abstract Blocks, and three merge fields inserted into the editor as labeled chips

V2 — fields collapsed into searchable, browsable groups, with settings tucked out of the way until needed.

Stress-testing merge-field insert

With structure settled, the question was how to insert merge fields into a blank report. I ran a black hat session — timed sticky notes, then AI-assisted clustering — to break three options, not just walk through them. Usability testing had already killed two of them outright: both leaned on a hover-then-ellipsis pattern people couldn’t find. A drag-handle option was also rejected, for reading as reorder and hurting accessibility. The group converged on Quick Insert: a hover-revealed split button, refined to swap the chevron for a gear.

Wireframe labeled 'Insert action appear on hover,' showing the Insert button only visible on the hovered field row

The group liked how clean this looked, but felt hiding the Insert action behind hover made it hard to find, and raised real accessibility questions.

Wireframe labeled 'Context Menus displayed on click,' showing an ellipsis icon opening a menu with Show Label and Hide Label options

Rejected outright — user testing showed people didn't discover the ellipsis menu, and there was no accessible, keyboard-based way to do the same thing.

Wireframe labeled 'Secondary Actions,' showing an always-visible Insert button with a dropdown chevron on every field row

Felt busy — too many buttons, "Insert" repeated on every row — but the smaller footprint won out. This became the pattern the group converged on, later refined with a hover reveal and a gear in place of the chevron.

What the critique surfaced

Two constraints that should have surfaced in September came out here instead: the rich text editor treats merge tags as plain text, not atomic blocks — a tag inside another tag could silently break — and there was no accessibility answer for a WYSIWYG insert flow.

I prototyped the embed-based approach myself, confirmed the corruption bug was solvable, and caught and fixed a second bug — embeds forced tags onto their own line, breaking anything meant to sit mid-sentence — before handoff.

Quill.js Playground running the MergeTagBlot implementation in Preview Mode, showing two Contact Name merge tags inserted as removable chip blocks in the editor, with the JavaScript code defining the blot alongside

Quill playground — the merge tag running live as a block embed, removable as a single unit, confirming the corruption bug was structurally solvable

Report builder editor showing three merge fields — presentation_number, session_datetime, and Author_Block_test — inserted as chip blocks in the document body via Quick Insert

Quick Insert, live in the report builder — fields land as removable chip blocks in the document, the same pattern validated in the Quill playground

Outcome

By December, the design had converged — validated, prototyped, ready to build. What never got resolved was the question above the design team’s pay grade: how far Cadmium should go in replacing a human reporting service with software. The project went on hold, and that stall — plus cost data the company already had — became the basis for a later pivot: a smaller set of stock reports, deliberately scoped to be cheap to build, with truly custom work pushed to a paid tier instead.

What I’d do differently

I would push to validate with real users before locking into a specific model. Option A got chosen on dev cost and maintenance alone; the question of whether customers actually needed tiered grouping got asked twice and never answered, which meant we validated an assumption instead of testing one.

Why this mattered

No feature shipped out of this phase. What did was a months-long argument turned into a decision, and a structured critique turned into a business conversation nobody was ready to have in September. The custom sort proposal, the workshop that isolated one variable, the black hat session that carried testing’s evidence into the room instead of re-deriving it, and the fix built from that critique afterward — none of it required more authority than I had, just the right method for the decision in front of it. When the organization couldn’t answer what this process kept surfacing, that evidence became the basis for the strategy shift that followed.