F5XC – Filter Reusability

Smoothing operation and communication for resolution validation.

Project Type:

Design at F5

Duration:

Jul. – Nov. 2023, Sep. – Nov. 2024

Members:

7 designers, 19 developers, 1 PM, 2 technical account managers, 2 security support engineers, 1 solution architect, 2 consulting managers, 3 data scientists, 1 technical writer

My Role:

UX design lead, co-working closely with PM, design system (DS) team, and multiple parties and stakeholders.

Impacts:

Empowered 1,000+ enterprise clients worldwide to reuse filters and collaborate efficiently with F5 Managed Services.

Project Vision

F5XC (Distributed Cloud) is a SaaS-based security, networking, and application management console, on which we have multiple workspaces with different types of dashboards to support various protection and investigation. In each dashboard, users could utilize filters to narrow down the data and focus on a particular part that they care about most. In the original system, we did not have functionalities to support users reapplying a set of filters or sharing a filtered view, thus causing inconvenience in the communication between security engineers and technical account managers. We tried to solve this issue starting with the Bot Defense workspace, and figured out a new design pattern as phase one that could be easily adjusted and adopted to all the workspaces in the console.

Challenges

Figure out a new design pattern that could meet the needs of Bot Defense users but also be applicable to other workspaces in the console.

Address time expiration and data missing edge cases.

Tackle dynamic filter values which would change based on configuration.

Work around the API constraints which are unable to present accurate missing information right on some pages, and unable to apply non-existing filter values.

Make minimum but reasonable changes in phase one that could satisfy the functionality and get all stakeholder approvals to roll out.

Filter Reusability Overview

Design Process

Design Process

Project Goals & Design Requirements

Clarify target user goals, workflow, pain points, and reshape project scope.

F5XC (Distributed Cloud) is a global app delivery and security platform that helps teams deploy, manage, and protect applications across multi-cloud and edge environments. Within that, Bot Defense is a key product area that protects internet applications from automated attacks. It uses telemetry from web and mobile endpoints to identify malicious bots, and applies configurable mitigation actions (like blocking or redirecting traffic) before it ever reaches the application.

Bot Defense was originally part of the SHAPE Security platform. As part of a broader business initiative, we migrated it into the F5XC console to give users a single pane of glass for accessing multiple services. Along the way, we reworked the information architecture, improved data organization and presentation, and introduced new features to better support self-service. Filter reusability is one of those key improvements.

Service Migration & Improvement

I had the opportunity to help envision improvements to the Bot Defense service from the ground up, guided by user journey research across three key personas, along with feature benchmarking and competitive analysis.

Feature Benchmarking

We identified three primary user types: the Executive Sponsors (CISO), Application Owners, and Security Engineers. Among them, Application Owners and Security Engineers are the most hands-on – they regularly monitor and analyze traffic, use dashboards and reports, and often collaborate with Technical Account Managers (TAMs). Because of that, they are the key users who need flexible ways to filter and narrow down data based on their specific needs.

Bot Defense Personas

Based on the analysis, I mapped out an integrated end-to-end user journey – starting with onboarding, including account setup, configuration, and threat briefings. From there, users move into exploring data summaries and diving deeper to uncover insights. As they progress, they review reports for specific use cases, investigate events, and configure policies to mitigate threats.

Across the later stages (from value awareness to diving deeper, reporting, and investigation), users need to continuously narrow down and analyze large volumes of data. It is where we identified the opportunity to enable filtering that is not only powerful, but also reusable and shareable, to better support the workflows.

User Flow and Roadmap

In F5XC, we already had filtering capabilities, but there was no way to reuse filters or leverage filters created by others. This led to inefficient workflows and added friction in communication between TAMs and clients, as well as among client-side security teams. In contrast, the legacy SHAPE Security platform did support reusable filters, but lacked proper management, like the ability to delete expired ones. Thus, to support more focused analysis, smoother collaboration, and quick access to saved views, we defined two primary goals for this project:

Enable users within the same tenant to save, share, and reuse filters, making collaboration between TAMs and clients much smoother.

Introduce proper lifecycle management by allowing users to delete outdated or invalid filters.

Filter Original

Through iterative design and close collaboration with PM, I refined the project scope and prioritized the key functionalities. For phase one, we focused on:

Saving filters, including both “save” and “save as” logic.

Accessing saved filters.

Applying saved filters, with clear handling for expiration scenarios.

