Internal Tools · Haddad Brands

Haddad Internal Tools

Designing one screen where operations teams create requests, catch missing data, and request the right assets — without switching tools.

My Role
Product Designer
Timeline
Q3 – Q4 2025 (10 weeks)
Tools
Figma, Excel, Notion
Project Overview

Redesigned Haddad's internal request tool so operations teams could create, validate, and act on production requests from one screen.

Contribution

Led research and design end to end — interviews, wireframes, prototyping, and usability testing with two operators.

Impact

Splitting valid from invalid styles removed the single biggest source of confusion found in testing.

Learning

Two in-depth interviews surfaced sharper, more actionable findings than a wider, shallower survey would have.

How it works
Create request
Title · date
asset types
Bulk upload
Excel file
many styles
Add individual
Search by
brand · color
Validate data
System checks
all fields
Fix errors
Missing brand
category · color
Review valid
12 styles
confirmed
Request assets
PDP · on-model
video · AI

One screen. Seven steps. From scattered request to validated, asset-ready work.

Overview

The work was there. It was just hard to read.

Haddad's teams were handling production requests that had no structure. Styles, assets, and missing data were all mixed together. Nobody could tell at a glance what was ready to move and what wasn't.

This project was about fixing that. Not by adding more steps, but by making the existing work readable.

{{ card.title }}

{{ card.body }}

Problem

There was no way to tell, at a glance, what was ready to move.

Methodologies

I watched how the team actually worked.

I sat with the team to see how requests really moved, then tested early designs with two people who do this work every day.

- interviews & usability testing -
{{ m.n }}

{{ m.label }}

{{ m.body }}

The core issue

Tracking wasn't the problem. Knowing what was ready to move was.

One request could hold 40 styles. Some were fine. Some were missing a brand or a color. Some needed a specific type of photo. The old spreadsheet showed all of them the same way, so people had to check every row by hand.

Before: a row in a spreadsheet, with no owner and no status. After: a request with a clear status, a named owner, and the right actions right there.

Questions users needed answered
{{ q }}
Key Findings

These come from two interviews — with Joanna and Kathryn, who both handle production requests, but on different teams. Their problems were almost the same.

{{ f.n }}. {{ f.title }}

Supported by: Interviews

{{ f.body }}

Before · The spreadsheet
style_requests_Q2.xlsx
StyleBrandCategoryColorStatusAssets?
ST-1042—PoloWhite?—
ST-1071Haddad—Navy?PDP
ST-0912HaddadT-shirtNavyOK???
Valid and invalid mixed. No clear actions. No asset structure.
After · Structured request
Spring Apparel Q2 · Structured
Request titleSpring Apparel Q2
Asset typesFlat PDP · On-model
Valid styles12 ready
3 styles have missing data — fix before saving
12 styles validated · asset requests available
Project Goal

To make the problem sharper, I asked:

How might we let people see, at a glance, which styles are ready and which need attention — without leaving the screen?

Research Impact
Design Requirement #1
Finding: operators can't tell what's ready to move

Separate valid work from work that needs attention

Show ready and blocked styles in two distinct sections, always, so priority is obvious without scanning row by row.

Design Requirement #2
Finding: the workflow is fragmented across tools

Bring the whole request into one screen

Creating, validating, and requesting assets for a style should never require switching tools or re-entering information.

How the new flow works

Seven steps, one screen. No jumping between tools.

The whole request — from the title to the asset request — happens in one place. Nothing lives in a separate email or spreadsheet.

Core principle

Valid and invalid styles always show separately. You can't save until you've seen and fixed the errors.

{{ s.t }}
{{ s.d }}
Ideation

Three directions, before picking one.

I looked at structure first, and worried about visuals later.

Details
Styles (15)
Assets
Direction A · TabbedDropped

Tabs hid errors behind navigation. Users only discovered invalid styles if they clicked the right tab — and often missed critical issues entirely.

⚠ Invalid · 3 styles
✓ Valid · 12 styles
Direction B · Split sectionsChosen ✓

Invalid and valid always visible together on a single screen. Priority was instantly clear. Testing confirmed this worked best across all request sizes.

Step 2 of 4 · Add styles
Direction C · Step wizardPartially used

Good for first-timers. Power users handling 40+ styles found the forced step-by-step flow too rigid and slow for high-volume work.

Wireframe sketches

Three screens, sketched in one sitting.

Before opening Figma, I sketched the screens that mattered most: request creation, the valid/invalid split, and the asset request row.

/
☑ Flat PDP
☑ On Model
☐ Video
☐ AI PDP
Styles area
Save Request
Request creation

I tried three versions of the form. The one with the fewest fields worked best.

