ENTERPRISE PLATFORM

MITRATECH

Distributor Configuration Templates

As Tracker's partner channel grew, every new client onboarding required a distributor admin to rebuild ~50 API arguments from scratch, with no way to save prior work. They called support—every time. I led the UX design of Distributor Packages, which allows for configuration once and onboarding at scale.

MY ROLE

Product Designer

TEAM

PM · Engineering · QA · Services

PLATFORM

Internal Admin Tool

TIMELINE

0 to 1, single phase

FOCUS

Systems Design, Enterprise UX

Before

Open client record

Set 50+ JSON arguments

Validation errors

Call support team

Repeat for next client

After

Create Distributor Package once

Assign package to client

Configurations auto-applied

Client ready for I-9

Repeat: assign only

~50 args

3 args

Manual every time

Configure once, reuse

Support dependent

Self-sufficient

01 — Where It Started

Quarter after quarter. The same signal.

The same themes kept appearing in quarterly reports: onboarding delays, support overload, go-lives slipping. The brief I received: the API is too complex, simplify it.

Working with the PM and implementation team, we went back to the actual conversations behind those reports. What I found: distributors weren't confused by the API. They'd figured it out. They were calling because they were setting up the same configuration for the third time that month and missed one argument. The product had no memory.

The reframe

The quarterly reports weren't saying the API was complex. They were saying the product had no memory. Distributors needed a way to encode a standard setup once and apply it without rebuilding every time. That reframe changed the entire direction.

Current state — 8 clicks before configuration begins

1

Log in, open Admin Control Panel

2

Open Client List View

⚠ Growing client list means more time before any work starts

3

Open the client record

4

Navigate to Client Configuration

⚠ Multiple tabs — admins regularly clicked the wrong one first

5

Open the Features tab

5

6

Scroll to find the relevant section

⚠ No jump-to — must scroll through everything every time

⚠ No jump-to — must scroll through everything every time

7

Set all ~50 arguments manually

From memory, a previous project, or a personal doc kept outside Tracker

⚠ No way to copy a previous client. Every field from scratch, every time

7

8

Save and wait for QA

Errors surface days later. Repeat from step 1 for the next client.

⚠ Late error discovery. Support called. I-9 go-live delayed.

Why this problem first

Configuration similarity across clients

Client

Args configured

Similarity to previous

Support touchpoints

Client A

48

92%

3

Client B

50

89%

2

Client C

47

91%

3

Client D

49

94%

2

Teams repeatedly rebuilt nearly identical configurations. The variance was noise, not intent. The product had no way to encode what "standard" looked like.

Severity: High / Every onboarding

Manual configuration repetition

No way to save or reuse setups. Every client starts from zero even when nearly identical to the last ten.

Priority 1 — solved

Severity: High / Growing volume

Support team dependency

Every stuck distributor called in. Volume grew with the partner channel. Couldn't scale headcount to match.

Priority 1 — solved

Severity: High / Frequent

Configuration errors discovered late

Errors surfaced in QA, not at input. Client can't process I-9 forms until fixed. Compliance gap.

Priority 1 — partially solved

Severity: Medium

Deep navigation to configuration

8 clicks before any work begins. Time lost — not directly revenue-critical on its own.

Priority 2 — future iteration

02 — WHO WAS EFFECTED

2 Admins. 1 Bottleneck

This is an internal admin tool not a consumer product. Both users are technically proficient. They work under deadline pressure. They don't need onboarding.

Design context

Internal tool. UI budget was limited — the expectation was to reuse existing Tracker admin patterns, not design a new system.

Design Approach

Reused existing Distributor Roles components: same table structure, same accordions, same settings hierarchy. Familiarity over novelty.

Component reuse

No net-new UI patterns introduced. Every element maps to something already in the Tracker admin design system, making engineering delivery faster and adoption immediate.

User 01 — Primary

Tracker SysAdmin

Internal governance owner.

Manages all distributor

relationships at the

platform level. Full access

to all settings.

Internal governance owner. Manages all distributor relationships at the platform level. Full access to all settings.

Goal

Maintain consistent configurations across distributors without becoming a bottleneck as partner volume scales

Observed behavior

Keeps a Slack channel of recurring answers ready topaste. Context- switches between 4–6 distributor conversations simultaneously with no system support

Pain point

Answers the same configuration questions every week. Is the product's unofficial memory. No way to enforce standards systematically

Constraint

Cannot scale headcount to match partner growth. Expected to maintain quality as volume increases indefinitely

User 02 — Primary

Distributor Admin

Partner configuring clients. Resells Tracker and manages onboarding for their own client base under I-9 compliance deadlines.

Goal

Onboard new clients correctly without calling support. Keep configurations consistent across their growing client base

Observed behavior

Maintains a Google Doc titled "standard staffing client setup" and copies from it every time. Opens a previous client in a separate tab to compare line-by-line when debugging

Pain point

8 clicks to reach configuration. No way to copy a previous setup inside Tracker. Errors surface in QA after deadlines are already at risk

Constraint

Compliance risk if one argument is wrong. Client cannot process I-9 forms until the configuration is corrected

Indirect

Tracker Support Team

Absorbing the overflow.

Not a direct user of the

product, but the team

whose workload the

quarterly reports were

reflecting.

Absorbing the overflow. Not a direct user of the product, but the team whose workload the quarterly reports were reflecting.

Goal

Focus on high-value enablement work, not repetitive configuration questions that the product should handle

Observed behavior

Has a copy-paste library of the 10 most common configuration questions. Recognizes repeat callers before the conversation begins

Systemic risk

Volume grows with the partner channel. Headcount does not. Every self-service failure in Tracker lands here

Signal

The quarterly reports flagging onboarding problems were reflecting this team's reality more than anyone else's

Signal

The quarterly reports flagging onboarding problems were reflecting this team's reality more than anyone else's

03 — WHAT WE FOUND & CONSIDERED

Discovery Firsr. Then Direction

This is an internal admin tool not a consumer product. Both users are technically proficient. They work under deadline pressure. They don't need onboarding.

Starting assumptions

We assumed

  • Simplifying the payload would reduce errors

  • Distributors needed better documentation

  • Support load was a training problem

  • The API was too complex for distributors to use correctly

What surprised us

  • Distributors had mastered the API. Complexity wasn't the issue.

  • Errors came from copying old setups — not misunderstanding fields

  • Most had documentation — kept outside Tracker in personal docs

  • Support was absorbing a product gap, not a knowledge gap

What changed

  • Stopped designing around API complexity

  • Started designing around operational repetition

  • The product needed memory, not simplification

  • Solution became Distributor Packages — not a simpler API

Research patterns

5/6

Admins reused previous setups

When onboarding a new client, most started by copying from a previous one. None had a way to do this inside Tracker.

4/6

Kept personal docs outside Tracker

Notion, Google Docs, Slack messages. The product's memory lived outside the product. When those docs drifted, errors followed.

73%

Support tickets from copied configs

Most errors weren't from misunderstanding the API — they came from copying a setup with one stale value.

2.3

Avg support touchpoints per onboarding

Even experienced admins needed support more than twice per new client. Not a competence problem — a product memory problem.

How I reached the insight

Observed

  • Repeated support calls with identical questions

  • Similar JSON payload structures across clients

  • Admins are keeping external setup docs

  • Implementation delays at the config stage

Pattern

  • Distributors recreating known configurations from memory

  • ~90% field overlap across onboarded clients

  • The product has no memory of previous work

Insights

  • Problem = repetition, not payload size

  • The API wasn't too complex. The product was stateless

"I have a Google Doc with my standard setups. I've been using it for two years. Half of it is probably wrong now but I don't know which half."

Distributor Admin — discovery interview

Tradeoff matrix

Rejected

Concept A — Simplify API payload

Why it seemed right

Directly addressed the surface complaint. Fewer visible fields, cleaner integrations, better documentation.

Why we moved away

Removes enterprise flexibility distributors genuinely need. Doesn't address repetition at all — a 20-argument API still has to be rebuilt from scratch every client.

Rejected

Concept B — Progressive disclosure wizard

Why it seemed right

Reduces visible complexity. Good for first-time users who need guidance through unfamiliar arguments.

Why we moved away

Experienced admins already knew the arguments — a wizard slows them down. Still rebuilds from scratch every client. Reduces visual complexity, not operational complexity.

Selected

Why this was inevitable

Why this was inevitable

5/6 admins were already recreating known patterns every time. Packages formalized what they were already doing informally. Backward compatible — existing API still works. ~50 arguments reduced to 3.

Tradeoffs accepted

More engineering complexity. New governance flows for inheritance, overrides, and deactivation. Worth it — repeated patterns outweighed the flexibility cost of every alternative.

Tradeoff matrix

Direction

Flexibility

Complexity

Scalability

Support touchpoints

Reduce API fields

Low

Medium

Medium

Breaks existing

Progressive wizard

Medium

Medium

Low

Partial

Distributor Packages ✓

High

Medium

High

Full

Principle 01

Configuration knowledge belongs in the product

Any solution had to make Tracker the single source of truth removing the need for external docs and informal memory.


Led to: Distributor Packages as reusable objects


Led to: Distributor Packages as reusable objects


Principle 02

