Skip to content
← All work

Case study · Syndio

PayEQ

The field of pay equity has previously been dominated by legal consultants because of its focus on compliance. When Syndio was founded in 2017, it was the first to productize the offering, transforming weeks of meetings and endless PDF reports into a visual analysis delivered directly to customers. In 2024, we started our much-needed redesign of our most-used feature.

Role
Frontend Engineer · UX
Timeframe
2024 — 2025
Team
Design, PM, 2 engineers
Stack
React, TypeScript, Figma

The problem

Syndio's flagship product PayEQ pairs software with a team of experts who walk customers through pay equity analysis. It launched five years ago, and most of the product has been updated since. One page had quietly fallen behind though: the group detail page. This is where employees are organized into groups that do substantially similar work, which forms the basis for any pay comparison.

The deeper problem was a posture shift: the service was carrying more weight than the software, and the group detail page (one of the most-used pages in the analysis flow) was difficult for customers to navigate themselves. The opportunity was to make the UI intuitive enough that customers could lead with the software. That would be better for them, and better for our software-as-a-service model.

Research and Design

About 3 months

I'm an engineer, not a statistician. But learning just enough of a domain to know what actually matters to the people using your software is the part of UX engineering I like best.

Even without deep statistical domain expertise, the inefficiency of the page jumped out the first time I sat with it. The customer feedback we'd been collecting confirmed it: the things people actually needed (the impacted side of the comparison, the p-value) were hard to find, while a lot of what was on screen wasn't load-bearing.

The designer and I went through the existing feedback together and prioritized a list of changes to jumpstart the redesign.

Annotated screenshot of the current PayEQ group detail page (titled 'Current SSG detail') with five star-marked callouts: Control Panel, Average Gap, Comp vs. Predicted Chart, Help Materials, Messages, and Employee List. Each callout contains hand-written feedback notes about usability issues.
A screenshot of the current group detail page with annotated callouts.

Design iterations

This is the 1st project where I jumped into making and editing Figma sheets! The designer drove Figma exploration and I drove technical considerations on the UX alongside feedback.

Four design iterations of the group detail summary card. Each card explores a different layout for showing a statistically significant pay gap with controlled and uncontrolled comparison: one with a distribution chart and bullet list of metrics, one with a table-style breakdown of employee demographics and applied controls, one with a no-significant-gap variant in green plus mean and median figures, and one with two compensation values for men and women alongside a written summary of the gap.
A selection of design iterations for the group detail card, exploring different ways to surface the gap, the impacted side, and the underlying data.

The redesign converged on three structural moves: a stats bar pinned to the top, an info card that led with the comparison status (red / yellow / green) and surfaced the p-value plus the adjusted and unadjusted gaps, and a controls panel that showed only applied controls inline (editing moved into a dedicated menu).

The info card carried the most narrative weight. The comparison status is the symbol that drives whether a remediation budget gets allocated. Sometimes it's the symbol behind a litigation case. We worked through several Figma directions; I flagged where high-fidelity treatments would balloon the render cost on dense tables, and we converged on a treatment that gave the status the visual hierarchy it needed without breaking performance.

The controls panel was the cleanup pass. Editing-in-place sounds simple, but with five active controls it cluttered the page. Pulling editing into a dedicated menu let us treat the controls panel as a read-mostly summary, which matched how customers actually used it.

Final design of the group detail page components. At the top, a stats bar shows comparison tabs (Gender, White vs. Asian, etc.) and population stats (Total, Included, Men, Women, Omitted, Impacted side, Budget). Below, an informational card displays the statistically significant gap status, p-value, standard deviation, and a summary of the gap with adjusted/unadjusted comparisons and average comp values. At the bottom, a controls panel lists applied controls as chips (Education, Geo zone, Manages people, Performance, Years of experience) with an option to edit and a link to explore pay policy analytics.

The page renders in more states than the happy path suggests: different pay-equity statuses, pre- and post-budget views, error states, and settings-change cascades. The designer and I worked through these together. She sketched the variants, I traced what each one meant in the component tree, and we iterated until every branch in code had a corresponding design. Our PM then referenced the final package to write the epics.

