HYD --:--

Work / Case 04, ZYOD (ERP)

Scalable ERP Filters

One filter pattern for the whole ERP. Four data types, visible tags, up to 80% less time to retrieve a view.

Remove a tag, or click one to edit it
Sales > Sales Order Export

Sales Order

4
TotalItems: 8 | USD: 215,400.00
GMV BookedQty: 46,000 | USD: 178,800.00
GMV InvoicedQty: 0 | USD: 0.00
GMV ActiveQty: 46,000 | USD: 178,800.00
SO-1234RaymondsVarunDraftToday4,20018,400.00
SO-1229RelianceVarunApproved2d ago12,50052,300.00
SO-1221SheinVarunApproved5d ago8,60031,200.00
SO-1209RaymondsVarunDraft12d ago2,2007,400.00
SO-1198SheinVarunApproved18d ago1,5005,200.00
SO-1187RelianceVarunApproved26d ago5,40019,900.00
SO-1183SheinVarunDraft27d ago3,10010,800.00
SO-1179RaymondsVarunApproved29d ago18,00070,200.00
Role
Product designer, filter pattern end to end
Context
Also part of the ERP tooling work for the fashion-manufacturing company in Gurugram. It sat next to the TNA, jobwork, and price variation projects, but the object was different: those fixed a record, this fixed the way every record is queried.
Scope
Shared filter component: column types, tags, interactions, reuse across modules
Timeline
Add real timeline (kickoff to rollout)
80%

less time, at most, to retrieve the view they came for

4

filter types supported: text, numeric, date, predefined lists

Add metricmodules shipped on this pattern
01 The Stakes / Problem

Every module solved this locally. Nothing matched the module next to it.

In an ERP, the filter is how work is found. Each team solved it locally: some screens had filters, some had half of one, some had a control that didn't match the next module over. If applying one is slow, people export to Excel. If a new module needs a filter from scratch, the system doesn't scale. It forks.

What was actually brokenPick a gap
The gapApplying a filter cost too much

Every module filtered differently, or not at all.

What answered itOne pattern, with the control that matches the column's data type
Goal

One pattern, used everywhere. Fast to apply. Impossible to forget what's on. Built around the column's data type, not whichever module owns the page.

Image placeholder: Original inconsistent, module-by-module filtering, for contrast
02 Your Thinking

Lock behavior by data type, then make the state impossible to hide.

02/Control by data type

Which control does this column get?

Drag or tap a field

Five columns from across the ERP. Pick one, then the control that fits its data.

Three locks, then the reason for all of themStep through it
Data type

Behavior is locked by the kind of field first: a buyer name, a quantity, a delivery window, a status.

Step 1 of 4

03 The Solution

Two layers: what you set, and what you see once it's set.

Which Northline orders are in production?Try both ways

An exported sheet. Tap every row that doesn't match to strike it out.

0 clicks. A spreadsheet, a pen, and patience.

Illustrative prototype with sample data. Try both methods and compare the click counts.
Try a range the wrong way round

Sales Order

4
TotalItems: 8 | USD: 215,400.00
GMV BookedQty: 46,000 | USD: 178,800.00
GMV InvoicedQty: 0 | USD: 0.00
GMV ActiveQty: 46,000 | USD: 178,800.00
SO-1234RaymondsVarunDraftToday4,20018,400.00
SO-1229RelianceVarunApproved2d ago12,50052,300.00
SO-1221SheinVarunApproved5d ago8,60031,200.00
SO-1209RaymondsVarunDraft12d ago2,2007,400.00
SO-1198SheinVarunApproved18d ago1,5005,200.00
SO-1187RelianceVarunApproved26d ago5,40019,900.00
SO-1183SheinVarunDraft27d ago3,10010,800.00
SO-1179RaymondsVarunApproved29d ago18,00070,200.00
“What kind of filter fits this data?”

Column-specific filtering

  • Text: Contains for the daily path, Exact Match for when “KM” shouldn't also return “KMS”
  • Numeric: greater than, less than, ranges, so “SOs over X units” doesn't need an export
  • Date: calendar range plus shortcuts like Last 7 days
  • Predefined lists: dropdowns for closed sets, so nobody types a string that almost matches
Remove a tag, or click one to edit it

Sales Order

4
TotalItems: 8 | USD: 215,400.00
GMV BookedQty: 46,000 | USD: 178,800.00
GMV InvoicedQty: 0 | USD: 0.00
GMV ActiveQty: 46,000 | USD: 178,800.00
SO-1234RaymondsVarunDraftToday4,20018,400.00
SO-1229RelianceVarunApproved2d ago12,50052,300.00
SO-1221SheinVarunApproved5d ago8,60031,200.00
SO-1209RaymondsVarunDraft12d ago2,2007,400.00
SO-1198SheinVarunApproved18d ago1,5005,200.00
SO-1187RelianceVarunApproved26d ago5,40019,900.00
SO-1183SheinVarunDraft27d ago3,10010,800.00
SO-1179RaymondsVarunApproved29d ago18,00070,200.00
“What's actually filtered right now?”

Tag-based filter visualization

  • Every active condition is a tag in plain language, not an icon that means “something is on”
  • Edit reopens it in place, × removes just that condition, Reset clears the view
Pick a column to filter by

Sales Order

4
TotalItems: 8 | USD: 215,400.00
GMV BookedQty: 46,000 | USD: 178,800.00
GMV InvoicedQty: 0 | USD: 0.00
GMV ActiveQty: 46,000 | USD: 178,800.00
SO-1234RaymondsVarunDraftToday4,20018,400.00
SO-1229RelianceVarunApproved2d ago12,50052,300.00
SO-1221SheinVarunApproved5d ago8,60031,200.00
SO-1209RaymondsVarunDraft12d ago2,2007,400.00
SO-1198SheinVarunApproved18d ago1,5005,200.00
SO-1187RelianceVarunApproved26d ago5,40019,900.00
SO-1183SheinVarunDraft27d ago3,10010,800.00
SO-1179RaymondsVarunApproved29d ago18,00070,200.00
“How much effort does using a filter take?”

Interactions around the control

  • Filtering and sorting feel like one family, because both rewrite the list in front of you
  • Apply, edit, and clear cut down to fewer clicks on purpose
  • Real-time validation stops a query that would return a silent wrong list
Image placeholderFilter component reused across ERP modules
“Does this hold up as the ERP grows?”

The architecture underneath

  • One modular component. Modules consume it; they don't restyle it.
  • A uniform experience without a design pass every time someone adds a column called “Buyer”

A merchandiser pulling delayed styles for one buyer in the last week is three tags, not a custom report. A planner clearing the view is one reset, not a memory test.

04 The Detailed Impact

80% less time, not a prettier chip.

Up to80%

less time to retrieve the view they came for

  1. 01
    Visible filters: people stop double-filtering and stop trusting a list they didn't mean to load.
  2. 02
    One pattern across modules: training and muscle memory transfer.
  3. 03
    Designed as a set: apply, edit, clear, and sort all take less effort.

I don't have a locked count of modules shipped on this pattern. If I get it, it belongs next to the 80%. Until then I'm not padding the hook.

05 Limitations & What's Next

Where the pattern goes from here.

  1. 01
    Advanced filters with group logic: AND/OR conditions, e.g. “Orders for Summer’24 AND Approved Stage OR Sampling Stage”
  2. 02
    Saved filter presets: reusable combinations for repetitive work like weekly production planning
  3. 03
    Global search integration: a unified search across modules
  4. 04
    Predictive filtering with AI: suggested filter combinations based on behavior and history