Lily AI
Catalog manager for retail product attribution
2022 — 24
Merchandisers found the batch they needed 71% faster once the catalog stopped being one list of 40 million products.
The business problem
Renewals ran through one screen, and that screen was getting slower every month.
Lily AI sells attribute enrichment to enterprise retailers: send us a product, get back the language shoppers actually search with — silhouette, occasion, fit, fabric hand. The revenue model is per-SKU and annual, and almost all of the perceived value of the contract arrives through a single surface, the catalog manager. If a merchandising director cannot spot-check the attributes we returned, they cannot defend the line item at renewal.
By 2022 that surface was failing under its own success. Enterprise accounts were pushing 100,000 to a million SKUs a month into a catalog that had grown past 40 million rows per account, and the catalog had no organizing concept beyond pagination. Search latency climbed. Two accounts flagged "can't verify your output" in QBRs. Support tickets tagged catalog were the largest single category and rising.
Underneath the commercial risk was a mundane, daily indignity. A merchandiser who uploaded four thousand dresses on Tuesday would come back Thursday to confirm they had processed, and had no way to ask that question. The interface could answer "show me dresses" across three seasons of live and discontinued product. It could not answer "show me the ones I sent Tuesday."
The reframe
The catalog was never a catalog. It was an inbox.
Lily is not the retailer's system of record — their PIM is. Nothing lives in Lily. Product arrives, gets enriched, and goes back out. That is mail, not inventory. Once I stopped modelling possession and started modelling arrival, the hard parts fell over: a delivery has a sender, a timestamp, a count, and a status; it can be read, unread, archived, or re-sent. Apple Mail had solved the entire triage problem two decades earlier, and every merchandiser on earth already knew the gestures.
The work
Batches in the rail, products in the middle, attributes on the right.
Explorations that died
-
01 / 03
Better filters on the flat list
It made the haystack easier to sift but still assumed you knew what you were looking for — it could not answer "did Tuesday's upload finish?"
-
02 / 03
Folders the retailer maintains
It required merchandisers to keep a second taxonomy in sync with their PIM. Two sources of truth is worse than one imperfect one.
-
03 / 03
Archive by fashion season
Seasons don't align across retailers. In testing the rule quietly hid an evergreen basics line, and trust in automatic anything never recovered.
Tradeoffs
What got cut, and why.
- Cross-batch bulk editing. The single most requested feature, and I shipped without it. Writing corrections back through the enrichment pipeline needed an audit trail the data team could not build that quarter, and every workaround we prototyped could silently overwrite a model-generated attribute with no way to see who did it. Review stayed read-only until the audit log landed six months later.
- The coverage analytics tab. Early designs put an attribute-coverage dashboard on the batch overview. In testing nobody made a decision from it, and it pushed the product list below the fold on a 1440 screen. The overview kept three numbers and gave the space back.
- A clean URL scheme. Retailers had bookmarked deep links into the old flat list, and breaking them would have generated exactly the support tickets we were trying to remove. We kept a redirect table mapping every legacy product URL into its new batch context for two quarters. It was ugly and it was correct.
- Mobile. Merchandisers do this work on 27-inch monitors with a spreadsheet open beside them. We designed down to a 13-inch laptop and deliberately stopped, rather than spend weeks on a breakpoint with no users behind it.
Impact
Time to locate a specific upload fell 71%.
-
71%
Faster to locate a specific batch of product.
Measured: instrumented task timing from first post-login click to batch open. Median across all enterprise accounts, 30 days before launch vs. 60 days after.
-
4.2×
Weekly catalog sessions per merchandising seat.
Measured: unique authenticated sessions divided by active seats, same windows, Lily internal accounts excluded.
-
−38%
Support tickets tagged "catalog."
Measured: Zendesk volume per 100 accounts, quarter over quarter. Tag was already in use before the redesign, so the comparison is like-for-like.
Reflection
The inbox frame was right, and I found it in week six by asking how product gets to Lily instead of how it is stored — a question I should have asked in week one. What I would redo is the archive rule: we shipped manual archiving because automatic felt risky, and two years on every account carries thousands of batches nobody will ever open again. Safe defaults still accumulate.