⚠Invalid · 3Fix before saving
✓Valid · 12Ready to request
Valid and invalid split

Mixing errors with ready styles confused people in early testing. Separating them made the task obvious — fix what's broken, then act on what's ready.

Style
Brand
Category
Request asset
HDD0912
Flat PDP
On Model
HDD0945
Flat PDP
AI PDP
HDD0967
Flat PDP
Video
Owner: Minal B.
Due: 28 Jun
12 valid ✓
Asset actions on the row

Putting the asset request buttons on each row meant you never had to leave the screen to request something.

{{ c.n }}. {{ c.title }}

{{ c.body }}

Four problems. Four things to fix.

{{ o.n }}

{{ o.area }}

Problem

{{ o.problem }}

Opening

{{ o.opportunity }}

Iteration

Every solution went through the same steps, tested with real requests.

Problem → Decision → Mockup → Tested (N=2) → Impact
Solution 01 · Project creation

Requests stopped getting lost.

Before, the important details lived in someone's head — name, owner, deadline, priority. Now they're captured when the request is made, and everyone can see them from that point on.

Pain
Work started with no structure at all.
Iterations
Tested 3 versions. The shortest one worked best.
Final
Five fields. Takes under a minute.
Impact
All the context is there from day one.
Screen breakdown

What each part of the screen does.

1
Project details
Spring Apparel Collection — Q2 2025
28 Jun
☑ Flat PDP☑ On-model PDP☐ Video Flat☐ AI PDP
2
Bulk add
Drop Excel file here or browse files.xlsx, .csv
3
Add individual
Brand…
Category…
Color…
Core…
Search
4
Invalid styles
HDD-1042· Missing brand
HDD-1071· Missing category
HDD-2031· Missing color
5
Valid styles
HDD-0912Flat PDPOn-model
HDD-0945Flat PDPVideo
+ 10 more valid
{{ z.n }}

{{ z.label }}

{{ z.detail }}

The screen was structured around task progress: define the request, add styles, fix errors, confirm valid styles, and submit.

Validation design

Errors show up as part of the work, not at the end.

Errors aren't a wall that stops you. They show up as part of the task, so you know what to fix before you save.

Invalid styles — missing data types
Style Brand Category Color Error
{{ r.code }} {{ r.brand }} {{ r.category }} {{ r.color }} {{ r.issue }}
Missing fields surface immediately on the row. Users fix them inline without leaving the form.
Valid styles — ready for action
Style Brand Category Color Assets
{{ r.code }} {{ r.brand }} {{ r.category }} {{ r.color }}
{{ chip }}
12 styles ready · request assets or save
Valid styles show available asset actions on the row. No jumping to another tool or screen.
Asset request workflow

Requesting the right asset, from the same place.

Once styles were checked, people could request the assets they needed right from the style row — no switching tools, no copying references, no remembering where things were.

Actions stayed close to the style they belonged to.
Multiple asset types could be requested per style in one action.
Requested assets were recorded and visible in the tracking view.
Asset type reference
{{ a.label }}
{{ a.desc }}
Tracking & status

Every request at a glance — status, owner, and blockers.

Built to handle everything: clean requests, big batches with errors, partly done work, and overdue items — all readable without opening a single one.

In Progress
Blocked / Overdue
In Review
Saved
haddad.internal / requests

User Requests

8 total
Filter
New Request
Request Owner Status Styles Errors Asset status Due Priority
{{ row.name }}
{{ row.sub }}
{{ row.ownerInitials }}
{{ row.owner }}
{{ row.status }} {{ row.styles }} {{ row.invalid }} {{ row.assetStatus }} {{ row.due }} {{ row.priority }}
Key design decisions

Six decisions behind the design.

{{ d.n }}

{{ d.title }}

Why

{{ d.why }}

Outcomes

What this design set out to change.

These are the intentions behind the design, not measured results. They show what a structured, visible workflow is meant to do.

{{ o.body }}

How AI helped

It helped me read notes faster. It didn't make the decisions.

I used AI to sort through Joanna and Kathryn's interview notes and spot where their answers matched or differed. That was faster than reading both sets side by side by hand.

But every real decision — what to split, what to flag, what to cut from the step wizard — came from watching them actually use the tool, not from a summary.

Conclusion

A good internal tool doesn't just store work. It shows people what's ready, what needs attention, and what can move forward — without anyone sending a follow-up message. Splitting valid from invalid styles was the one change that made the rest of the screen work.

Learnings

{{ r.title }}. {{ r.body }}

Limitations & next steps

What I'd do with more time.

{{ l.label }}

{{ l.body }}

Haddad Internal Tools
Confidential case study · 2025
Back to top
← Back to homepage