Deleting saved filters, with proper deletion logic in place.

Design Challenges & Strategies

Co-work closely with project stakeholders to make comprehensive design decisions.

During ideation and iteration, I encountered several challenges, the most complex and interesting of which included:

Constructing new design patterns.

Handling information presentation and control.

Addressing time expiration situations.

Addressing filter value missing situations.

Tackling edge cases related to deleted filters.

The details of each will be introduced and explained in the sections below.

To tackle the challenges and facilitate collaboration and communication with project stakeholders, I implemented several strategies throughout the process:

Iterating on the information architecture design to accommodate the new feature and collaborating with the design system (DS) team to gather feedback and gain a broader perspective for making more comprehensive design decisions to ensure alignment and scalability.

Implementing participatory design through a bi-weekly recurring meeting to clarify requirements and user needs while collecting feedback from our subject matter experts (SMEs) (including technical account managers (TAMs), data scientists, solution architects, PMs, etc.), whose insights are closely aligned with those of our clients/end-users.

Employing visualizations to enhance communication with all project stakeholders, such as flowcharts to explain interaction logic and tables to clearly present different component states.

During the early ideation phase, I also explored a range of design patterns for inspiration and identified several key ideas to incorporate:

Enabling users to apply, adjust, and save filters as new versions.

Adding descriptions for better context.

Organizing saved filters with tabs.

Introducing search to quickly locate saved filters.

Through recurring stakeholder sessions and Maze testing, I gathered feedback from over 20 SMEs to help refine the project scope and drive decisions around interaction logic and information architecture.

Design Strategy Project Stakeholders Filter Inspiration Moodboard

Design Challenges & Iteration – New Design Pattern

Develop feasible and scalable solutions to accommodate new functionality across the platform.

There was no existing component to support this functionality, so we needed to create a new design pattern that worked for Bot Defense and could scale across other XC workspaces.

I started by exploring ways to reuse existing UI elements.

Ideate potential solutions to accommodate new functionality.
Number 1

My exploration began with using the filter icon or the “more actions” control to trigger a dropdown menu. During iteration, I realized users could already share filtered views simply by copying the browser URL, so a dedicated “copy to share” action wasn’t essential. I also received feedback that users wanted clearer visibility of which filter was currently applied, so I explored surfacing the applied filter name and status directly in the first layer of the UI, and continued the action control iteration. I also reduced the steps required to access saved filters by introducing a dropdown that displayed filters available for the current page. In parallel, I refined the save logic with role-based permissions – only filter owners and admins could update an existing saved filter after editing, while other users could only “save as” a new version.

Ideate different treatments for edited part of saved filters.
Number 2

I later explored alternative information architectures for the filter feature, along with different visual treatments for edited saved filters. However, after consulting with the DS team, I realized the change would have a much broader impact than expected. It required deeper exploration, which would significantly delay the release timeline, and likely couldn’t be rolled out consistently across other XC workspaces at the same time. This would create potential inconsistencies in the platform experience. As a result, we decided not to pursue this direction for phase one, though it remained a strong candidate for future phases or a dedicated design system initiative.

This experience also reinforced an important mindset for me: although I was directly responsible for Bot Defense, my design decisions also impacted the broader XC ecosystem. I proactively aligned with my PM on the importance of designing beyond a single workspace, which further shaped my approach of involving the DS team early and making decisions from a more scalable, system-level perspective.

Show all key controls concisely in the first layer.
Number 3

Continuing the exploration, I moved the “Saved Filters” control into the first layer to make the feature more visible and easier to access, while also giving the “Save” action greater prominence. I also explored consolidating the “Update” action with filter access interactions, and placing the “Save Filter” and filter access controls closer together to strengthen their relationship and improve usability. To maintain consistency with other XC workspaces, I additionally explored using the “More” menu to house actions such as “Show/Hide Filters.” Eventually, we found a way to surface all key controls within the first layer in a cleaner and more concise layout. To make the experience more user-friendly, I also introduced new actions such as “Return to Previous Status” and “Restore Defaults.” Based on feedback from other designers, I categorized saved filters into “My Filters” and “Others” to improve discoverability and browsing efficiency.

At the same time, I refined the underlying logic with the PM and SMEs: Users within the same tenant could access shared saved filters. The namespace-based data isolation was preserved to respect separation across business units. In addition, each dashboard or report page would only display filters relevant to that specific context, helping users stay focused on their current workflow.

Design Challenges & Iteration – Information Presentation & Control

