Case study 02 · Comcast · CORE UI

· 7 MIN READ

Port migration wizard

Asked to add one validation step, I reframed a fragmented, high-stakes migration workflow into a guided wizard built around progress, recovery and trust.

Role

Sole UX designer

Team

1 engineer · 1 product manager · 1 project manager

Timeline

2026 · Several weeks

Platform

Web app · Angular Material

Focus

Workflows · Async states

UI redrawn and data anonymized to respect Comcast confidentiality

Port migration dashboard with live status per site and a needs-you queue

Fig. 00

The dashboard became home base: live status for every migration and a “needs you” queue, so engineers always know whose move it is.

At a glance — for the 60-second reader

6 steps

One guided wizard in place of four scattered status surfaces

5×

One “safe to leave” pattern, reused across every long wait

0 restarts

Retry re-runs only the failed check; finished work is never thrown away

01 — Context

A one-step request that was really a whole-journey problem.

Stakeholders asked for one new step: after engineers create the engineering design package (EDP), push it to provisioning, run validations and generate configs before anyone raises tickets.

When I dug into the existing tool, the missing step wasn’t the real issue. Migrating ports to new hardware was a long, multi-team process spread across disconnected screens. Engineers got through it on memory and read system state from disabled buttons.

02 — Problem

Status was everywhere, so it was nowhere.

Migrations are high-stakes and effectively irreversible, yet the legacy flow worked against the engineer at every turn:

  • No preview: an irreversible action sat behind a “Click to Migrate” button whose only warning was “this action is irreversible.”

  • Dead-end waits: validation ran for 10+ minutes behind “check back in 10 mins”, and nothing told you when it finished.

  • Readiness in prose: disabled buttons came with paragraphs explaining what would unlock them.

  • Status in four places: dashboard columns, a side panel, page metrics and footer buttons, with no single answer to “where am I, and what’s next?”

Legacy launched-site dashboard with three numbered pain-point marks

Fig. 01

Before — the legacy launched-site dashboard. ① An irreversible “Click to Migrate” action with no preview ② Status split across five columns ③ Every row reads “In Progress”, so nothing says whose move it is

03 — Research

Encode the sequence people were already memorizing.

I took apart every legacy screen and mapped each stage: who owns it, what gates it, and where people get stuck. The stages engineers had learned by heart became explicit steps in a six-step wizard: setup and launch, system checks, EDP design, reservation, validate and configure, then tickets.

I worked in grayscale first on purpose. Deciding what’s a step, what runs in parallel and what gates what is far cheaper to get right before pixels.

04 — Key decisions

Four choices that shaped the wizard.

I reframed the brief from “add a screen” to “give the whole journey a shape engineers can trust,” then made four decisions that carried the design.

Decision 01

A wizard, not a bolted-on screen

Why

The process was already a sequence of gated stages, and a stepper’s built-in locking matched how the work actually flowed.

Tradeoff

More structure up front. Every step is deep-linkable and resumable, so power users running many sites aren’t slowed down.

Decision 02

Retry only what failed

Why

The hard requirement was “never make them restart.” Passed checks keep their green state, so progress feels cumulative, not reset.

Tradeoff

Escalation to support appears only after a failed retry, which adds one step before engineers get help.

Decision 03

Pull downport review out of the wizard

Why

Stakeholder review showed it’s owned by another team and runs on its own timeline. It became a parallel track that still gates EDP design.

Tradeoff

A less tidy linear story, in exchange for one that matches how the work really happens.

Decision 04

Every locked button names its unlock

Why

Engineers were reading paragraphs to learn why they were stuck. Now each locked button carries a caption: “Enables when all 12 checks pass.”

Tradeoff

One more line of UI under every gate.

Legacy dependency validation page with disabled buttons and a paragraph explaining what unlocks them

Fig. 02

Before — readiness explained in prose. ① “View EDP Details” is disabled ② A numbered paragraph explains what unlocks it ③ “Proceed” is disabled with no reason given

Redesigned validation hub with one failed check expanded, showing error detail and a per-check retry

Fig. 03

After — the validation hub. Every check in one place; a failed check expands in place with the error, the affected ports and its own retry, and the locked button says exactly what enables it.

05 — Solution

Built for long waits, careful edits and system drift.

Validation was the core ask, but the same situations recur across the whole flow: something is running, something failed, a gate is closed, state needs confirming. I designed each one once as a reusable pattern, so engineers learn it once and the system reads as one coherent thing.

System checks running with a safe-to-leave message and live progress

Fig. 04

Safe to leave — live progress, elapsed against typical time, and a notification when it’s your turn. The same pattern repeats five times across the flow.

Configuration review comparing two versions of a config file, with version history

Fig. 05

Configs you can trust and change — grouped by port and file type, every edit saved as a new version with who and when, with diff and restore.

Post-migration confirmation: ports moved to the next batch and the system in sync

Fig. 06

“In sync” — after a batch runs, ports that didn’t migrate carry into the next batch, and an explicit confirmation closes the loop.

06 — Outcome

Shipping in phases.

Engineering is building the wizard in phases, starting with validate and configure, then post-migration reconciliation. Both phases plug into the live tool through a single entry point and reuse the redesigned screens downstream.

Because the async progress, cumulative retry and visible-gate patterns were designed once, each phase ships already consistent with the next.

07 — Reflection

Designing for trust.

The recurring question was never “what does this screen look like?” It was “does the engineer believe the system is in the state the UI claims?” Visible gates, honest progress, cumulative retries and explicit sync confirmations did more for usability than any single layout.

The other lesson was sizing the problem. The brief asked for one step; the right response was to reframe the whole journey, then let the structure follow how the work really happens.

Next, I’d add email deep-links for the long waits, run a usability pass with engineers on real migrations, and measure retry rates and time-to-complete against the legacy flow.

Next project — 03 · Side project · Sena

Sena web studio →

Redesigned my own pitch: one demo that shows my thinking replaced free custom redesigns, and landed my first client.

Med spa demo homepage hero with booking call to action