Making data governance legible at Atlan

09 Nov 2026 | Atlan Data governance AI

At Atlan I designed parts of Policy Manager, where data teams set the rules their data has to follow and deal with whatever breaks them. This case study is less about shipping metrics and more about how I take a messy domain apart and shape something people can actually use.

Role
Product designer on the governance team. Problem framing, interaction design, Figma and coded prototypes
Timeline
Mar to Jun 2025, three connected pieces of work
Scope
Incidents and tasks, an AI summary of policy rules, and a unified policy creation flow

Learnings

I was at Atlan for eight months. Three things have stayed with me since, one from each piece of work below.

  1. Governance is a people problem dressed up as rules. Writing the rule was never the hard part. The hard part was the person on another team with twelve broken tables and no interest in policies. Designing for them mattered more than anything on the policy owner's side.
  2. With AI, timing is a design decision. A plain-language summary of a policy was the easy part. Deciding when it should run, when it should stay quiet, and what each run costs turned it from a demo into something you could leave on.
  3. Organise by what people want, not by how the system is built. My first policy creation flow made sense to me because I'd spent weeks learning how Atlan models policies internally. That was exactly the problem. The second version got better the moment it stopped asking people to know what I knew.

The product

Atlan is a data catalog. Large companies like Mastercard, Unilever and General Motors use it to keep track of every table, dashboard and pipeline they own: what it is, who owns it, where its data comes from.

Governance is the part that makes rules about all of that. A typical rule: every table containing personal data must have an owner and a PII tag. In Atlan, a rule like that lives in a policy. The policy has a scope (which assets it watches) and rules (what has to be true). When assets break the rules, Atlan raises an incident.

Diagram: a policy with scope and rules, assets in scope with two failing, an incident, and tasks split by team
How a governance policy works. The last box is the one that was missing when I started.

When I picked up governance work in early 2025, the first three boxes existed. The fourth didn't. That was the first problem I picked up.

1. An incident nobody could finish

A policy breach might flag 29 assets owned by several different teams. In the product, that was one incident with one long list of broken assets. The policy owner could see the problem but had no way to break it up, hand pieces to the people who could fix them, or see progress. Picking assets for an incident meant scrolling and ticking boxes one at a time.

I started on the model before drawing any screens.

BeforeSketch of tasks loosely pointing at incidents
ProposedModel where incidents contain tasks and tasks contain assets
Left, what existed: tasks loosely related to incidents. Right, what I proposed: an incident contains tasks, a task contains assets, and the policy owner gets one view of everything.

That model gave me two people to design for, who care about very different things.

  1. The policy owner wants the whole picture. Which incidents are open, how far along each one is, who's holding things up. They got an Incidents tab in Policy Center, with progress bars on every incident, and an incident page where they split the work into tasks for a person or a group.
  2. The assignee doesn't care about policies. They have twelve tables to fix and want to get it done. Their tasks land in Atlan's Inbox, with the broken assets listed and each asset openable in place, so they can fix the metadata without leaving the task.
Incident page with a task list, assignees and progress, and a summary of the violated rule
The policy owner's view. Tasks with assignees and progress on the left, the rule that was broken and how many assets it affects on the right.
The assignee's view in Inbox. Mark an asset as done and it moves out of "To update". Tasks are deliberately just open or closed: fewer states for people who aren't governance experts.

A smaller decision saved the most time. Instead of picking assets one by one, you filter ("has tag Finance", "owner is empty") and select everything that matches. The same filter pattern Atlan already used in search, reused where people needed it most.

Create incident modal with filters and a select-all asset picker
Filter, then select all. Picking 29 assets becomes one filter and one click.

Testing it as real software

Figma prototypes can't search, filter or save, and those were exactly the things I needed people to try. So I connected Figma to Cursor through a Figma MCP server and turned the Incidents prototype into a small working app on Vercel.

This was April 2025. The term "vibe coding" was two months old, and a designer testing ideas in real code instead of a Figma prototype was still a new idea. The first version took three to four hours, plus a day of polish, and I added Mixpanel so I could see what people did with it instead of only asking.

