Case study Data Catalog Ataccama

Import metadata to platform. From a six-click, source-by-source journey to one shared surface.

Role
Product designer (intern) at Ataccama
Timeline
~3 weeks
Surface
Ataccama ONE · Data Catalog
Output
Figma · Engineering handoff

The Data Catalog is where it all begins.

Ataccama ONE is an enterprise data governance platform. The Data Catalog is where data stewards, analysts, and consultants discover what data the organization owns. Before they can govern data, they need to import its metadata, schema, types, structure, from a connected database.

It's a high-frequency action performed by the same handful of people, over and over. It was also one of the most fragmented flows in the product.

Six clicks. One source at a time. Zero visibility.

To import metadata, a user had to leave the catalog, navigate to a source, open its Connections tab, expand a tree, select tables, and click Import. The flow was technically possible, but forced users into mental bookkeeping the product should have done for them.

From source-by-source to one canonical entry point.

Before

Six steps to a single import

  1. Leave the Data Catalog
  2. Navigate to Sources
  3. Open a specific source
  4. Open Connections tab
  5. Expand a connection
  6. Select tables, click Import
After

One modal, every source

"Import asset" button opens a modal rooted at Source level. One session can span the entire catalog.

A single modal triggered from the catalog listing.

Rooted at Source level so one session can span multiple sources. Lazy-loaded children with indeterminate-state checkboxes for partial selection. A real-language selection summary that counts only the leaves that actually import.

Each decision rebuilt an assumption the old flow was making.

01

Tree starts at Source, not Connection

Rooting the tree at the system level meant a single import session could span the entire catalog.

02

Lazy-loaded children with indeterminate checkboxes

Enterprise tenants have thousands of tables. The tree fetches children only on expand, with a spinner-in-chevron loading state.

03

Selection summary in real language

"X tables from Y connections from Z sources", counts only the leaves that actually import, qualified by their parents.

04

Always-visible primary action

SplitButton + Cancel always visible. The modal exists for importing, the primary action shouldn't hide.

Every "small" UI decision was implicitly making a load-bearing assumption about how customers use the product.

From the design crit retrospective

Four passes, and a crit session that reshaped half the design.

01

Current-state mapping

Walked through the existing flow as a user. Documented the six-click sequence. Identified that the existing ConnectionBrowseTree could be the foundation, but its root level was wrong for the new flow.

02

First draft modal

Designed in Figma with Flamingo primitives. Built five states: Initial, Browsing, Selected, Show Selected Only, Loading.

03

Cross-functional design crit

Five reviewers across design and frontend. Ten pieces of feedback. Selection-counter language, toolbar placement, modal density, and pagination model all changed.

04

Final design and handoff

Refined typography, density, paginator scope. Wrote a full handoff doc enumerating every element, state, interaction, components used, and open engineering questions.

Three principles I took into the next project.

01

Clarify the unit of measurement

"Items" is ambiguous when one item could be one connection or one table, and they don't equal each other.

02

Progressive disclosure + pagination = complexity explosion

Pick one. Combining them creates an interaction model engineers can't ship and users can't predict.

03

For bulk actions, ask: what's the worst case?

This modal can spawn thousands of background jobs. Safeguards belong in the UI, not bolted on after.

← Back to work Next: Asset Layout Editor →