01Feature launch in a legacy system

A tracker for non-linear repairs

Decisiv · 2025

Demo

Interactive replica built in Storybook with Claude.

Repair status in Decisiv's Case was manually updated, rarely accurate, and buried below the fold, leaving service advisors piecing together updates from notes and audit logs every time a customer called. Accurate status also fed a repair history that travels with the truck across ownership changes, so the stakes extended well beyond any single repair interaction.

As the lead designer working with a PM, researcher, tech lead, and subject matter experts, I explored three tracker directions, defined a five-stage model by narrowing 25 existing statuses with a researcher and stakeholder group, designed the tracker from wireframes through high-fidelity UI, and shipped the status tag and a cleaned-up case header alongside it.

The step tracker had been on everyone's wish list for years: what had kept it from shipping was the constraint I found most interesting, mapping a clean visual model to existing repair data without touching the underlying status logic.

Some details in this case study have been omitted to protect confidential information under an NDA. The scope and impact of the work are accurately represented.

Impact at a Glance

25→5

25 statuses consolidated into 5 comprehensible stages

76%

Of statuses mapped cleanly to one of the five stages

Usage ↗

In the first month:
+6.2% Diagnosing
+2.7% Approved
+2.6% Working

Tag Component

Status tag adopted across the product before the tracker shipped

The Case Timeline feature Carla designed was a first for the North American heavy truck service industry. It positioned Decisiv as the source of truth for repair status between trucking fleets and their service providers.

Pete Russo Head of Product, Decisiv

Discovery

I needed to understand how repairs actually progressed and how advisors were using the status system in practice.

Real repair workflows are messy

Subject matter expert interviews, journey mapping, and prior research confirmed that repairs are non-linear. A truck might skip diagnosis entirely. A technician might get approval, start work, discover additional problems, and need a second approval before continuing. All repair statuses stay available at all times, with no dependencies between them. Any tracker had to handle that without breaking.

A System Too Entrenched to Change

Pendo analytics and internal usage reports confirmed that most of the 25 statuses were rarely used, with a small cluster carrying nearly all the traffic. I asked why not retire them. The answer: they’d been added over time at individual clients’ requests, and the migration alone would have been a project in itself. The solution had to work on top of the existing system, not restructure it.

Exploring Directions

The step tracker was always the expected direction: simple, consistent, and familiar. But before committing, I explored two alternatives. The first was a chronological view showing repair status history alongside upcoming events like follow-up time and estimated completion. The second moved progress tracking to the home page, grouping cases by repair stage instead of burying it inside individual case pages.

The timeline was too complex. The kanban view was compelling, but it meant significant development work and a fundamental shift in how users navigate the product. The tracker won.

Step tracker concept
Step Tracker concept (selected)
Status timeline concept
Status Timeline concept
Kanban view concept
Kanban View concept

From 25 Statuses to 5 Stages

The tracker depended on repairs sharing a common enough lifecycle to be shown as fixed steps. The 25 statuses were too granular for that, but each one could map to a stage, advancing the tracker automatically with no new behavior required from service advisors.

Card Sort

We ran an internal card sort with five people who had deep operational knowledge across different dealers. All arrived at seven categories or fewer, with strong agreement on the core stages. The main disagreement was around parts-related statuses. Some statuses couldn’t be placed in any category at all.

Five Stages, 76% Coverage

I combined card sort results with usage data, then led brainstorming sessions, first with the design team and then with the PM, landing on five stages. We explored several naming systems before settling on Arrival, Diagnosis, Approval, Repair, and Ready. 76% of repair statuses mapped cleanly to one of them. The remaining 24% were treated as flexible: pauses, holds, and transitions that update the case record without advancing the tracker.

We validated the stages externally with an unmoderated card sort in Maze. 136 participants agreed with the groupings. The only exception was Hold (Parts), where opinions split depending on location processes.

Arrival
Appointment
Check-In
›
Diagnosis
Diagnosing
Triage
›
Approval
Approved
Hold (Auth)
Declined
›
Repair
Body Shop
Road Repair
Road Test
Sublet
Tech Support
Working
Hold (Parts)
Parts BO
Parts (Ordered)
›
Ready
Complete (Gone)
Complete (Here)
Invoice
Drop-Off
Pick Up
Hold (Vehicle)
Waiting
Yard (Waiting)
None
Success Progressing On-hold Declined None
All 25 statuses mapped to five stages. Color reflects Decisiv's existing status classification.

