Diparati Sen

Product design · Flyway Desktop · 2025 – 2026

Code Review: from violations to rule ownership

Two connected design problems. First, how to show migration warnings and code-quality issues so DBAs can act on them. Then, how to give teams control over which rules apply, and get those rules into their pipelines.

design legs
2
hall test participants
3
practitioner conversations
7
Company
Redgate
Product
Flyway Desktop
My role
UX designUser researchUX copyField research
Methods
Field research at SQLBits 2026 · Hall testing · Design reviews with engineering · Progressive disclosure

OutcomeThe violations experience shipped. Rule configuration went through hall testing to final designs. There’s no headline metric here, deliberately: the story is the design work.

Read as

Full story: showing every section.

Context

Catching schema mistakes before they reach production

Database migrations carry real risk. A poorly written script can cause data loss, downtime or irreversible schema changes in production. Code Review is a Flyway Desktop feature that analyses migration scripts against a configurable ruleset and surfaces violations before a migration runs. It gives DBAs and developers a systematic way to catch problems early, rather than relying on manual review or discovering issues after the fact.

The feature had two distinct design challenges that needed solving in sequence: how should violations be surfaced clearly and actionably, and how should people configure and manage the rules that govern them? This case study covers both.

Problem

Two problems, in sequence

Leg 1 — Violations experience

Surface issues without overwhelming people. Design the violations display: how to present Migration Warnings and Code Quality Issues in a way users can scan, understand and act on. Includes the violations panel, severity categorisation, inline suppression and the “learn more” flow.

Leg 2 — Rule configuration

Give people control over what gets checked. Design the rule configuration interface: policy settings with severity controls, import from an existing project, and CI/CD export with TOML configuration. Plus a progressive-disclosure feedback widget.

Research foundation

What we knew before we designed

I attended SQLBits 2026 as field research and had seven practitioner conversations with DBAs, platform engineers and community ambassadors. Code Review as a problem space was validated unprompted. People raised concerns about script quality, permissions, audit trails, and AI-generated migrations reaching production without human review. Several described painful manual review processes that Flyway’s Code Review could replace.

That confirmed the feature was worth investing in, and it sharpened the framing: Code Review needed to feel like a professional DBA tool, not a linting afterthought.

Leg 1

Displaying violations clearly

The core problem was presentation. When Flyway Desktop detects issues in a migration script, how do you show them in a way that’s fast to scan, clearly categorised and easy to act on, without obscuring the code itself? Two categories needed visual distinction: Migration Warnings (risks to whether a migration succeeds) and Code Quality Issues (style and pattern violations). The violations panel lists both, with severity badges, line references, inline suppression controls, and a “learn more” path that explains each rule in plain language rather than restating its name.

High-severity violations listed with line references and suppress actions. The editor highlights violation lines in red. Colour-coded severity dots in the issues count give an at-a-glance summary before you read individual entries.

Key design decisions

Three decisions that shaped the violations panel

  1. Separate Migration Warnings from Code Quality Issues

    They represent different types of risk requiring different responses. Separating them lets people triage by category before reading individual entries, rather than reading everything to understand severity.

  2. Make suppression immediate and visible

    People need to dismiss violations they’ve consciously accepted. Inline suppression keeps the action lightweight; a visible suppressed count maintains an audit trail without cluttering the active view.

  3. Write “learn more” content that actually explains

    Rule descriptions across tools tend to restate the rule name. The “learn more” flow was designed to answer what someone actually needs to know: what does this rule detect, and why does it matter?

Research

Hall testing rule configuration

Before designing the second leg in full, I ran hall tests with three internal participants using early rule-configuration screens. The sessions surfaced three clear findings that directly shaped the final design.

  • Rule descriptions don’t describe

    All three participants noted that the rule subtext essentially rephrased the rule name without adding understanding. For non-SQL experts this left them no better off; even for DBAs it didn’t explain the why. One participant: “It’s saying the same thing, but with different words.”

  • People want confidence before copying from an existing project

    Participants expected to see a preview of what rules would be imported and what would be overwritten before committing. Confidence before bulk operations was a consistent theme across all three sessions.

  • Rule configuration needs to be reachable from where violations appear

    If a violation surfaces in the migrations view, rule configuration should be accessible from there, not only from the settings menu. The need arises in context; the path should exist in context.

“Diparati is, at heart, a connector — looking to bring people and technology together in a meaningful way.”

Kristen Nance · Principal Engineer at Cisco

Leg 2

Giving people control over what gets checked

The rule configuration design needed to let people do three distinct things in one place: understand what rules exist, manage which apply to their project, and get those rules into their CI/CD pipeline. The final design handles each clearly without conflating them.

Policy configuration

Rules grouped by policy category. Each rule has a toggle, a severity selector (Error or Warning), a “Learn more” link with a plain-language explanation, and optional configuration fields.

Import from existing project

Recent projects shown with rule counts and database type, so people have the context they need to confirm they’re importing the right configuration. This directly addresses the hall-test finding about confidence before bulk actions.
The export modal provides ready-to-use TOML snippets with clear instructions for committing the rules file and pointing the pipeline at it. Only Error-severity rules block the pipeline; Warning rules are still reported. This closes the loop between desktop configuration and automated enforcement.

Additional design

An in-app feedback widget that doesn’t get in the way

Alongside rule configuration, I designed an in-app feedback mechanism that appears at contextually relevant moments across four product surfaces, including the Code Review violations panel. It uses progressive disclosure: a lightweight star rating appears first, and only expands into a categorised follow-up question if the person engages. The initial ask stays non-intrusive while still collecting structured signal when people choose to give it.

Two follow-up paths were designed for the Code Review context: one for positive ratings, asking what made it helpful, and one for negative ratings, asking what could be better. Each offers pre-filled categories drawn from likely failure modes, with an open “Other” option. The point was to give the team direct signal from active users at the point of use, rather than relying on support tickets or NPS to understand how the feature was landing.

Step 1 — Rating prompt

Star rating embedded in the violations panel. Non-intrusive; it appears in context without a modal or interrupt.

Step 2 — Positive follow-up

If the rating is positive, a categorised follow-up asks what made it helpful, with checkboxes for likely dimensions of value.

Step 2 — Negative follow-up

If the rating is negative, a separate set of categories asks what could be better: false positives, missing rules, unclear explanations, performance.

Where it landed

What shipped, and what I’m not claiming

The violations experience shipped and was presented at a design share slot. I took the rule-configuration work through hall testing to final designs, largely independently, running design reviews with the engineers building it so design gaps surfaced early rather than after the fact.

I haven’t put an adoption number on this page because there isn’t one I can stand behind yet. What this project shows is the shape of the work: two audiences (DBAs and developers), rule ownership and governance, two connected surfaces designed in sequence, and research at each stage that changed the design.

Reflection

What this taught me

  • Descriptions that restate the name aren’t descriptions

    Every tool in this space has rule text that rephrases the rule. Hall testing made it obvious that people, including experts, want to know what a rule detects and why it matters. Writing that content is design work, not documentation.

  • Put the path where the need appears

    Configuration lived in settings; the need to change it showed up in the migrations view. Testing with three people was enough to make the gap undeniable.

  • Sequence the problems

    Trying to solve violations and rule ownership at once would have muddled both. Designing leg one first gave leg two a concrete context to be reachable from.