Designing

Designing

Multi-Owner Contract Pattern

Multi-Owner Contract Pattern

NDA

Internal

Contract Management

Time:

Time:

16 months, 2020 – 2021

16 months, 2020 – 2021

16 months, 2020 – 2021

Role:

Role:

Product Designer

Product Designer

Product Designer

Scople:

Scople:

Interaction design, component library, cross-functional collaboration

Interaction design, component library, cross-functional collaboration

Interaction design, component library, cross-functional collaboration

Overview

Overview

Designed the digital contract experience, new to the platform, that streamlined client onboarding.

Customized the contract flow to handle multiple owners and their accounts, a case the platform’s standard contract patterns didn’t cover.

Designing interactive patterns for data-heavy information

Contract agreements used to move slowly, through manual coordination between an advisor and the operations team. A digitized contract surface sped up the process, with review and business logic built in. Minor variations across service types and business groups required design customization.

The contract surface inherited most of the platform's design framework, but one contract type was unusually data-heavy. The existing components covered standard forms and tables, but not the high-volume data entry these workflows needed. Bad data at entry fragmented the records and sent operations back to manual verification, the very work the tool was meant to eliminate. Accuracy at the point of entry was the whole point.

I designed this pattern iteratively, building buy-in across cross-functional stakeholders and the wider design team. The rest of this case study walks through that process.

The Work

Splitting a compound task

Digitizing the contract workflow meant accessing and retrieving datasets from data servers, so that logic drove every interaction decision. It was also the information operations teams looked at most closely when reviewing contract request forms.

The pattern required the requestor to enter multiple owners, each with several data sets, plus their mapped bank accounts, which risked making the task complex. To keep the form manageable, I split this section into separate steps, consistent with how the full four-section form was structured.

The design was reviewed and signed off with the PM and stakeholders.

Making a long table legible

The owner list could run long, so I capped the table at ten visible rows and added a running party count at the top, letting users confirm the total before submitting. The cap served rendering performance and scannability, and kept the page from turning into an endless scroll. The count is the subtler decision: a small piece of contextual guidance that lets users verify their work before it enters processing.

Laying out the surfaces this way is what made their fragmentation visible to me. Each was designed on its own terms, and no single view connected them.
Laying out the surfaces this way is what made their fragmentation visible to me. Each was designed on its own terms, and no single view connected them.

The list caps at ten visible rows to stay scannable; the user scrolls to reach the rest.

Laying out the surfaces this way is what made their fragmentation visible to me. Each was designed on its own terms, and no single view connected them.
Laying out the surfaces this way is what made their fragmentation visible to me. Each was designed on its own terms, and no single view connected them.

A running party count at the top right lets the user confirm the total before submitting, without scrolling back through the list.

Protecting data integrity at the point of entry

To protect data integrity, users could type in only genuinely new accounts; everything else was selected from records already on the platform. Since owner data already lived there and appeared on another surface, I pulled it from that source rather than have users re-enter it, keeping the data consistent everywhere.

Laying out the surfaces this way is what made their fragmentation visible to me. Each was designed on its own terms, and no single view connected them.
Laying out the surfaces this way is what made their fragmentation visible to me. Each was designed on its own terms, and no single view connected them.

Adding an owner: the user types a name and the system surfaces close matches to select from, so existing records are reused rather than re-entered.

Laying out the surfaces this way is what made their fragmentation visible to me. Each was designed on its own terms, and no single view connected them.
Laying out the surfaces this way is what made their fragmentation visible to me. Each was designed on its own terms, and no single view connected them.

Adding a financial institution to an owner; no match found, so the system offers an "Other" path to enter a new one. New entries are the only ones typed from scratch, which is what protects data integrity.

Laying out the surfaces this way is what made their fragmentation visible to me. Each was designed on its own terms, and no single view connected them.
Laying out the surfaces this way is what made their fragmentation visible to me. Each was designed on its own terms, and no single view connected them.

Adding a financial institution to an owner; a match is found and the user selects it.

An escape hatch for high-volume entry

Adding accounts line by line for every owner was heavy work, and a stakeholder had asked for a faster path, so we added an option to upload an account list. Spreadsheets were the tool finance users already reached for, which made an upload the natural fit. Reading unstructured files was technically constrained, so I worked with an engineer to understand what the parser could reliably read, then designed a downloadable template that structured the data for cleaner processing.

Laying out the surfaces this way is what made their fragmentation visible to me. Each was designed on its own terms, and no single view connected them.
Laying out the surfaces this way is what made their fragmentation visible to me. Each was designed on its own terms, and no single view connected them.

Left: the upload and download-template links, each tied to its action. Right: the upload window repeats the template link and instructions, in case the user didn't grab the template first.

Edge cases

Alongside the main flows, I designed the edge cases: what a user sees when an action falls outside the established business logic, and how the system reports partial failures after a bulk upload.

Laying out the surfaces this way is what made their fragmentation visible to me. Each was designed on its own terms, and no single view connected them.
Laying out the surfaces this way is what made their fragmentation visible to me. Each was designed on its own terms, and no single view connected them.

An added account breaks a business rule. The error state names the problem and lets the user download the file, correct it, and re-upload.

Laying out the surfaces this way is what made their fragmentation visible to me. Each was designed on its own terms, and no single view connected them.
Laying out the surfaces this way is what made their fragmentation visible to me. Each was designed on its own terms, and no single view connected them.

An account fails to add. The notice gives the reason and lets the user fix the entry and retry, or cancel.

Collaboration with Engineers

Once stakeholders approved and signed off on the designs, I reviewed the flow with engineers. We walked through the screens weeks before each sprint to confirm technical details and answer design questions, and the wireframes were attached to each Jira story. I also reviewed the built work in QA and production so every detail matched the design. Anything that didn’t align with the spec was resolved quickly or added to the backlog for a later update.

In the end, the design left a reusable pattern for multi-list data entry, applicable beyond this contract type.

Designed by Ann Ash, Last updated: August 2026