Get me straight to the point.

Get me straight to the point.

Hexagon Geosystems · 2024-2026

How native charts and a reporting dashboard are replacing 12 hours of manual Power BI work per project across 90+ construction projects.

How native charts and a reporting dashboard are replacing 12 hours of manual Power BI work per project across 90+ construction projects.

ROLE

Staff Product Designer

TEAM

1 PM, 1 Full-stack engineer, 1 Front-end engineer

STATUS

Native charts in beta; first dashboard tabs shipped, full experience in late development

The Problem

The Problem

The Construction Analysis Portal compares what's actually built (from reality-capture scans) against what was designed (from BIM models). Reporting was the layer Project Owners came back to on every build, and the layer that had received the least design and engineering investment. Charts were Power BI documents in iframes, hand-built by Customer Service at 12 hours per project setup and 4 hours per update. The data froze at the last publish. For accuracy-reporting customers, this work consumed 31% of CS delivery time, dropping to 9% for progress-only. Project Owners said, unprompted, that getting an answer took too many clicks. Get them straight to the point became the bar every design decision had to clear.

Reaching any chart took three or four clicks minimum, and nothing was linked. Reporting couldn't scale without hiring more people or slowing delivery. I scoped the redesign with my PM, surfaced the billed CS hours we could free up, and sold it to leadership together.

Power BI report embedded as a tab in CAP, showing a Productivity Chart S-curve with a trades filter sidebar listing 25 trade categories.

Power BI experience inside CAP. Customer and project redacted.

Customer Power BI report with ten donut charts arranged in a grid, one per building, each showing BUILT versus NOT BUILT progress.

Customer-facing Power BI report: donut grid by building, names redacted.

Existing CAP reporting: per-project tabs by report type, trade, deliverable.

Existing CAP reporting: per-project tabs by report type, trade, deliverable.

Research

Research

I ran interview sessions over two weeks with six Project Owners and planning managers across active projects, and worked the transcripts in Dovetail. All six wanted the same thing: to log in and immediately know what needed their attention.

"How can we get everything into a unified spot? Easier to see in one area instead of searching email for pdfs."

-A construction-industry customer during a listening session

A few said it more narrowly: they only cared about the critical path. The Critical Path filter became a structural element across every tab in response.

Before designing anything, I mapped every question a user could ask across progress, accuracy, and schedule. The central mismatch surfaced: reporting was organized around chart types, and the questions customers were trying to answer never shaped the structure. A Project Owner asking "is my build on schedule?" had to visit three disconnected parts of the app and assemble the answer themselves. The redesign would invert that.

Customers also print and export reports for offline meetings and trailer walls. The dashboard needed an export path that preserved filter state, and the audience sat at desks; jobsite Wi-Fi wasn't reliable enough to design around.

Research board: solutions engineer's CAP demo screens annotated with user questions, pain points, and feedback notes.

Users were building their own dashboards inside the platform by aligning panels. I marked up one solutions engineer's demo setup and gathered her feedback on what she wished it did.

Research synthesis board titled "answers that do not come easily" with five customer-question columns, each paired with a why-it's-hard note and a candidate solution.

Working through the existing charts, I documented the questions our reporting couldn't answer. Some were solvable inside the current data model. Others needed backend work that wasn't worth the lift.

Concept board with a funnel shape: direction-setting sticky notes at the top, CAP screens arranged inside from a broad summary view down to detailed charts.

A core goal: design an investigative path that funnels users from broad overview down to fine detail. An intentional journey that lets a Project Owner follow a smell through the full data story instead of flipping between screens.

The Constraints

The Constraints

Progress and accuracy reporting are sold separately. Every place the two could appear together used separate, hideable elements so an accuracy-only customer never saw a module they hadn't bought. Customer Service layered per-project customization on top of every project; whatever I designed had to absorb that into the standard itself.

Pangaea, Hexagon's design system, was where the dashboard had to live. It had no data viz patterns when this work started. I built them for the dashboard and contributed them back. There were also existing artifacts of our legacy system, the MUI framework I built with the other designers at Avvir, still running its orange palette under the existing charts.