Streamline filter access, application, sharing, and management workflows.

To support reusing filters, we needed a seamless way for users to access previously saved filters for quick application and sharing. To keep the system maintainable, we also introduced deletion capabilities for outdated and invalid filters.

Ideate filter access and detail presentation.
Number 1

To support this workflow, I introduced a side modal in each dashboard and report page to present saved filters. The list was context-aware — showing only filters that could be applied to the current page — helping users stay focused and reducing unnecessary noise. During iteration, I added a “Description” field so users could provide context and quickly understand the purpose of each saved filter. I also introduced a “Created by” column, since saved filters were visible to all users within the same tenant.

I explored multiple approaches for information architecture and interaction design along the way. One idea was enabling cross-page filter access through a dropdown menu. It was suggested during a design review. However, after aligning with the PM and SMEs, I realized users rarely needed to switch pages in that moment, and the interaction also conflicted with design system guidelines, so we decided not to pursue it. I also iterated on how users could view complete filter values. I initially explored accordions, but the component was being phased out due to long-scroll usability issues elsewhere in the system. I then tested hover-based previews, but that conflicted with existing tooltip usage for truncated names. Eventually, I introduced a click-to-view detail pattern using a multi-layer modeless experience, allowing users to focus on filter details such as the name, description, and full filter values. In parallel, I tested multiple layout and learned through SME feedback that a wider layout was preferred because it could accommodate more content more effectively. Finally, I organized filters into “My Filters,” “Others,” and “Expired” categories to improve navigation and easier access.

Streamline filter apply and share interactions.
Number 2

For the filter apply interaction, my initial design used the filter name itself as a hyperlink to apply the filter. However, this pattern did not align with our design system guidelines, so I revised the interaction by introducing a dedicated “Apply” button within the actions column of the table.

There was also active discussion around the sharing experience. Although users could technically share a filtered view by copying the browser URL, the workflow wasn’t very intuitive or convenient.  I advocated for a dedicated “Copy to Share” action using existing components and moved it into the first layer to make sharing faster and more discoverable.

Tackle filter deletion and cleanup workflows.
Number 3

As more controls moved into the first layer, I realized the interface was becoming visually crowded. To simplify the experience and support future scalability, I moved deletion into a centralized Management page where users could view and manage all filters across pages within the same tenant. In later iterations, I also refined the deletion logic: Users could only delete their own filters, while admins had permission to delete any saved filter.

Define comprehensive filter access and application logic.
Number 4

As the iteration progressed, I further refined the filter access and application logic. Saved filters were scoped to their dedicated namespaces to respect data isolation across different business units,  and shared URLs would preserve the associated namespace context. I also polished several interaction details — renaming the feature to “Saved Filters” to make it more intuitive, updating action placements to align with the latest design system patterns, and adding bulk deletion to help users manage multiple filters more efficiently. To prevent conflicts and confusion, I decided not to allow multiple saved filters to be applied simultaneously on the same page. I also explored adding distinct visual treatments for the currently applied filter, but implementing that required additional API support, so it was deferred beyond phase one.

Another major area I pushed on was naming flexibility. I advocated for removing unnecessary input restrictions and allowing users to include uppercase letters, spaces, and special characters in filter names. Initially, the Bot Defense engineering team pushed back due to technical constraints and prioritization concerns. However, when other XC product teams later adopted the feature and supported the change, I used that momentum to drive alignment back into Bot Defense. In the end, we established a more user-friendly naming system while maintaining uniqueness by allowing each filter name to be used only once within the same namespace.

Design Challenges & Iteration – Time Expiration Situations

Address conflict between limited data retention and custom time range selection.

The system only retains data from the past 30 days, meaning users can only access information within that window. Because of that, we needed to carefully handle scenarios where saved filters referenced outdated timeframes, resulting in partially or fully missing data.

Time Selection Types

There were two types of time selections in the system: The generic timeframes (relative time selection, such as “Past 7 Days”), and the custom time ranges, where users could select a specific period within the past 30 days.

Ideate time expiration message presentation..
Number 1

My initial proposal handled these two cases differently: For generic timeframes, I treated them as dynamic and reusable — for example, “Past 7 Days” would always represent the latest rolling seven-day window, so these filters would never expire and could always be reapplied. For custom time ranges, the situation was more complex. If part or all of the selected timeframe fell outside the 30-day retention window, the filter could return incomplete or invalid results. To prevent users from being misled, my initial approach was to disable those expired filters entirely, including their apply and copy actions.

Based on that logic, my initial design used warning icons with tooltip in the filter list to indicate expired timeframes. However, during iteration, I realized this approach relied on real-time API calls, and we couldn’t reliably determine a filter’s expiration status directly within the list view. This led me to rethink the interaction and collaborate with engineering on a more feasible solution. Eventually, I utilized a dedicated tab to categorize expired filters, and paired it with clear expiration messaging to help users quickly understand why those filters were no longer applicable.

Design Challenges & Iteration – Filter Value Missing & Data Missing

Handle dynamic filter keys and values caused by evolving configurations in saved filters.

Filter keys and values were inherently dynamic and could change as configurations evolved. This meant a previously saved filter might later contain keys or values that no longer existed, so we needed a clear way to handle and communicate these invalid states to users.

Either automatically remove invalid filter values or disable the entire filter set.
Number 1

In my initial exploration, I considered two approaches: Either automatically removing invalid filter values while notifying users of the changes, or disabling the entire filter set and displaying an error message directly in the filter list view. However, during iteration, I realized both approaches relied heavily on real-time API validation, making them impractical within the existing technical constraints.

Mark the missing values in both filter detail view and result page.
Number 2

I then shifted the handling into the filter detail view instead. After validating with SMEs, I believed the better experience was to still allow users to apply the filter and view the available results, rather than blocking them entirely. I explored marking missing values directly within the filter detail view, and indicating unavailable values again on the results page. However, after syncing with engineering, I learned that identifying exactly which values were missing required additional API calls, which would negatively impact system performance.

Display guidance messages on the results page to help users adjust invalid filters.
Number 3

Given that constraint, I explored alternative approaches – such as allowing filters to be applied while automatically omitting invalid values and notifying users afterward, or providing a general warning message and guiding users to the filter detail view for more context. I also considered surfacing guidance directly on the results page to help users adjust invalid filters. However, I later realized these approaches were also infeasible due to the same API call constraints.

Utilize disclaimer and allow users to apply.
Number 4

I further explored giving users two options: applying the original filter set as-is, or applying the filter while omitting invalid values. However, after confirming with engineering, I learned that even when invalid values were not actually applied, they would still appear in the filtered results view. Since we could not automatically remove those missing values from the UI, the experience risked becoming misleading and confusing for users. As a result, I ultimately introduced a disclaimer-based solution as a pragmatic workaround to address the API limitations while still keeping users informed.

Design Challenges & Iteration – Deleted Filters

Address scenarios where the UI becomes out of sync with the latest system state.

During implementation, we discovered edge cases where the UI could become out of sync with the latest system state. For example, if User A deleted a saved filter while User B still had its detail view open without refreshing, User B could unintentionally apply or share a filter that no longer existed.

The places where the UI could become out of sync with the latest system state.

To address these scenarios, I worked with the team to define safeguards such as error messaging and refresh handling to keep users informed and prevent invalid actions.

Map out four key scenarios.
Number 1

I started by mapping out four key scenarios and exploring solutions for each. Throughout the process, I continuously involved the DS team in ideation and iteration to ensure consistency and bring in broader perspectives. I also partnered closely with engineers to validate feasibility and investigate technical constraints, ensuring the solutions were scalable and implementable.

Convey current situations and react effectively.
Number 2

My initial idea was to show an error message when users applied a deleted saved filter, and automatically refresh the page. However, after syncing with engineering, I learned the system could not detect deletion at the moment of application without making an additional API call, which would lead to a legacy issue.

We then co-created a new proposal: triggering an API call to verify whether the saved filter still existed after a filter was applied. If it has been deleted, users would be prompted to refresh and retrieve the latest state. If they chose not to refresh but modified the filter, the “Update Saved Filter” option would be disabled, while “Save As” would remain available.

Although this solution was workable, we believed a pre-check experience would provide a better experience. The DS team and I re-aligned with engineering to evaluate the cost of an additional API call, and found it would introduce roughly 2–4 seconds of latency (server response time). To maintain a smooth experience, we might need a loading state (like a spinner) during the wait.

Provide feasible solutions based on different scenarios.
Number 3

