← Back to Portfolio

Data-Intensive Frontend at AWS

Amazon Web Services


Case Study #1: Dynamic Column-Based Data Insight Preview

Data Wrangler DataGrid without Data Insight Preview

Before: no per-column visualization

Data Wrangler DataGrid with Data Insight Preview showing per-column D3 charts

After: per-column D3 chart preview

Context

SageMaker Data Wrangler needed to show per-column data visualizations in an MUI DataGrid — each column rendering its own D3 chart.

Problem

All D3 visualizations initialized at once on page load. With N columns, render cost scaled O(N) — the more columns in the dataset, the longer the freeze.

Solution

Calculated visible column range from current scroll position and column widths, maintaining a dynamic list of in-viewport columns. Each D3 chart is wrapped in React.memo and only initializes when its column enters the visible range — deferring all off-screen rendering.

Result

Initial load reduced from O(N) to O(1). This pattern became the foundation for solving the Data Quality Report freeze in Case 2.

Case Study #2: Full Data Wrangler Port to SageMaker Canvas

Context

Migrating Data Wrangler — a Jupyter notebook extension for ML data prep — into Canvas, a standalone application. (re:Invent 2023)

Canvas Data Insight Preview with operator applied

Operator preview in Canvas

Canvas Data Quality Report

Data Quality Report in Canvas

Problem

The migration surfaced compounding issues: component style mismatches between legacy and Canvas kept slipping through QA; the Data Quality Report froze on 100+ column datasets; bundle size had ballooned to 75MB with orphaned legacy code; stale API calls fired for unchanged data; and nested re-renders degraded runtime responsiveness.

Canvas data preparation pipeline DAG

Data preparation pipeline in Canvas

Solution

Style inconsistencies — Introduced Storybook with a legacy/Canvas style toggle, enabling visual comparison without a full build — cutting QA cycle time in half.

Data Quality Report freeze — Applied the scroll-position-based visibility calculation from Case 1 to vertical scroll, deferring D3 initialization for sections outside the visible range.

Bundle bloat — Analyzed with webpack-bundle-analyzer, removed orphaned modules and dead code, consolidated duplicate dependencies. 75MB → 44MB (41% reduction).

Stale API calls — Identified and eliminated legacy API calls no longer relevant in Canvas. 89% reduction.

Runtime latency — Profiled with React Profiler, identified cascading re-renders from unstable references. Applied React.memo on visualization components, useCallback for event handlers, and useMemo for derived data to cut unnecessary render cycles. Response time 2.8s → 0.8s (71% reduction).

Data Insight Preview in SageMaker Canvas

Data Insight Preview in Canvas

Result

Shipped at re:Invent 2023. Test coverage 78% → 97% including Cypress drag-and-drop E2E tests. 97% render time reduction on Data Insights page (10.5s → 0.4s).

Also at AWS S3

S3 Console checksum selection UI

S3 Console: checksum selection

S3 Console lifecycle filter with object size filter

S3 Console: lifecycle object size filter

Shipped Lifecycle Filters and client-side checksum support for S3 Console — AWS's most-used service.