I was the only designer, PM coverage shifted, and engineering capacity stayed small. Native charts shipped first; mobile was sketched, validated with SMEs, then descoped.

Native Charts: Replacing Power BI

Native Charts: Replacing Power BI

Chart migration moved standard reporting out of Power BI and into the platform itself, where charts could pull live data and exist for every project without anyone building them by hand. The highest-volume and most-frequent charts shipped first.

Donut charts had been the company's default for years. User testing and data viz best practices flagged the same gaps: donuts didn't carry enough detail at a glance, and didn't scale as severity tiers grew. We moved to stacked horizontal bars.

Progress Matrix answered a Project Owner's first question: how is each trade doing on each floor? The redesigned accuracy charts answered a related one: which trades are off, and how badly? Schedule vs Progress answered which trades are behind plan, and by how much? I rebuilt its layout so per-trade status read across the full trade list at a glance, with the most-behind trades sorted to the top.

Progress Matrix heatmap with trade rows grouped by category and building-level columns; green saturation shows per-cell completion.

Progress Matrix (MVP): trade-by-floor completion percentages, color-coded for scanning.

Schedule vs Progress: per-trade list sorted by status next to an S-curve of captured progress, baseline, and current schedule.Matrix heatmap with trade rows grouped by category and building-level columns; green saturation shows per-cell completion.

Schedule vs Progress (MVP), All Trades: baseline, current, captured progress.

Same Schedule vs Progress chart filtered to HVAC Ductwork: captured progress 45%, plan 70%, 25% behind.

Same chart filtered to HVAC Ductwork, 25% behind plan.

I prototyped every chart component in Recharts using Claude Code, covering both the MVP-ship and scoped dashboard versions. Recharts was the production library, so engineering had a functional reference to match.

Organized around what Project Owners ask first.

The Reporting Dashboard

The Reporting Dashboard

With native charts replacing Power BI, the next step was the entry point. The dashboard inverts the old pattern: the questions a Project Owner asks first are answered on login.

Composition

Composition

Nine views each take one axis of the project. Overview opens the dashboard and answers what needs my attention right now? Two stacked strips sit above seven widgets carrying project state and deltas since the last capture. Each widget is a one-click entry to its full tab.

Overview dashboard: two header strips above seven widget cards (schedule, trends, impact, plan vs actual, issues, floorplan, accuracy).

Overview: two stacked header strips above seven one-click widget entries.

Pattern: the KPI strip and Critical Path filter

Pattern: the KPI strip and Critical Path filter

Every tab carries a KPI strip on the same rules (typically 3-6 cells, two-column layout, severity colors only on evaluative tiers). The metric changes per tab, but the rules don't. The Critical Path filter sits cross-cutting and constrains any tab to whatever the customer marked as critical during project setup: a delivery-gated trade like structural steel or fire suppression, an element like an elevator shaft or main electrical riser, or a phase-driving area like the main mechanical room.

Schedule KPI strip: 3 Critically Behind, 16 Behind, 7 Ahead, 14 On Track, -3% average vs plan.

KPI strip from the Schedule tab. Same rules govern every tab.

Per-axis tabs

Per-axis tabs

Plan vs Actual answers how is each trade performing against plan, and who's dragging the overall percentage down? Aggregates are element-weighted; a 4,000-element trade carries proportionally more weight than an 80-element one.

Plan vs Actual tab with a KPI strip above a per-trade table showing WBS code, progress, updated plan, variance, SPI, and Health status.

Plan vs Actual: per-trade Health, SPI, variance against updated plan.

Impact answers who's blocking whom downstream? A delayed trade feeds the trades whose dependencies gate on it; cascade chains surface directly with Critical Path trades flagged inline.

Impact tab with Upstream, Focus, and Downstream columns; Fire Suppression as the focus with a ranked list of blocked downstream trades.