Governance must surface consequences before commitment

73% of errors came from actions taken without understanding downstream impact. Show consequences first.

Led to: Deactivation modal with client count

Principle 03

Extend existing mental models, don't introduce new ones

Internal tool. Technically proficient users. Familiarity over novelty. The feature should feel like it was always there.

Led to: Distributor Roles as the design foundation

Teams repeatedly rebuilt nearly identical configurations. The variance was noise, not intent. The product had no way to encode what "standard" looked like.

Teams repeatedly rebuilt nearly identical configurations. The variance was noise, not intent. The product had no way to encode what "standard" looked like.

Before and after

Before — every client onboarding

  • 1 Open API docs. Rebuild the JSON payload from scratch or copy from a previous project

  • 2 Map ~50 arguments to the client's specific needs. Submit. Debug validation errors

  • 3 Contact Tracker support. Wait. Go through this cycle 2–3 times

  • 4 Client configured after multiple rounds. I-9 go-live is delayed throughout

  • 5 Start the same process again for the next client, even when nearly identical

Delayed I-9 go-live · Support overwhelmed · Revenue idle

After — Distributor Packages

  • 1 Create a package once with all settings a standard client type needs

  • 2 Assign to a new client: ClientName, ExternalClientID, ExternalPackageID

  • 3 Client inherits all configurations automatically. Override only what differs

  • 4 No support call. Client ready to process I-9 forms

  • 5 Next client: assign same package, override if needed. Work doesn't repeattributors recreating known configurations from memory

Faster I-9 go-live · Support freed up · Partner channel scales

04 — KEY DECISIONS

Where Judgement Mattered the Most

  1. Controlled overrides vs strict inheritance

The most contested decision in the project

Engineering and PM both preferred strict inheritance, a simpler system, and cleaner governance. I pushed back after finding that 4/6 admins were already managing client variation in external docs. A rigid system wouldn't eliminate that behavior. It would just make it invisible.

Tension

Strict inheritance meant a simpler system. It also meant every client variation required a whole separate package.

My observation

Variation at the client level wasn't an edge case. A rigid system wouldn't eliminate it — it would push it into spreadsheets outside Tracker.

Tradeoff accepted

More complexity: inherited configs, override visibility, propagation rules. I accepted that cost. A rigid system that gets worked around isn't actually simpler.

Client Features page — Package Details at top, inherited configurations below, Change Package button. The override model live in the UI.

  1. Designing safe deactivation flows

The highest-risk action in the system

Deactivating a package with assigned clients silently changes I-9 configurations for every attached client.

Engineering proposed a standard confirmation dialog. I pushed for something that surfaced downstream consequences before commitment. Here is the full decision flow we designed for:

  1. Operational consistency over UI novelty

A deliberate constraint, not a compromise

This is an internal admin tool for technically proficient users. The brief expected UI to match existing Tracker patterns for faster engineering delivery. I embraced that constraint fully.

Tension

A custom interface might look more considered. For this user and context, it would add training overhead with no operational benefit.

My observation

Build on the existing Distributor Roles UI. Same table structure, same accordion patterns. Admins already knew it. Packages should feel like they were always there.

Tradeoff accepted

Less visual distinction. Faster adoption, lower training overhead, faster engineering delivery. In a compliance product under deadline pressure, familiarity is a feature.

  1. Client level assignment

Not just template level, even from the client level we can assign

Use Change Package option to assign a different Distributor Package to the Client or assign new package if not existed

If no other active Distributor Packages are available for assignment, the Change Package button is disabled.

  1. Export All Records to Excel Report

Generate an Excel report containing Client information and the assigned Distributor Package details

The system generates an Excel report that includes the Distributor Package assigned to each Client, if applicable.

Teams repeatedly rebuilt nearly identical configurations. The variance was noise, not intent. The product had no way to encode what "standard" looked like.

Iterations

Iteration 01

Deactivation modal

V1 Problem

Simple "Are you sure?" dialog. In review, an admin clicked Continue immediately — assumed it was a standard save confirmation. No idea how many clients wereaffected.were affected

V2 Change

Added client count, two explicit radio options, explanation of each. Admins paused, read the count, made deliberate choices. The governance model works.and

Iteration 02

Package Details placement

V1 Problem

Package Details at the bottom of the page. Two admins in review began editing configurations without realising a package was assigned — about to silently break inheritance.

V2 Change

Moved to the top of the page. Admins now see package assignment immediately on load. No one edits configs without first seeing the package state.

05 — WHAT WAS BUILT

4 Sub-Features. One Phase

Edge cases designed for

Transfer client between distributors

Client retains original package assignment. New distributor must explicitly reassign. Prevents silent configuration inheritance from the previous distributor's package.

