Work About Contact [email protected]
Prime Services
Case Study — NDA Confidential

Redesigning an enterprise
trading platform under constraint.

An internal trading platform built on legacy architecture, used daily by expert front-office users with zero tolerance for errors. The challenge wasn't just design — it was navigating technical limits, business politics, and compliance requirements simultaneously.

Company TD Securities
Role UX Designer
Domain Enterprise / FinTech
Status NDA — visuals redacted
Prime Services dashboard — NDA
NDA — Confidential
Visuals intentionally redacted
TD Prime Services
Prime Service · Thick Client · Swift Messaging · TDFX · TD Securities CMS · One Portal
Scroll to explore

An expert tool that had
outgrown itself.

The Prime Services internal trading platform was built for expert users — front-office and operations teams who lived inside it all day. But years of patched-together functionality had left it difficult to scan, impossible to learn without institutional knowledge, and impossible to scale without breaking existing behaviour.

My brief was to redesign the platform across multiple modules — Prime Service, Thick Client, Swift Messaging, TDFX, TD Securities CMS, TD Precious Metals, and One Portal — while working within tight constraints from three directions at once: technical architecture, business workflow requirements, and stakeholder politics.

A concrete example of the starting point: the Money Wire screen showed one transaction row in a full-screen view, used a neon green row highlight as the only status indicator, and embedded raw audit logs directly into a table cell. Users who were new to the platform couldn't read status at all without someone explaining the colour codes first.

Due to NDA, most visuals are intentionally blurred. One legacy screenshot is shown unredacted — shared with permission to anchor the before/after story. The work itself — the decisions, the trade-offs, the reasoning — is what this case study is about.

7
Modules redesigned
0
Workflow disruptions during rollout
Constraint types navigated simultaneously
1
Design system established from scratch

Three walls.
One design solution.

Most design problems have one dominant constraint. This one had three operating simultaneously — and any decision that solved one often created friction with another. Mapping them clearly was the first design act.

01 — Technical
Legacy architecture
  • Built on legacy architecture with fixed data structures and real-time feeds
  • Layout flexibility was severely limited by the underlying system
  • Performance and stability took priority over visual experimentation
02 — Business
Expert, time-sensitive users
  • Used daily by front-office and operations users who knew every shortcut
  • Workflows were time-sensitive with zero tolerance for errors
  • Existing behaviour patterns could not be disrupted during the revamp
03 — Stakeholder
Competing priorities
  • Multiple teams with conflicting priorities and differing definitions of success
  • Limited appetite for large interaction changes from senior stakeholders
  • Every design decision was filtered through compliance and risk requirements

What I actually found
when I looked closely.

After reviewing workflows, auditing every high-traffic screen, and sitting with users, four patterns emerged that shaped every design decision that followed.

Finding 01
The Excel button was the most-used feature

Every screen had an Excel export button — and users were clicking it constantly. Not because they wanted to work in Excel, but because the platform's own filtering, sorting, and comparison tools were too limited to do the analysis they needed. The workaround had become the workflow. This told me the platform wasn't meeting users where their actual work happened.

Finding 02
Status was invisible without institutional knowledge

The only way to know what a row's status meant was to already know what the green highlight and codes like "CAPPR1" or "PEND" signified. New team members couldn't read the screen without someone explaining it to them first. Approval errors happened not because users were careless — but because the interface had no accessible language for status at all.

Finding 03
15+ columns with no way to tell what mattered

Effective date, Client, 3rd Party, Funds Out, CcyOut, Reason, WireInst, Comments, WireRefNum, SenderBic, RspSent, UniqItspId, IndDirection — all at identical size and weight. Primary decision-making data sat alongside rarely-needed reference fields with zero visual distinction. Users scanned the full row every time, even when they only needed two or three columns to make a decision.

Finding 04
The platform had been this way for years — and users had adapted around it

The hardest discovery finding wasn't a UX problem — it was a cultural one. Users had spent years building personal workarounds: colour-coded personal notes, custom Excel templates, informal onboarding guides passed between colleagues. The platform had atrophied, but the people using it had compensated so effectively that it still worked. Any redesign that broke those compensations would feel worse than the original, even if it was objectively better.

Design principle that followed

Don't redesign the platform. Redesign it in a way that makes the workarounds unnecessary — without punishing users for the habits they built to survive the old one.

The before was worse
than you think.

Years of patched-together functionality had produced a platform that only worked if you already knew how to use it. The redesign brought it into the TD design system — without disrupting the workflows expert users had built around it.

Before — Legacy Money Wire
Legacy Money Wire platform
After — Redesigned in TD Design System
Redesigned Money Wire in TD design system
What was broken
1
Status = a single neon green row

No label, no icon, no text. "CAPPR1" was meaningless unless you already knew the code. New users made approval errors because the screen had no accessible language for status.

2
15+ columns, identical visual weight

CcyOut, WireInst, WireRefNum, SenderBic, UniqItspId, IndDirection — all the same size as Client and Funds Out. Users had to scan every column every time to find what actually mattered for the decision at hand.