Impact: Focus card on Fire Suppression; Downstream sorts blocked trades by cascade severity.

Schedule answers how far from plan are we today, what has that gap looked like over time, and how far have we drifted from the original plan at kickoff? The S-curve carries all three lines (baseline at kickoff, updated plan, scanned actual), with a trade table sorted by health.

Schedule tab: S-curve plotting baseline, updated plan, and scanned progress above a Critical Path trade table sorted by variance.

Schedule: S-curve headline; table grounds it in accountable trades.

Schedule S-curve hover tooltip at May '25: scanned 37%, updated plan 46%, baseline 54%, variance -9%.

Schedule hover: baseline, updated plan, scanned actual, variance in one read.

Accuracy answers which trades are being installed inaccurately, and which need attention? Each construction element classifies as In Place, Deviated, Critical, or Clash, surfaced as a project-wide stacked bar plus per-trade table.

Accuracy tab: project-wide stacked bar across In Place, Deviated, Critical, and Clash, above a per-trade table with distribution bars.

Accuracy: project-wide stacked bar plus per-trade breakdown.

Matrix, Floorplan, Trends, and Issues

Matrix, Floorplan, Trends, and Issues

Four more views complete the dashboard, each on the same pattern: one question, one chart shape, one click into the detail. Matrix: where on the trade-by-floor grid is the worst intersection? A heatmap. Floorplan: where in the building are the problems clustering? Progress overlaid on the architectural drawing. Trends: which trades are gaining or losing pace? Velocity by trade, week over week. Issues: which deviations and clashes need a closer look? A detail panel with As-Designed / As-Built / Clashing comparison and one-click links back to the 3D model.

Matrix tab: grid of completion percentages by trade and floor, with a variance-versus-plan column on the right.

Matrix: trade-by-floor heatmap. The most-requested view from Project Owners.

Floorplan tab: Floor 1 architectural drawing with rooms colored and labeled by progress, beside a sorted areas list.

Floorplan: progress overlaid on the architectural drawing, zone by zone.

Trends tab: week-over-week throughput line chart above a per-trade table showing momentum status, weekly velocity, and installed counts.

Trends: which trades are accelerating, decelerating, or steady.

Issues tab: clash-and-deviation list beside a detail panel with a 3D viewport, measurements, and links into the model.

Issues: deviation and clash detail; each links back to the 3D model.

Overview dashboard iterations: paper sketch, early FigJam layouts, Figma mid-fidelity grid, and the final designed dashboard.

Overview composition iterations from sketch to ship.

Outcome (as of March 2026)

Outcome (as of March 2026)

For the two charts that migrated, chart setup time dropped from 12 hours per project to zero.

The Progress Matrix and Schedule vs Progress shipped first as the highest-volume views in the reporting backlog. For those two charts, chart setup time dropped from 12 hours per project to zero and the 4-hour update cycle is gone. The Customer Service time on their Power BI production (31% of delivery effort on accuracy-reporting customers) was being freed up.

The rest of the reporting suite is still in Power BI, still hand-built by Customer Service. Standard reporting work isn't gone across the board; it's gone for what's migrated. Custom charts for key accounts will continue to be hand-built as scope.

The first dashboard tabs shipped, and the paying cohort used them: 1,367 loads from about 94 Project Owners over 90 days, roughly once a week per owner. The full overview was still in late development when I left, scoped to serve a dual purpose as a landing surface in our current platform, and as the starting point for the Analysis tab in the unified Hexagon platform.
Click-flow diagram comparing before (five-step path, 3-4 clicks) with after (two-step path, key data on login).

Before and after: click depth a Project Owner had to traverse to reach reporting data.

What I'd Do Differently

What I'd Do Differently

I'd have pushed harder to ship the navigation layer alongside the first native charts, even minimally. They were scoped as separate epics on different timelines, so the early charts shipped while Project Owners still navigated the old reporting flow to reach them. The pattern I'd take into the next overhaul: ship the surfaces users hit first.

Matt Klein

© 2026

Matt Klein

© 2026