The coded Incidents prototype: a real list, real status changes, real search. Built from the Figma file in an afternoon, in April 2025.

2. When should the AI speak?

A policy's scope and rules are built from rows of filters: attribute, operator, value. They're precise and almost impossible to read back. "Connection is tableau-server AND name contains Quarterly AND certificate is not Verified" takes a minute to parse even if you wrote it.

The obvious fix was a plain-language summary written by an LLM, next to the filters. The interesting part was deciding when it should run.

Timeline showing user edits, summary panel states and LLM requests, with requests only after a complete rule and batched edits
Generating on every keystroke is slow and expensive. Waiting for a button makes the summary stale. The answer sits between the two.

I set two rules. First, don't generate anything until there's a complete rule. A half-written filter gives a summary of nothing, so the panel stays in an empty state until the first rule makes sense. Second, when someone edits, show the "regenerating" state immediately but wait a couple of seconds before calling the model, so a burst of edits turns into one request. It feels live and stays cheap.

Editing a rule: change the operator, add a tag. The summary goes into its regenerating state right away and updates once the edits settle.

I also explored where the summary should live: at the top of the page, next to each section, or inside a chat panel where you could ask for changes in plain English. Writing filters from a sentence ("only PII tables in production") came out of that exploration and stuck.

Placement optionsThree placements for the AI summary with notes
Chat to filtersNatural language prompt producing a filter preview
Left, three places the summary could live. Right, describing the scope in plain English and getting filters back, with a preview before anything is applied.

3. One place to create any policy

The biggest piece came in May. Atlan had grown several kinds of policy, each created somewhere different. Access policies (who can see or edit what) lived inside Personas and Purposes, each with its own sidebar. Governance policies lived in Policy Center. The goal was one place to create any policy.

Existing persona page with a New policy dropdown
Where access policies were created before: inside a persona, from a dropdown, configured in a sidebar.

My first version, on 22 May, kept Atlan's structure and moved it into a modal. You picked Persona, Purpose or Governance, then filled in fields that changed depending on your choice, then configured permissions on a second step.

v1. It works, but you need to know how Atlan models policies internally before you can say what you want.

By 12 June that had grown into a full-page, five-step wizard: type, details, scope, permissions, approval and a review page with an AI summary. I presented it in a review, and it got pushback on three things.

  1. Create first, then configure. Atlan's other governance policies already worked that way, so the wizard was inconsistent. It also front-loaded every decision before the policy existed, so you couldn't save half of it and come back.
  2. One flat list of policy types. The two-level picker (choose Compliance, then choose which kind) asked people to learn our taxonomy before they could start.
  3. AI help throughout. On a review page at the end, the AI could only summarise what you had already done. It needed to help while you were writing the scope and permissions.

Each point was right. By the next day I had a new version with all three changes built in.

Comparison: v1 organised around Atlan's objects with a three-step modal; v2 organised around intent with one list of types and a draft created immediately
v1 vs v2. The change that mattered most wasn't visual. It was what the person has to know before they can start.
v2, 13 June. One flat list of policy types (access control, five kinds of compliance, custom), a name, and Create. Everything else happens on the policy's own page.

Creating the policy first means it exists as a draft straight away. It has a page you can come back to, a timeline from draft to approval, and somewhere for AI help to live. On the scope and permissions tab, you can describe the scope in plain English, tick permissions grouped by the asset types you picked, and read the summary from April sitting on top.

Configuring an access policy in v2: permissions, linked users, and the AI summary of scope and permissions.
Draft profileNew policy profile in draft with a timeline and approval workflow
ApprovalApproval workflow attached to a policy
A policy's home: draft status, a timeline to approval, and the approval workflow that has to sign it off.

Looking back

The review in June is the moment I'd point to if someone asked how I work. The wizard was thorough and well reasoned, and it was the wrong shape. Letting go of it in a day, and coming back with something better, is the part of this project I'm proudest of.