top of page

DESIGN SYSTEM · IBM

Cloud Object Storage Browser

From a product-specific fix to a reusable component shipped into IBM's Carbon design system.

ROLE

Design Lead

TOOLS

Figma, Adobe Illustrator

DURATION

4 months

OUTPUT

Carbon design system component

IBM COS Hero.png

I found the problem. I also built the solution.

OVERVIEW

While redesigning IBM Cloud Data Engine, I noticed something: every IBM product that integrated with Cloud Object Storage had its own ad-hoc implementation of the same basic browsing interaction. The result was a fragmented, inconsistent experience — users trying to locate a storage bucket in one IBM product encountered a completely different interaction pattern in another.

Rather than solving it just for Data Engine, I made the case for a shared component, one that could be adopted across IBM's product suite and integrated into Carbon, IBM's internal design system. This case study is as much about design system thinking and cross-functional advocacy as it is about UI design.

Design system contribution
Cross-product consistency
Component documentation
Stakeholder alignment

MY ROLE

How this started

I was the design focal for this project from inception, which means I both identified the need and drove the solution. This wasn't a project handed to me by a product manager. I surfaced it, scoped it, got stakeholder alignment, and led the design through to design system integration.

The dual audience for this project, end users who need to browse COS intuitively and product teams across IBM who need to integrate the component reliably, shaped every design decision I made.

USERS

Designing for SQL developers in a data lake context

The primary user persona for the COS Browser within IBM Data Engine is Jenny, an SQL Developer working with data lakes.

COS Persona.png

Jenny's job

Jenny writes SQL statements to prepare unstructured or messy data for analysis. She works with ad-hoc queries to validate results, then automates them via API. A key part of her workflow involves defining metadata table structures for data stored in Cloud Object Storage, which means she needs to navigate COS frequently, within the context of her existing workflow.

KEY INSIGHT

Jenny doesn't want to leave her current task to manage storage. She wants COS browsing to be an embedded capability within the tools she's already using, not a context switch.

RESEARCH & BENCHMARK STUDY

Three things breaking the experience

Before designing, I spoke directly with development stakeholders across multiple IBM products to map their COS integration patterns, then ran an initial benchmark study. Three issues surfaced consistently.

01 — Discoverability failure

Users couldn't identify what data was queryable from COS. The COS URI-based querying model was unfamiliar — they expected named tables, not storage paths.

A Hopscotch tour existed to surface helpful SQL sample statements, but it failed to trigger reliably, hiding useful features behind a broken entry point. The product had helpful features that users never discovered.

03 — Broken onboarding

"Include a UI element like a side panel that enables users to connect to resources and find data they can query, similar to what AWS Athena and Google BigQuery offer."

— Stakeholder research synthesis

[ Benchmark study findings ]
Annotated user flow with pain points highlighted

COS Research.png

02 — Missing resource explorer

AWS Athena and Google BigQuery both offer persistent side panels for browsing connected data sources. IBM offered nothing comparable, leaving users working blind.

DESIGN APPROACH

Component-first thinking

The core design challenge was not just creating a good browsing UI, it was designing something flexible enough to work across IBM's product ecosystem, while remaining consistent and predictable for users.

The browsing model

Depending on the use case, a user might only need to select a storage bucket, or they might need to navigate all the way down to specific objects or prefixes within a bucket. I designed the component to be depth-configurable: product teams integrating it can specify whether to stop at bucket level or allow full object/prefix exploration. All text strings are also fully customizable per product context.

[ Browsing hierarchy — bucket → prefix → object navigation ]

tearsheet.png

I established two non-negotiable principles from the start:

System-compliant

AWS Athena and Google BigQuery both offer persistent side panels for browsing connected data sources. IBM offered nothing comparable, leaving users working blind.

Context-agnostic

Users couldn't identify what data was queryable from COS. The COS URI-based querying model was unfamiliar; they expected named tables, not storage paths.

Four variants, one set of rules

IBM's Carbon design language defines specific UI containers for different interaction contexts. I designed four variants of the COS Browser, each with explicit usage rules, not guidelines, to ensure the component was used correctly across products.

COMPONENT VARIANTS

VARIANT

WHEN TO USE

CONSTRAINT

Modal

Side panel

Tearsheet

Inline

Bucket-level selection only, lightweight context

Bucket-level selection only, lightweight context

Layered workflows where a tearsheet is already active

Embedded within a page configuration flow

Cannot go deeper than bucket level

Cannot be used when a tearsheet is already open

Only valid stacked above another tearsheet

No overlay behavior, fully in-context browsing

WHY STRICT RULES MATTER

A shared component that's misused by product teams creates the same inconsistency problem it was designed to solve. Usage rules are part of the design.

COS Variants.png

Tearsheet

Side panel

Side panel

Inline

DE3SIGN SYSTEM INTEGRATION

Shipping into Carbon

Getting a component into IBM's Carbon design system is not just a design exercise, it's a cross-functional negotiation that requires treating the design language team as a distinct stakeholder with real constraints.

I produced a full documentation package that covered:

Component anatomy — labeled breakdown of every part with naming conventions aligned to Carbon standards

Usage guidelines — explicit do/don't patterns for each variant, written to prevent misuse by product teams unfamiliar with the nuances

Layout specifications — exact spacing, hierarchy rules, and customization parameters

Edge case behavior — empty states, long bucket names, loading states, and permission errors

[ Component anatomy diagram ]

Labeled breakdown of every part with Carbon naming conventions

Stuff - big.png

[ Do/Don't usage guidelines ]

Modal variant do/don't examples from the final documentation

Stuff - big-1.png

KEY LEARNING

Designing for a design system requires a different kind of empathy, not just for the end user, but for the developers and designers who will implement the component months or years later, without you in the room. Documentation is part of the UX.

TESTING FRAMEWORK

Setting up the next validation cycle

After delivering the component to Carbon, I defined a structured testing plan for product teams integrating the component in their own contexts. The framework covered four dimensions:

Discoverability

Can users find the component within the page context of the specific product they're using?

Task success

Can users complete the COS selection task i.e bucket, object, or prefix, without assistance?

Efficiency

Does the component reduce time-on-task compared to what existed before?

Information clarity

Is what's displayed sufficient for users to make confident selections?

This framework was documented and handed off as part of the design system package, so individual IBM product teams integrating the component would have a ready-made validation plan for their specific implementation context.

REFLECTIONS

What I'd take forward

The most important skill this project demanded was knowing when to zoom out. It would have been easy and faster to solve the COS browsing problem just for Data Engine. But the underlying issue was systemic, and a product-level fix would have left the broader ecosystem just as fragmented.

Advocating for a design system component requires a different kind of communication than advocating for a feature. You're not just persuading a product team, you're making a case to the stewards of a shared standard. Learning to speak that language, and to treat Carbon compliance as a constraint that makes the design better rather than just harder, was the defining growth area of this project.

bottom of page