Deactivate package with active clients

System surfaces client count and requires explicit choice: keep existing assignments or reassign to another active package. No silent state changes.

No active replacement packages available

System warns the admin before allowing deactivation. Designed to prevent orphaned client configurations with no valid package fallback.

Client-level override conflicts with package update

Package updates propagate to all assigned clients except fields with client-level overrides. Override acts as a shield - package changes don't overwrite intentional client customisation.

ExternalPackageID provided alongside individual field arguments

API returns 400 Bad Request. Cannot mix package assignment with individual field configuration in the same call. Forces a clean separation of concerns.

ExternalPackageID set to null

Removes the package association from the client. Client reverts to direct configuration mode. The Assign Package container reappears on the client Features page.

LAYER 01

Distributor Packages UI

Create and manage reusable packages. 7 configuration sections: Product Configs, Email Settings, Site Settings, Password Rules, Logo, System Messages, General Info. Activate, deactivate, export.

LAYER 02

Client Features Page

Package Details container at the top. Assign Package and Change Package modals. Override individual settings at client level. Direct configuration still supported.

LAYER 03

Component reuse

ExternalPackageID reduces Create Client from ~50 arguments to 3. PATCH supports update or removal. Fully backward compatible — existing method still works.

Assign New Package — one dropdown, one selection, entire package applied automatically. ~50 arguments reduced to 3 in practice.

06 — OUTCOMES

What changed

Single phase, available to all distributors immediately, with no feature flag. Numbers from the API specification or post-launch team observation.

~50→3

Arguments per client

A distributor using packages needs only ClientName, ExternalClientID, and ExternalPackageID. The 50-argument payload became optional. Verified from API specification.

Fewer

Routine support questions

Support team reported fewer repetitive configuration questions post-launch. Distributors who adopted packages were self-sufficient for standard setups.The support

4

Sub-features shipped

Packages UI, Client Features updates, POST and PATCH enhancements, Logo inheritance with a 4-tier System/Distributor/Package/Client model. All in one phase.

Post-launch signal

The implementation team reported a clear shift: fewer repetitive configuration questions, more complex enablement conversations. Distributors who adopted packages reported faster go-lives. Within weeks, distributors who hadn't yet adopted were asking when they could start.

07 - MY ROLE

What I drove. What we built together.

I personally drove

  • Reframing the problem from API simplification to operational repetition

  • Advocating for controlled overrides over strict inheritance

  • Workflow architecture — packages UI and client-level experience

  • Governance UX: deactivation flows, warning states, reassignment behavior

  • Implementation reviews and design QA through release

What surprised us

  • Overall product initiative scope — PM-led with design input

  • API architecture decisions — engineering-led

  • Propagation rules and conflict handling logic — engineering with design review

  • QA test coverage and release criteria — QA-led with design support.

08 — REFLECTION

What I'd do differently.

  1. Override usage exceeded expectations

Most clients had at least one override. This validated the decision. Strict inheritance would have forced a significant share of clients into separate packages.

  1. Bulk reassignment became an immediate ask

The future consideration from the original brief became the top feature request within weeks. Should have been scoped into the first release.

  1. Test override interactions earlier

The override UI still exposes more system complexity than it should. Earlier testing with Distributor Admins before build would have caught this.

  1. Package version history in scope

Admins have no way to see a package before an edit. For a system where changes propagate to every assigned client, audit history should have been in the first release.

09 — TAKEAWAYS

Four decisions worth remembering.

  1. The brief described a symptom. The real problem was underneath it.

The brief said: simplify the API. Accepting that would have produced a simpler API. Going back to the actual support conversations revealed the real problem — operational repetition, not payload complexity. That single reframe changed what got built entirely.

  1. I chose complexity over rigidity — and it was the right call.

PM and engineering both wanted strict inheritance — simpler to build, easier to govern. But 4/6 admins were already working around the product's inflexibility using external docs. A rigid system wouldn't eliminate those workarounds. It would just make them invisible. Accepting more complexity in the data model kept configuration decisions inside Tracker where they belong.

  1. Renaming the feature changed how the whole team designed it.

Configuration Templates and Distributor Packages describe the same thing technically. But templates are blank documents you fill in. Packages are complete things you assign. Changing the name shifted the team from thinking "simplification tool" to "delegation system" — and that distinction shaped every downstream design decision.

  1. Two of the most important UX decisions came from watching, not designing.

Moving Package Details to the top of the Features page came from watching an admin scroll past it and start editing configs without knowing a package was assigned. Adding client count to the deactivation modal came from watching an admin click Continue without reading the warning. Neither was in the spec. Both were critical to the system working correctly.