Case study
The Command Filter System
Agents needed action-oriented views of their contacts that our legacy UI couldn't support. I designed a new advanced filter tool and defined the patterns and components that the rest of the platform adopted.

Following the initial launch of the Contacts application, user feedback indicated a clear need for enhanced search and filter capabilities. Agents required action-oriented views of their database, but the existing filter drawer relied on a patchwork of legacy components that were not built to support advanced rule-building.
When advanced filters became a priority, my PM and I took the opportunity to modernize the entire filtering architecture. With our development team ready to build and our new XDS design system primitives recently published, we had a window to replace the legacy filters with a modern, platform-wide standard.
This study outlines how I defined and designed the filter patterns and components in coordination with the XDS design system.
Designing advanced filters
My goal was to provide access to advanced logic without overcomplicating the basic filtering experience. After benchmarking against other real-estate CRMs and modern enterprise applications, I evaluated three primary approaches:



While the Integrated and Unified options offered more visibility, they risked burdening users who only required basic functionality. I recommended the Mode-Based approach. It was the least disruptive path and could evolve into the other approaches later if needed. It also allowed us to ship a standalone basic filters experience across the platform.
Translating complexity
A core design challenge was aligning advanced logic functionality with user mental models. While KW agents had clear use cases for advanced filtering, they (generally) did not operate in code. Early research showed our agents preferred when filters read as natural language.
I opted for a design that allowed the user to construct rules by filling in sentences. A horizontal layout aligned with the reading model and gave the vertical space necessary to stack three or four complex rules without excessive scrolling.

I defined the conditional options for every type filter in the Contacts application — from date-based logic (within last/next) to multi-select groupings (includes any, includes all). I maintained comprehensive documentation for reference in stakeholder reviews and as product requirements.

Building the system
Component and pattern documentation
While designs for the advanced filters were refined, the Contacts team started building the basic filter components. Beyond delivering filters for Contacts, we committed to creating a component library that other Command teams could use in their applications.
I organized the basic filtering UI into its building blocks and documented requirements for over 15 components, including interaction specs and design rationale. Some examples below:






Contacts filters
Once the general components were in place, we used those to build the Contacts filters. I provided an additional 22 pages of requirements documentation for each basic filter and the full advanced UI. Some examples below:






System impact
The new Contacts filter experience successfully launched with 90% user satisfaction, but the true impact was the pattern’s adoption across the platform.
We built the components in a separate Storybook while the XDS team gained the capacity to integrate them. Product teams pulled from the Contacts repo for two years before it became an official standard. By the time XDS officially migrated these components into the library, they were already well-established across Command.