UX DESIGN CASE STUDY
The Interaction Behind the Upload
| My Role: | Lead UX Designer - sole contributor across research, design, and deployment |
| Company: | The Home Depot |
| Project: | Pro Quoting Tool - Bulk Upload Feature |
| Timeline: | 10 weeks, discover through deployment |
| Methods: | Contextual inquiry, job shadowing, iterative design, UAT, GitHub validation |
| Deliverables: | Figma prototype, dev handoff, production validation in sandbox environment |
The Challenge
The Home Depot's complex quoting team builds large, multi-line quotes for professional contractors - jobs that could run 50, 60, sometimes 80 line items. To manage the volume, the team relied on am automation bot that handled line item entry by taking over the user's machine. A single mouse movement during the process would crash it entirely.
Two weeks of direct shadowing revealed that the team had stopped raising the issue. The frustration was real, but it had been absorbed as a normal part of the job. The better path wasn't to patch a tool tied to a platform being sunset - it was to build the feature properly in the new application.
How do we replace a fragile workaround with something fast, reliable, and built to last?
The Quoting Environment
The complex quoting team was eight specialists, each responsible for a specific product category. The wire and electrical quoter ran a second computer just to manage the load - his category carried a 24-hour pricing expiration, making bot instability a direct business risk.
80+
Line items on the largest quotes
24 hrs
Pricing expiration on commodity goods
45-60 min
Average quote time before bulk upload
The Design Work
Because the team worked primarily in spreadsheets, CSV was the natural format choice. The feature used a strict required template - users downloaded it, populated it, and uploaded it back. No open column mapping, no guesswork on either end.
Spreadsheet
| # | Vendor | Department | Category | Product Description | Vendor Part / Model | Qty | Unit | Vendor Cost | Lead Time (days) |
|---|---|---|---|---|---|---|---|---|---|
| 1 | Voltex Supply Co. | Electrical | Wire | 12/2 Romex NM-B Wire 250ft | WG12250 | 10 | Roll | $68.47 | 5 |
| 2 | Voltex Supply Co. | Electrical | Wire | 14/2 Romex NM-B Wire 250ft | WG14250 | 8 | Roll | $52.18 | 7 |
| 3 | Voltex Supply Co. | Electrical | Wire | 10/3 Romex NM-B Wire 100ft | WG10100-3 | 5 | Roll | $74.92 | 6 |
| 4 | Halton Flooring Co. | Flooring | Flooring | LifeProof Vinyl Plank 8mm Oak | LP-VP-OAK-8747 | 120 | Sq Ft | $3.29 | 5 |
| 5 | Halton Flooring Co. | Flooring | Flooring | TrafficMASTER Peel & Stick Tile | TM-PST-GY-12 | 200 | Sq Ft | $1.18 | 7 |
| 6 | Halton Flooring Co. | Flooring | Flooring | LifeProof Vinyl Plank 8mm Oak | LP-VP-OAK-8747 | 60 | Sq Ft | $3.29 | 5 |
| 7 | Halton Flooring Co. | Flooring | Flooring | MSI Carrara White 12x24 Porcelain | MSI-CW-1224 | 180 | Sq Ft | $4.79 | 6 |
| 8 | Ridgeline Lumber | Lumber | Lumber | 2x4x8 ft. Kiln Dried Whitewood | LB-248-KD | 240 | Each | $5.68 | 7 |
| 9 | Ridgeline Lumber | Lumber | Lumber | 2x4x8 ft. Kiln Dried Whitewood | LB-248-KD | 240 | Each | $5.68 | 7 |
| 10 | Ridgeline Lumber | Lumber | Lumber | 4x8 ft. 3/4 in. T&G Plywood | PLY-48-34-TG | 60 | Sheet | $54.97 | 6 |
The full interaction design covered every state a user could encounter - successful upload, partial success, full rejection, and edge cases identified during UAT. Before shipping, every interaction was validated against the live build in a sandbox environment to confirm the feature matched the Figma prototype.
How do we tell someone their data is wrong without sending them back to square one?
Upload failed
Flooring_Quote_Oct.csv
Flooring_Quote_Oct.csv
10 rows rejectedYour file could not be processed. One or more rows do not match the required template format. Please review your file and try again.
Upload incomplete
Flooring_Quote_Oct.csv
Flooring_Quote_Oct.csv
7 rows processed 3 rows failedLP-VP-OAK-8747 — duplicate part number detected
LP-VP-OAK-8747 — duplicate part number detected
LB-248-KD — duplicate part number detected
Upload incomplete
Flooring_Quote_Oct.csv
Flooring_Quote_Oct.csv
7 rows processed 3 rows failed3 rows contain errors. Download the report below, correct the highlighted cells, and re-upload your file.
Flooring_Quote_Oct_Errors.xlsx
The full interaction design covered every state a user could encounter - successful upload, partial success, full rejection, and edge cases identified during UAT. Before shipping, every interaction was validated against the live build in a sandbox environment to confirm the feature matched the Figma prototype.
Impact and Reflection
Bulk upload shipped and the team adopted it immediately. The RPA bot went untouched from day one and was formally decommissioned within a month. A quote that had taken 45 minutes to an hour now took 30 to 45 seconds. Quote-to-order conversion increased by 35%.
What I'm most proud of is the decision that shaped everything downstream - recognizing that the right move was to build the feature properly in the new platform rather than extend the life of a fragile workaround.
The best design doesn't add something new. It removes what was quietly getting in the way.