3
Audit trail dumped into a table cell

"2023-12-01 16:53:08 · sugasm3 · CAPPR1 · comment4" — raw log strings concatenated directly into the Comments column. Reviewing history meant parsing text, not reading a timeline.

4
Actions with no consequence hierarchy

Acknowledge, Reject, Approve, Excel, Refresh — all equal-weight toolbar buttons. Destructive actions sat next to informational ones with nothing separating them visually.

5
75% of the screen was empty grey

One transaction row in a full viewport. Users processing queues of wires reset cognitively to a nearly blank screen between every record — a hidden time cost across an entire trading day.

What changed and why
1
Explicit Status column — PEND, CMPLT, REJECT

Status is now text-first: readable labels in the first column, colour as reinforcement not replacement. A new user can understand the queue on day one without needing institutional knowledge handed to them.

2
Column hierarchy — primary data visible, reference on demand

Status, Effective, Client, Funds Out, CcyOut — the decision-critical columns — are prominent. Reference columns are accessible but deprioritised. The eye goes to what matters without scanning everything.

3
Filter panel replaces toolbar clutter

Entity, Account, Status, date range — a structured left panel puts filtering in its own space. The table toolbar is reserved for row-level actions: Approve, Reject, Export, Refresh — contextual and consequential only.

4
Pagination + density — 10 records visible at once

Instead of one row in a sea of grey, 10 records are visible with clear pagination. Users can scan their queue, select multiple rows, and act in batches — a workflow that previously required exporting to Excel first.

5
TD design system — consistency across all modules

The same component library, token system, and interaction patterns now run across Money Wire, Thick Client, Swift Messaging, TDFX, CMS, Precious Metals, and One Portal. Onboarding to a new module no longer means learning a new interface.

When the brief is wrong
but non-negotiable.

The Trade Breaks screen is the most honest part of this case study. It's a story about a design problem I couldn't solve the right way — and how I found a third option nobody had asked for.

Trade Breaks — NDA
NDA — Redacted
Trade Breaks — two-grid view

Trade Breaks — initial design (visuals blurred)

Trade Breaks popup — NDA
NDA — Redacted
Row-level pop-up intervention

UX intervention — row-level pop-up (visuals blurred)

1
The impossible brief

Business users required Client Trades and Street Trades to appear on a single page, side by side. Two dense data grids, hundreds of rows, on one screen. The cognitive load was severe. The right UX answer was to separate them — but that was off the table.

2
Why I didn't push back harder

Users had a genuine need: they needed to cross-reference Client and Street trades simultaneously to identify breaks. Separating them would have eliminated the visual comparison that made the page useful. The layout was right for the task — it was just implemented poorly.

3
The third option — row-level pop-up

Instead of restructuring the page, I introduced a row-level pop-up view. Clicking any row surfaces a detailed comparison panel for that single trade — Client vs Street side by side — without leaving the master grid. Users could inspect one trade at a time without losing the full-page context they depended on.

The trade-off

This wasn't the cleanest solution — a dedicated detail page would have been better UX and I proposed it twice. Both times it was rejected because users said they needed to see both grids simultaneously to spot breaks by eye. The pop-up was the third proposal, and it passed because it didn't change the page structure stakeholders had already signed off on. That's a real constraint. Sometimes good design means finding a third option, not winning the argument about the first one.

Building the foundation
once, for everything.

One of the most durable outputs of this project wasn't any single screen — it was the design system that ensured every module looked and behaved consistently, and that future designers wouldn't have to solve the same problems from scratch.

Design system — NDA
NDA — Redacted
Component library overview

Emerald design system — component library (visuals blurred)

Annotations — NDA
NDA — Redacted
Design specifications

Design specifications & annotations (visuals blurred)

01 — Component reuse
Consistent patterns

Every component — buttons, accordions, avatars, badges, cards, carousels — was built once and documented for reuse across all 7 modules. This eliminated inconsistency that had accumulated over years of independent feature development.

02 — Interaction patterns
Predictable behaviour

Expert users rely on muscle memory. Standardising hover states, click behaviours, modal triggers, and data loading patterns meant users could move between modules without relearning interactions.

03 — Visual & data hierarchy
Information clarity

The system established a clear visual language for data-dense screens: typography scale, colour usage for status and alerts, grid density rules, and column priority for financial data tables — so hierarchy was built in, not bolted on.

04 — Scalability & compliance
Built to last

Every component was reviewed against compliance and accessibility requirements before being added to the library. This meant design decisions didn't get reversed in engineering — they'd already been validated upstream.

Constraint isn't the
enemy of good design.

7
Platform modules redesigned end-to-end
0
Workflow disruptions during rollout
1
Unified design system adopted across all modules
Reduced time to find high-priority accounts, positions, and reports
Constraint types navigated without breaking existing user behaviour
Reusable patterns established for future Prime modules

"The hardest skill in enterprise UX isn't designing the ideal solution. It's finding the best possible solution within constraints that are real, immovable, and sometimes in conflict with each other — and making peace with that."