Defining the Tracker Structure

Equal or Proportional Spacing?

I evaluated two spacing approaches: equal weight per step, or proportional to average stage duration. Equal spacing held up better, since proportional widths varied too dramatically across different repair scenarios.

Evenly distributed steps, each step spaced equally across the tracker Steps sized proportionally to time in status; Arrival occupies most of the line
Equal spacing (selected) vs. proportional to duration of each step

Skipped Stages

If a stage has no statuses applied to it, it appears dashed, signaling it was skipped.

Skipped step shown with dashed styling
Skipped stage: no statuses linked to Diagnosis were applied

Revert or Repeat Stages?

When a status from an earlier stage is applied, the tracker could revert to that step (collapsing what came after) or repeat it (appending the stage again). Reverting was simpler but would hide what actually happened. Subject matter experts advised repeating it, so I accepted an unpredictable number of steps to preserve the real repair history.

Tracker reverted to an earlier stage, collapsing subsequent stages Repeated stage appearing later in the tracker sequence
Revert to the earlier stage vs. repeat the stage and all subsequent stages (selected)

How Much Detail to Surface?

I explored three levels of detail: a lightweight status tag beneath the active step, an inline expansion per step showing status history and timestamps, and a View Details modal with the full repair history. The team agreed on the modal so advisors could read the full story of a case without navigating away.

Status tag shown below the active stage, lightweight, no interaction required
Option A: Repair Status tag below the active stage
Inline expansion showing full repair status history with timestamps and time-in-status data
Option B: Inline expansion, status history per stage
Tracker with View Details entry point
Modal showing full repair status history
Option C: Trigger to View Details near the tracker, opening a modal with full status history (selected)

Where Should the Tracker Live?

The tracker had to be above the fold, which pointed to the case header. I started below the quick action buttons to keep the layout intact. But the buttons trigger status changes that advance the tracker, so placing it above them made more sense: advisors could see where the repair stood before acting. I also considered the Status Info panel, but panels expand progressively and the tracker would likely have ended up below the fold.

Tracker placed in the case header above the quick action buttons
Option A: Above the quick action buttons (selected)
Tracker inside the Status Info panel further down the page
Option B: Tracker inside the Status Info panel

The Design

I explored several visual directions (dots, stage icons, background bands) and landed on the simplest treatment. The tracker was going into a crowded header; anything heavier would compete with what was already there.

Repair statuses already had a color classification (blue for informational, yellow for on-hold, green for approved or finished, red for declined). I carried that directly into the step bubble.

Status colors carried into the tracker: blue for in-progress, orange for on-hold, red for declined, green for complete.

Restructuring the Case Header

Making room for the tracker meant reducing visual weight across the header. The quick action buttons lost their icons, section links dropped their radio circles and uppercase treatment, and seven jump links collapsed into a single menu.

I tried a few ways to create separation in an already busy header, but kept the change as small as possible: giving the quick actions a background of their own was the cheapest way to group them without touching much else. Banding them together reads as one set of controls and separates them from the case details and the tracker above. Every control stayed available, but with less competing for attention, the tracker reads first.

The Decisiv case header before the redesign
Before: Nothing in the header said where the repair stood.
The Decisiv case header after the redesign, with the tracker between the case details and the quick action buttons
After: Tracker between case details and quick actions.

Restructuring the header put the quick action buttons next to the statuses they set, and the mismatch between them became impossible to ignore.

Surfacing a Naming Problem

There were four quick action buttons: Check-In, Request Approval, Asset Ready, and Asset in Service. Each triggered a specific repair status on submission, but the button names and the statuses they set didn’t always match, making the connection harder to follow.

Aligning the labels was the obvious fix, but renaming statuses or buttons was a platform-level change that deserved its own process. I left the existing names in place for the usability study and started making the case separately.

The Status History Modal

The modal was built using the KeyDS, Decisiv’s shared component library. That meant the UI came together quickly and stayed consistent with the rest of the product.

Modal showing the full status history for a stage
View Details modal, full status history for the case

Validating the Design

I collaborated with a researcher and built clickable prototypes in Figma to test the design. We ran moderated interviews with five service advisors and a foreman across four dealer locations.