The process was transparent throughout. Design, product squad, and the internal stakeholders were in the room at every step. That kept buy-in high and pulled us toward a final design everyone could stand behind. One of our domain experts said, "I didn't even know I needed this until I saw it."

Side-by-side comparison of the group detail page before and after the redesign. The before view shows the legacy layout with a small donut chart, scattered numbers, a dense list of applied controls, and a long employee table dominating the page. The after view shows the redesigned layout with a stats bar at the top, a clear comparison-status info card with adjusted and unadjusted gap figures, an applied-controls panel, the actual vs. predicted compensation scatter plot, and a streamlined employee list.
Five variants of the group detail info card showing different comparison statuses: a red statistically significant gap, a yellow card approaching significance, a green no-significant-gap state, a small-group state suggesting cohort review, and an N/A state where no comparison is possible. Each variant adapts the icon, color, p-value treatment, and supporting copy to the underlying analysis result.

Implementation

About 4 months

I was the only front-end engineer assigned to this redesign. The clear ownership and my interest in design + product resulted in a short loop between design changes and shipped code.

Building the UI Components

I leveraged React 19 + TypeScript to build the components. Bundling was done through webpack. State was handled through Redux and RTK Query. Routing done through React Router v5. Testing done through Jest + React Testing Library. Playwright for E2E testing. Styling done through SCSS.

I built the major new pieces (stats bar, controls menu, tooltips) as keyboard-accessible, design-system-ready components so they could be reused on future projects. This was a major point of emphasis. As a growing midsize startup, building reusable components is key.

Corner case: Small groups

The problem. Syndio has a concept called small groups. Groups where the headcount is too small for the statistical model to land with confidence. The triggering conditions are deceptively dense: a group can be "small" if it has fewer than 30 employees total, or if one side of the comparison has fewer than 10 (5, on some configurations), or if applied controls push the column count above the row count. The legacy UI told customers when a group was small but couldn't communicate which kind, and internally not everyone on the team could keep all the triggering conditions straight.

The solution. The designer mapped every small-group scenario into a matrix chart. She and the QA tester refined it (twice), then she designed a UI variant for each cell. I leaned on the matrix heavily on the engineering side. Every cell needed a clean branch in code, with the right copy and the right downstream behavior (some small groups are budgetable, others aren't; some surface a status, others don't).

Matrix chart mapping small group scenarios. Rows are the headcount of one side of the comparison (y ≥ 10, then y < 10 / y = any). Columns are the total headcount (x < 30 vs. x ≥ 30) further split by whether the number of employee rows exceeds the number of control columns. Within each cell, no-control and at-least-one-control cases are called out as hybrid (status, not budgetable, small group UI), regular group (status, budgetable), or small group (no status, not budgetable). The bottom row collapses to a single small-group cell regardless of x.
Small group scenario diagram. X represents the total headcount of the comparison. Y represents the headcount of one side of the comparison.
Phase 2 small-group typical scenario. On the left, the group detail page renders for QRS Division: a stats bar with comparison tabs (Gender, White vs. Asian, White vs. Black, White vs. Native American, White vs. LatinX), an info card showing a small-group state suggesting cohort review with median test and t-test p-values, adjusted and unadjusted gap figures, average comp by group, a controls panel listing applied controls, and an employee list with comp columns. On the right, the small-group matrix from the previous figure with a star highlighting the specific cell this scenario maps to.
Example of UI that would display based on a specific small group scenario.

Outcome

40%
Reduction in support tickets
Group detail page tickets after launch.
90%
Self-service usage uplift
Customers completing the analysis without consulting touch.
20%
A11y coverage
WCAG-AA primitive components shipped from this project.

Reflection

Zoomed-out view of the project Figma file, showing many small sections of individual wireframes and design explorations laid out across the canvas, different phases of the group detail page, the info card, the small-group example, and supporting flows.

I've shipped a lot of UI revamps. This one stood out: the process was transparent from research through release, and we got to see it land in the hands of customers who had been asking for it for years. A few things I'll carry forward: