← All Work

Design Systems / FinOps

Filter Consistency

Four different filter implementations across the same product. Different locations, different behaviors, different visual treatments — all solving the same problem, none of them solving it well. This is the story of replacing four patterns with one.

Role
Design Lead, Product Manager
Client
CloudBolt Software
Year
2023
Outcome
4 patterns → 1 unified system
Filter Consistency — unified filter component applied to Cost Reports

Results

80%
Of customers gave positive feedback
60%
Decrease in page drop-offs — from ~52% to ~21%
25%
Decrease in time on task — from prior baseline
4→1
Filter patterns unified into one system

Context

The same problem, solved four different ways.

CloudBolt's FinOps product had grown quickly — and like most fast-growing products, different parts of the interface had been built by different teams at different times. The result was a filter experience that changed meaningfully depending on which page you were on.

The original request was framed as a UI cleanup. But filter inconsistency isn't just a visual problem — it's a trust problem. When the same action behaves differently on different pages, users stop trusting the interface. They second-guess their inputs, re-apply filters they've already set, and drop off when the complexity exceeds their tolerance.

The solution couldn't be four separate fixes. It had to be one system — a single reusable component that could handle every filter context in the product without requiring custom engineering work each time.

The same action, behaving differently on every page.

Observation across customer interviews and support tickets — 2023

Challenges

The hardest part of this project wasn't the design. It was getting four engineering teams — each with a working implementation and a legitimate reason to keep it — to agree to replace their approach with someone else's.

Organizational

  • Four engineering teams, each owning a different page — each with a working implementation and legitimate reasons for keeping it
  • No shared component infrastructure — every filter pattern was built in isolation with its own logic
  • Getting alignment required presenting the data before showing any designs

Technical

  • No existing component library to build on — the shared component had to be designed and built from scratch
  • Each page had different filter requirements — the component had to be flexible enough to handle every context without bespoke code
  • Rollout had to happen across four pages simultaneously to avoid a period of partial inconsistency

The Problem

Before designing anything, I audited every filter implementation in the product. Four pages. Four distinct patterns. Zero shared behavior.

01

Cost Reports

Cost Reports — before filter redesign
  • Filters stacked vertically — consumed significant page height before any content appeared
  • No way to collapse or hide filters once applied
  • Applied filters not visible in a summarized state
  • Filter ordering arbitrary, not aligned to task priority

02

Dashboard

Dashboard — before filter redesign
  • Filter placement different from Cost Reports — top of page vs. side panel
  • Filters pushed content further down the page as more were applied
  • No visual indication of which filters were active

03

Service Adviser

Service Adviser — before filter redesign
  • Third distinct filter layout — neither matching Cost Reports nor Dashboard
  • Scrollable filter boxes with small tap targets
  • Filter state reset on navigation, forcing users to re-apply on return

04

Service Manager

Service Manager — before filter redesign
  • Most visually inconsistent of the four — different button styling, different positioning
  • Admin and user filter options mixed without clear hierarchy
  • No filter chip summary — users had to expand each section to see what was applied

Design Direction

Before sketching, I looked at how well-designed filter systems handled the same tradeoffs — particularly around progressive disclosure, applied state visibility, and space efficiency.

Filter placement — top vs. side tradeoff exploration

Top placement gives content more horizontal room but pushes it below the fold. Side placement keeps filters always visible but compresses the content area. Neither worked as-is — the answer was a collapsible top bar that collapses out of the way once filters are set.

Collapsible by default

Filters should take up space only when the user needs them. Collapsed state shows applied filters as chips — enough context without occupying the viewport.

Applied state always visible

Even when filters are collapsed, the user can see at a glance what's active. No more "why are my results filtered?" confusion.

One component, every context

A single reusable component with configurable sections — not four bespoke implementations. Engineering builds it once; design controls it through props.

Consistent placement

Same position on every page. Users develop a mental model once and it works everywhere — not just on the page where they learned it.

Process

The design started on paper — working out the collapsible behavior and the applied-state chip pattern before introducing any visual detail.

01 — Sketching

Sketches — collapsible filter layout explorations

Early sketches focused on two questions: how does the collapsed state communicate what's applied, and how does the expanded state avoid overwhelming users with every option at once? The answer to both was grouping — sections that open independently, with chips persisting in the closed state.

02 — Iterating

Iterating — filter component design iterations

With the structural decisions settled, iterations focused on the details that determined usability: chip truncation at different filter counts, the expand/collapse affordance, and how applied state rendered across varying filter combinations.

03 — Validation

Validation — customer feedback session

I validated the filter placement directly with customers and sales engineers — specifically on the Cost Reports page, the most heavily filtered in the product. Their feedback led to further simplification: all filter sections collapsed into a single line, making the default state as compact as possible.

Filter grouping — iterating during validationFilter grouping — validation iteration 1Filter grouping — validation iteration 2

The System

One component. Every context.

The output wasn't just a set of redesigned pages — it was a contribution to CloudBolt's component library. Engineering builds the component once; product teams configure it through props. New pages get consistent filters without any bespoke design or engineering work.

This was the moment the project stopped being a cleanup and became an investment. Every future page in the product inherits the fix automatically.

Reusable filter component — design system

Collapsed

Filter component — collapsed state with applied chips visible

Expanded

Filter component — expanded state showing filter sections

Applied Across the Product

The same component, deployed to four pages. Each one shows the same pattern — but the impact varies depending on how far the original was from the standard.

01

Cost Reports

The natural starting point — the most complex and heavily filtered page in the product, and the one where filter friction was most felt. All filters collapsed into a single horizontal bar. FinOps analysts who had been re-applying the same filter combinations on every visit could now see their active state at a glance without reopening the controls. Establishing the pattern here first meant every subsequent page had a reference to point to.

Cost Reports — after

02

Dashboard

Dashboard content had always competed with an always-open filter stack for vertical space. The collapsible bar reclaimed that space immediately — charts and widgets were visible from page load without scrolling. Filter state persisted across navigation for the first time, removing the need to re-apply context after drilling into a view and returning.

Dashboard — after

03

Service Adviser

The most significant engineering result: zero incremental code. Service Adviser previously had its own custom filter logic built entirely outside any shared system. The unified component's configuration handled the context automatically — a different page, a different use case, no custom work. For engineering teams already stretched across four product surfaces, inheriting the fix without writing it was the result that earned lasting buy-in.

Service Adviser — after

04

Service Manager

The page where the change was most visible. The old Service Manager filter layout was the furthest from any recognizable pattern — different button styles, admin and user options mixed without hierarchy, no chip summary. Applying the unified component didn't just make it consistent — it made it usable for the first time. Same component, same behavior, zero custom code.

Service Manager — after
"I didn't realize how much time I was spending re-applying the same filters until it stopped happening. Same controls, every page — it just works."

FinOps Analyst, enterprise customer — post-launch

Reflection

What I Learned

The hardest part of this project wasn't the design — it was the change management. Four pages meant four engineering owners, each with opinions about why their implementation was the right one. Getting alignment required showing the data (drop-off rates, task completion times, customer complaints) before proposing a solution, not after.

Building this as a shared component rather than four individual fixes was a deliberate choice that required extra upfront coordination with engineering. That investment paid back immediately: when new pages needed filters, there was nothing to design. The pattern already existed.

This project also reinforced something I've seen repeatedly in enterprise products: inconsistency isn't usually the result of bad decisions. It's the result of good decisions made in isolation. The fix isn't to critique the past — it's to build the infrastructure that makes future isolation impossible.

Next Project

03

Chat Interface

AI Research & Design Exploration