Participants identified the tracker quickly, understood its purpose, and followed skipped and repeated stages without trouble. They were confused about which color indicated an active stage, overlooked the View Details button and found the modal information unclear. Participants who didn’t typically update repair statuses couldn’t tell what was controlling the tracker.

We decided to retire the View Details button and modal. I addressed both the color confusion and the question of what was powering the tracker by adding a repair status tag directly on the active stage.

"If you needed to quickly answer a question to a supervisor or to a customer, you can say, you know, we got the approval, we're actively working on it right now."

Service advisor, usability study participant

Renaming the Statuses

After the study, I used the opportunity to also tackle the naming problem identified earlier.

I proposed the following name changes: Hold (Auth) became Pending Approval, Complete (Here) became Asset Ready, and the Asset in Service button and the Complete (Gone) status took a single new name: Checked-Out.

I collaborated with a researcher on a second study and built clickable prototypes in Figma to test the new names. We ran an unmoderated study with service providers and received 84 responses. The term “Checked-Out” was ambiguous, and users interpreted it differently. But one participant suggested Released to Customer, and we adopted Asset Released.

I worked with the PM to launch the platform copy updates before the tracker so users absorbed this round of changes first.

Designing a Reusable Repair Status Tag and Panel

The color confusion and hidden logic uncovered in testing shaped this next step. I designed a reusable repair status tag to work anywhere the case needed to surface its status, not just on the active stage.

The Tag Design

I designed a compact tag to fit within the tracker without competing with the surrounding header. Each tag uses the colors and icons previously established by Decisiv for the repair status. Fleet users get a read-only version; service providers get an interactive version with a caret, and can tap it to open the status update panel.

Arrival
Diagnosis
Approval
Repair
Ready
Other: can be applied at any stage

Updated status tags grouped by stage, using Decisiv's existing color and icon classification.

The Status Panel

The new panel was built with the KeyDS and groups statuses by stage, each option paired with its visual tag.

We tested the reordered list in the same unmoderated study that tested the name changes. Participants found what they needed, and no one left a negative comment about the new order.

The final panel also gained typeahead search for users who knew what they wanted but didn’t want to scroll through the list. We also wired up the statuses associated with quick actions, marked with ···, to open the same form as the button rather than applying immediately. It adds a step, but it’s a deliberate tradeoff to enforce best practices.

Status panel: statuses grouped by stage, each paired with its visual tag.

The Status Tag and Panel Launched

The tag launched ahead of the tracker as a reusable component across the product. The all-cases table, the Status Info panel, and the quick action modals were all updated to display it first, so users were already familiar with the visual language before the tracker shipped.

Before

All-cases page before the status tag

After

All-cases page after the introduction of the status tag
All-cases page, before and after the introduction of the tag.

Before

Status Info panel before the status tag

After

Status Info panel after the introduction of the status tag
Status Info panel, before and after the introduction of the tag.

Tracker: Final Design

With the tag designed and validated, the only thing left was integrating it into the tracker. I tested displaying it above and below the active stage, and decided on above to reduce conflicts with existing content in the header. I also made the tracker’s state easier to read at a glance by turning past stages green with a checkmark inside the bubble. Here’s how the read-only tracker looked:

Happy path

Pending Approval (yellow) and Declined (red) at the Approval stage

Skipped stage

Repeated steps, the tracker appends rather than rewinds

In context, integrated into the case header:

The shipped case header with the status tag above the active stage and a checkmark on completed steps
Case header with the final tracker design.

Impact

The tracker launched in June 2025 for both service providers and fleets. First-month data showed the right indicators moving: Diagnosing up 6.2%, Approved up 2.7%, Working up 2.6%. Complete (Gone) was the only status that dropped (down 2.2%), likely because users were still adjusting to its new name, Asset Released. NPS trended upward in the same period.

The tracker wasn’t the only thing that shipped. Copy changes across the platform, a renamed status vocabulary, and a reusable status tag all landed before the tracker itself. We rolled them out first so users had time to adjust before the next change arrived. By the time the tracker shipped, it landed on visual language they’d already seen.

Looking back

While I’m proud of the level of simplification we achieved, I wish I’d spent more time on the 24% of statuses we couldn’t map to a stage. Most had been added over time at individual client requests, which means at least some of them represented real workflows for a small group of users we never talked to. A short round of interviews with those users might have revealed where those statuses actually fit, and potentially changed how we thought about what belonged in the “other” bucket.

Other Case Studies