Portfolio dashboard

Earned value that survives an empty project

Portfolio dashboards go green because the data model rewards going green. I built one that measures in hours, sorts by trouble, and refuses to report a number it does not have.

Earned value computed on the effort the organisation actually books
Hours, not moneyEarned value computed on the effort the organisation actually books
The portfolio sorts by trouble, not alphabetically
Worst firstThe portfolio sorts by trouble, not alphabetically
Empty, healthy and failing as the test canon
3 fixturesEmpty, healthy and failing as the test canon

The client

The delivery management function of a software services organisation running a portfolio of concurrent client projects, measured in billable effort rather than capitalised cost.

The engagement

A portfolio and project dashboard built against a canonical metrics definition, with three test fixtures standing in for the states leadership actually cares about.

The problem

Portfolio reporting in a services organisation fails in two predictable ways. It is expressed in money, which nobody at delivery level can verify or influence, and it treats missing data as zero — so a project that has not started reports the same as one that has failed, and a project with no cost booked reports a flattering efficiency of precisely nothing.

What I did

I built the earned value model on milestone weights in hours, because hours are the unit the organisation actually books and therefore the only unit a delivery manager can argue with. Where a value cannot be computed it shows as unavailable rather than as zero, and the canonical test case is a genuinely empty project — if the dashboard handles a project with no data without lying, it will handle the rest. The portfolio view is ordered worst-first so the conversation opens on what is failing, and each project page carries the things that actually move a steering meeting rather than a colour alone. Where the written specification and the organisation's own canonical metric definitions disagreed, the canonical source won and the disagreement was documented rather than silently reconciled.

What was built

Milestone-weighted earned value computed in hours, undefined performance indices instead of flattering zeros, worst-first ordering, per-manager views, historical trend lines, and project pages built for a steering meeting — blockers, the reason behind the status colour, open questions, allocation and written commentary.

On the table at the end

  • Portfolio and project dashboard
  • Insight layer with findings by category and scorecards
  • Three canonical fixtures: an empty, a healthy and a failing project

What it changed

Gave portfolio leadership a status view a delivery manager can argue with — effort-based, honest about missing data, and ordered so the steering conversation opens on what is failing instead of scrolling to find it.

How it ran

  1. 01

    Pick a canonical source

    One authority for milestone weights and history, with the specification deferring to it where the two disagreed — documented, not silently reconciled.

  2. 02

    Milestone-weighted earned value

    Weights per delivery stage, cost performance undefined rather than zero when nothing has been booked, empty values rendered as a dash.

  3. 03

    Worst-first portfolio

    Projects ordered by trouble, with trend lines from historical snapshots rather than a single point in time.

  4. 04

    A project page built for a steering meeting

    Blockers, the reason behind the status colour, schedule timeline, open questions, allocation and written commentary.

  5. 05

    An insight layer with opinions

    Findings grouped by category, a frequency view across the portfolio, and scorecards for stakeholder health, delivery hygiene and tooling adoption.

Something similar on your plate?

Thirty minutes, no deck. I will tell you whether it is worth doing at all.