SYSTEMS LOADING

Legacy migration Modular information architecture Instrumented iteration

Revolution Fact Find:
From Guesswork to Production-Ready Data

I partnered with engineering and compliance to replace a fragmented legacy flow with a migration-aware, high-density workspace—not static mocks, but UI patterns that could ship and scale with a moving API and regulatory bar.

The product story: turning a clunky, multi-page stack into a fast cockpit for advisors—grounded in behavioral data once we instrumented the rollout.

1. Designing in the Dark

The original Fact Find tool was built on an aging VB stack. When the company decided to migrate to C#, we had to rebuild the UI to support a new API integration.

At first we had no meaningful product analytics—only informal feedback from managers. That gap between the field and the roadmap made it easy to ship plausible layouts that did not match advisor behavior.

Legacy personal-details layout before migration

Legacy VB Interface

Legacy address capture layout listing sparse data fields

Legacy Data Points

2. Iteration 1: The “Modern” Bloat

Our first redesign increased cognitive load: more pages and notes fields, driven by hypotheses rather than telemetry. I advocated for Microsoft Clarity on the staged environment so we could replay frustration and heat—not opinions. That shift moved the team from debating layouts to agreeing on what advisors actually did.

Assistive-tech note: hover zoom tracks the cursor. For pixel-level review without a pointer, open each asset directly: Personal v1 (full resolution) · Address v1 (full resolution)

Iteration one redesigned personal workspace
Iteration one address workspace

3. Letting the Data Win

When we rolled out the pilot to 200 consultants, fragmentation showed up in the telemetry before it showed up in anecdotes. Using Clarity, I made the case to leadership that we should optimize for task completion, not page count. The data supported consolidating flows instead of spreading them thin.

Heatmaps showing clustered clicks and hesitation on fragmented steps

4. The Cockpit Workspace (v3)

We retired the “many shallow pages” model for a single high-density hub: dual applicants side-by-side, property and charges readable at a glance, and interaction patterns that matched how advisors copy data into lender portals. That layout became the reference model for other internal tooling—evidence that production-ready structure beats one-off screen polish.

Final v3 personal cockpit with paired applicants visible

v3: High-Density Side-by-Side Personal Hub

Final v3 address hub consolidating property and charges

v3: Unified Multi-Charge Property Hub

Efficiency

60% Less Clicks

Scale

1,300+ Daily Users

Method

Metric Driven

Constraint-solving in the product UI

Compliance without modal fatigue

We placed Vulnerability Status immediately before final notes so advisors could not complete the journey without a deliberate check—meeting FCA expectations without interrupting flow with stacked dialogs.

Lender-portal copy paths

Clickable tel: and mailto: links were triggering the wrong apps during fast paste workflows. One-click copy controls kept the UI calm and predictable when moving data into external portals—small interaction engineering with outsized throughput impact.

markchamberlain.design

Technical implementation

This write-up ships as static HTML with a deliberately small front-end footprint. Below is how I structured layout, tokens, and shared chrome so the case study stays maintainable across many project pages—a practical analogue to design-system thinking in larger codebases.

CSS tokens (:root)

Accent color is centralized so emphasis in prose, borders, and focus treatments stay wired to the same value—mirroring how I'd document tokens for a DS consumer.

:root {
    --color-orange: #c75100;
    --color-dark: #333333;
    --orange: var(--color-orange);
}

Responsive grid scaffold

Comparisons collapse to single column without changing copy order—the same pattern you'd ship in JSX or Razor partials.

<div class="grid grid-cols-1 md:grid-cols-2 gap-6 max-w-5xl">
  <article><!-- legacy --></article>
  <article><!-- new --></article>
</div>

Cursor-aligned zoom (mousemove)

The helper recenters scaling under the stakeholder's cursor inside fixed-height screenshots. Budget throttling (requestAnimationFrame) optional if telemetry shows jank.

container.addEventListener('mousemove', (e) => {
    const rect = container.getBoundingClientRect();
    const x = ((e.clientX - rect.left) / rect.width) * 100;
    const y = ((e.clientY - rect.top) / rect.height) * 100;
    img.style.transformOrigin = `${x}% ${y}%`;
    img.style.transform = 'scale(2.5)';
});

Layout and responsive scaffolding

  • Long-form narrative uses a capped measure (max-w-4xl / max-w-5xl) with grids that collapse from multi-column desktop to single-column mobile.
  • Fixed pill navigation (backdrop-blur, bordered glass) preserves context without stealing vertical canvas; z-index is coordinated with the page loader.
  • Audit imagery plus object-contain keeps dense enterprise UI readable on stakeholder laptops.

Modular shell

  • Navigation and footer are injected from components.js with path-aware link bases—one edit updates chrome everywhere.

Performance trade-offs

  • Tailwind via CDN favors velocity over bundle minimalism acceptable for portfolio shipping.
  • Loader clears on DOM ready with a watchdog timer so sluggish assets cannot trap reviewers.
  • Above: WebP-first <picture> keeps bytes down while JPG remains the compatibility fallback.

Process

Early wireframes, Figma explorations, and the thinking behind the decisions.

Salvaging complex systems requires data.

Let's Discuss