After another sync with backend engineers, I arrived at a solution that is both feasible and more user-friendly: If users are simply viewing the page with no changes, no message is shown. If they edit the filters and choose to save as a new one, we allow it without interruption. If they attempt to update an existing filter, we notify them that the original saved filter no longer exists and guide them to use “Save As” instead. If users land on a page via a URL linked to a deleted saved filter, we still render the filtered view as-is, treating it as a new filter state, while informing users and offering the option to save it as a new filter.

Implementation Support

Cater and visualize all situations to ensure smooth cross-team communication and successful implementation of design.

To ensure smooth implementation, I finalized the interaction flow to clearly define the end-to-end user journey for engineering. I prepared a comprehensive Figma handoff with detailed documentation to support development. I also worked closely with the DS team to file tickets for new patterns, and maintained continuous alignment with the DS team, engineers, and PMs to resolve edge cases as they emerged.

Implementation Support Materials – Confirmation and Error Messages

At the time, our team was experimenting with a new hand-off approach to streamline communication and collaboration between design and engineering. By taking the initiative as the first project to adopt it, I helped establish a new standard for execution quality. My handoff documentation was later recognized as a model example and incorporated into the design operations guide for other designers to reference and follow.

Implementation Support Materials – Handoff Notes

After this launch, I scaled the feature across three additional F5XC workspaces, driving both design and implementation consistency. In addition to addressing workspace-specific challenges, I took the opportunity to refine the feature during the process, and re-engaged with the Bot Defense PM and development team to ensure new changes were properly ticketed and the previous design were updated accordingly to maintain consistent logic and visual coherence across the platform.

Final Design

Demonstrate the core functionalities of filter reusability.

Below are the hi-fi prototypes of the phase one design for filter reusability:

Save Filter
Number 1

In F5XC, users can filter and narrow down the data displayed in dashboards and reports. These filters can be saved for future use, enabling users to quickly revisit specific views. When saving a filter, users can assign a name and description for easier access and reference later on.

Access Saved Filters
Number 2

The name of the currently applied filter is displayed in the saved filter access control. Once a filter is saved, its status is updated accordingly. Users can use the dropdown menu to access previously saved filters. By clicking "View More Details," they can view additional information about filters, including their own, those created by others, and any that have expired due to the system’s data retention policy. Users can also copy the URL to share or apply filters directly from this page.

Edit and Update Filters
Number 3

Users can edit and update their previously saved filters. If a filter was created by the user, they have the option to either update the existing filter or save the changes as a new one.

Manage Filters
Number 4

Users can also use the Saved Filters Management page to access all filters across pages within the same tenant and namespace. Filters that reference a custom time range beyond the past 30 days may produce inaccurate results and cannot be reapplied. Users can delete their own filters, while admins have the authority to delete any saved filters to help clean up outdated or unused entries in the system.

Impacts

Enhance efficiency of resolution validation and set up model for team collaboration.

The new feature initially benefited 30+ global enterprise clients, enabling seamless reuse of previously applied filters and smoother collaboration with internal teams and F5 Managed Services for faster resolution validation.

Through this project, my cross-functional team and I established a collaboration model that enabled close partnership with the DS team. This allowed me to leverage their expertise, gather valuable input, and approach challenges from a system-level perspective. The model is reusable and can be applied by other teams in future projects.

Impacts – Coworker Comments on Establishing a Collaboration Model

I also shared this experience with other F5 designers through all-hands sessions and 1:1 discussions, highlighting the challenges I faced, the strategies I used to drive cross-functional collaboration, and how I worked through constraints to deliver a stronger user experience.

Impacts – Building Functionalities in Other Three Workspaces

Beyond the initial implementation, I later led the effort to scale and localize the capability across other product areas (e.g., WAAP, MCAC, DA, etc.) within the XC platform, benefiting 1000+ global enterprise clients. During this process, I refined and enhanced the feature, and re-engaged with the Bot Defense PM and development team to support ongoing collaboration and feature updates.

My handoff file for this project was also recognized as a model example and incorporated into our design operations guide to elevate standards across the design team.

Reflection

Limitation

Only core functionalities were built in phase one for the four workspaces.

API constraints lead to inefficient and inaccurate communication of value missing status.

Next Step

Revise API to support easy tracking and presenting missing values in saved filters.

Support editing right in the detail view when saving filters or after saving them.

Support filter duplication and editing.

Polish info architecture of the global bar and visual treatments for different statuses of saved filters.

Improve filter functionality such as advanced filtering.

What I Learned

Make stakeholders with different priorities aligned.

Make new component creation visible to the development team as early as possible.

Ally with PM to push for changes.