MCHD ManagerPerformance governance for a hospital group

MCHD Manager holds a hospital group's indicators, risks, improvement plans and committees in one place, and the projects that move them. We designed the product and built it as a multi-tenant platform in English and Arabic.

The MCHD Manager KPI scorecard showing indicators by department with their status, beside a single indicator open on a phone
Client
Private client
Sector
Healthcare
Year
2025 to 2026
Platforms
Web platform, Tablet, Mobile web
Services
Product and UX design, Web development

A hospital measures itself constantly and still struggles to answer simple questions. MCHD Manager gives the group one structure for that work: strategic domains, the departments underneath them, the indicators each department owns, and the risks, plans, committees and projects attached to those indicators.

Built for

  • The quality and performance office, who own the measurement.
  • Executives, who need the roll-up and the exceptions.
  • Heads of department, who report the numbers and answer for them.
  • Committee chairs and secretaries, who turn the numbers into decisions.

The problem

Hospital performance reporting usually runs on spreadsheets and a quarterly pack assembled by hand. By the time it is signed off it describes a quarter that has ended, and nobody in the room can say which figures are late, which are disputed and which were simply never collected.

The deeper problem is that an indicator means different things to different people. Average length of stay is one number in surgery and another in obstetrics because the two departments count it differently, and the difference is invisible once both are in the same table.

Risks, improvement plans and committee decisions all exist, and all live somewhere else. A risk about theatre staffing sits in one register, the indicator it threatens sits in another, and the project meant to fix it sits in a third. Nothing connects them, so nothing follows through.

The group also runs more than one facility, and the platform has to keep them apart without making staff feel walled in.

Goals

  1. 01Define an indicator once, precisely enough that two departments cannot mean different things by it.
  2. 02Show where every indicator stands and which way it is moving, not just its latest value.
  3. 03Connect risks, improvement plans, committees and projects to the indicators they belong to.
  4. 04Keep each facility's data separate without leaking that another facility's records exist.
  5. 05Work in English and Arabic, in both directions, for the same staff on the same day.

Our role

We designed the product and built both halves of it, and we run and maintain the platform.

What we delivered

  • Product definition from a two-year requirements register
  • Interface design and a platform token system
  • Express and PostgreSQL back end on the Bun runtime, no ORM
  • Nuxt front end, server rendered, English and Arabic with full right-to-left
  • Multi-tenant hospital scoping and the permission model
  • KPI definition, data entry, scorecards and period snapshots
  • Risk register, improvement plans, committees and governance reporting
  • Workspaces, projects, tasks and RACI for the delivery work
  • Deployment, background jobs, notifications and monitoring

How we worked

  1. 01

    Start from the requirements register

    Two years of client conversations were turned into a numbered register of requirements, and the scope was held to it. Every screen can be traced back to the line that asked for it.

  2. 02

    Define the indicator properly

    Before any dashboard, we modelled what an indicator is: its unit, its direction, how often it reports, what goes above and below the line, its baseline, its RAG bands, its benchmark and the authority behind it, and whether it is risk adjusted.

  3. 03

    Make the numbers add up

    The dashboard figures are returned as one contract with sum invariants the front end checks. Totals that disagree with their own breakdown are treated as a bug, not a rounding difference.

  4. 04

    Give linking a single door

    Risks, plans, committees, indicators and projects link through one service with an allowlist and authorisation on both ends, so a link can never be made that either side was not entitled to make.

  5. 05

    Run it and keep fixing the real bugs

    The platform is deployed and in use. The recurring root causes were written down as engineering rules, so the same class of bug does not come back.

Screens and features

The strategic domains screen listing six domains with their roll-up status, the number of departments each covers and how many of its indicators have reported
Domains roll up from the departments underneath them, and say how much of each is actually reporting.
A single indicator on a phone, showing its status, its current value and how far it sits from target
An indicator says where it stands, which way it is moving, and how far from target it is.
The KPI scorecard on a phone with counts of indicators tracked, on target, needing attention and not yet reported
Not reported is its own state. An indicator nobody has filed is not the same as one that is on target.
The risk register with a severity breakdown, a five by five likelihood and impact matrix, and the register below it
The matrix is the filter: pick a cell and the register below narrows to it.
The risk register on a phone showing how many risks are high or critical and still open, with a severity ring
The register leads with the number that matters, which is how many are still open.
The platform dashboard with counts for workspaces, users, projects and tasks, and a task report chart
Underneath the governance layer sits the delivery work the plans turn into.
  • An indicator is a definition, not a number

    Unit, direction, frequency, numerator and denominator, measure type, baseline, RAG bands, benchmark value and the authority it came from, and whether the figure is risk adjusted.

  • Not reported is a first-class state

    Scorecards separate on target, needs attention and not reported yet, because a missing figure is a different problem from a bad one and needs a different person to fix it.

  • Direction of travel, not just position

    Each indicator shows its trend against target and says plainly when it is moving the wrong way, with the distance from target expressed in the indicator's own unit.

  • A risk matrix that filters

    Likelihood against impact in a five by five grid, with severity and status breakdowns, and the register below it narrowing to whatever cell you pick.

  • Everything links through one spine

    Indicators, risks, improvement plans, committees, projects and tasks are linked through a single service that checks both ends and stamps the facility server side.

  • Separation between facilities that does not leak

    Fetching a record from another facility returns a not found, never a forbidden, so the platform never confirms that a record you cannot see exists.

  • English and Arabic, both directions

    Indicator names, domains and departments carry both languages, and the interface mirrors rather than being flipped by a stylesheet.

Technical choices

What the product is built with, and why.

Express on the Bun runtime
Bun runs the existing Express application with a faster startup and a built-in SQL client. The trade is that its driver differs from node-postgres in ways that bite quietly, so those differences are written down as project rules rather than rediscovered.
PostgreSQL with no ORM
The queries here are roll-ups across a hierarchy with per-facility scoping. Written as SQL they can be read and tuned; through an ORM they become something nobody can explain when a report is slow.
Canonical status names, constrained in the database
Status has a fixed internal name and a separate label users can edit. Reports group on the fixed name, so renaming a column heading cannot silently change a chart.
A dashboard contract with sum invariants
Every breakdown must add up to its own total, and the front end checks it. This came out of a period when two screens disagreed about the same figure, which costs more trust than a missing feature.
One notification dispatcher
Every notification goes through a single path, so a new feature cannot invent its own way of reaching people and bypass preferences.
Errors that say nothing useful to an attacker
Server errors return an identifier the user can quote and nothing else. The detail stays in the logs, where it belongs.

Numbers that have to be trusted?

Measurement, permissions and reporting that survives scrutiny is the work we like most. Tell us what you are measuring.