Krishna Doshi
Work
About
Play
Status
Practicing magic

STEMconnect: Designing for the people who decide where an ambulance goes next
Client
SDSI
Year
2025
Status
Live
Skills
Product design
UX research
Design system
Interaction design
Tablet design
Role
Individual Contributor, SDSI, for the NewGen Matrix programme, NSW Health
Scope
Owned UX, UI, design system, and delivery end-to-end across two phases: discovery, building smaller frameworks for each phase's challenges, design system for both tablet and mobile, through to delivery of dark and light mode. Supervisor View shipped first, Hospital Recommendation followed
Overview
A $15.1M NSW Government–funded upgrade to the statewide ambulance allocation system in Australia, built with input from 1,000+ stakeholders. I designed two modules inside STEMconnect: real-time oversight for field supervisors, and the hospital-recommendation flow used on every patient contact statewide.
The two phases, at a glance
Both shipped as independent contributor work: research through delivery, no handoffs between roles. Supervisor View was completed first; Hospital Recommendation followed.
Phase 1: Supervisor View

Concept diagram
What the supervisor was up against
No visibility once they left the station. A supervisor's job is to react fast when something goes wrong: a vehicle off-route, a paramedic in trouble. But they had no way to see any of that remotely. Checking on their zone meant going back to a station to look at desktop CAD, which didn't even separate vehicles from incidents.
Only radio outside the station. That was the full toolkit: slow, scattered, and not visual at all. Not enough to judge something like "is this incident serious enough that I should drive there myself."
Insight: the supervisor's whole job is reacting to the abnormal, but they had no way to spot the abnormal remotely. That changed the brief from "build a dashboard" to "build a dashboard that surfaces problems automatically."

What the supervisor can and can't do
Supervisors can assign an incident to themselves, but they can't assign any other vehicle to one. That stays with CAD. Keeping this boundary in place avoided building a second dispatch system nobody asked for, and kept the supervisor's tools matched to their actual responsibilities.

Building a design system from nothing
STEMconnect, the app this module lives inside, had no design system at all. It was built and shipped without one. So this phase meant working backwards from a live, undocumented app to figure out its visual language, then extending that to a new device (tablet) and a new user type (supervisor) so it didn't feel bolted on.

Tablet and mobile design system for dark and light theme
Decisions I cut or merged, and why
Disposition field showed up on every vehicle status at first. I removed it everywhere except Cancel, that's the only place it actually matters.
ParaSafe alerts had their own separate section. I merged it into the same Status Change list as everything else: two separate alert lists was one too many.
History was vague: status history? shift history? incident history? I turned it into one simple timeline, reused everywhere it's needed.

Information architecture of the supervisor flow
One pattern, used for two different things
Vehicles and Incidents both use the same interaction pattern: drill-down filtering (Jurisdiction, Division, Battalion/Station), map clustering that splits apart as you zoom in, and floating detail views for quick access. One pattern, two use cases, instead of building two separate systems.
There were colour codes for statuses, and the colours for statuses differ per client company (agency).
The filter system was the most-used flow in research: a four-tier multi-select (All / Selected / Favourites, indeterminate checkboxes, live counter) built specifically for the four-level org hierarchy.

Filtering system for the map and panel interaction. (status colors are something we cant control)
The safety-critical moment
A vehicle that's stopped somewhere with no explanation. The Duress system shows this as a hard-interrupt alert: vehicle ID, time stopped, location, so the supervisor can quickly decide to send backup or go there themselves.

Duress banner alert
Skipped, and what we did instead
In-app messaging: kept radio as the main way to contact crews (research confirmed coordination stays on radio)
Full dispatch authority: self-assignment only (keeps CAD as the single source of truth)
Proof points
23 screen states mapped across 4 hierarchy levels for the Vehicles flow alone
First design system tokens built for STEMconnect on tablet, extending a mobile-only app that had no system before
Org scale designed for: up to 3 Divisions, multiple Battalions each, with performance handling specifically built for the full-Jurisdiction view
Phase 2: Hospital Recommendation
The stakes
This flow decides where an ambulance takes a patient, statewide, on every single call. It's part of NewGen Matrix, the NSW Health programme behind the funding and stakeholder numbers above.

Who they are
A paramedic on scene, often gloved, frequently interrupted, working to a 5 to 15 second target before a destination decision is expected. They hold full clinical authority; the system can only suggest, never decide for them. What they need is simple to say and hard to build: a fast, trustworthy answer, with a real way to override it when their own judgement says otherwise.
What was broken
The old flow was five linear multiple-choice screens with no branching and no way to go back.

Older flow with no hospital recommendation
Categories overlapped with each other. "Cardiac," "Stroke/TIA," and "Trauma" showed up in two different steps of the same flow, with no clear rule for which one to pick.
No live data behind the recommendation, just a static list. Four hospitals, ranked by distance only: no ED capacity, no threshold, no real-time status. A paramedic could be sent to an overloaded ED with no warning at all.
No referral-pathway option. Every patient was sent toward an ED, whether they needed one or not. That's the exact problem NewGen Matrix was funded to fix.
No way out. If none of the four options were right, there was no override, no search, and no record of why a paramedic chose something different. A patient with a known specialist at another hospital, or one whose insurance only covered certain facilities, had no way to be routed accordingly.
The fix, one decision at a time
These are the four highest-stakes fixes, explained in full. The rest are listed further down.
1. A real clinical taxonomy, not an overlapping list Adopted and extended NewGen Matrix's own Business Rules model: Age, Branch, Subcategory, Infectious status, with one clear level of detail at each step.

2. Recommendations backed by live data The facility list now pulls ETA, Pre-TOC, PTT, and Threshold live from the Statewide Operational Data Store, instead of a static list.

3. A real way out: Referral Pathways and Override A parallel referral system (browse by LHD, smart pathway-matching, per-facility Eligibility Criteria) keeps patients out of EDs when they don't need one. When an override is needed, Universal Search combines ED, Referral, and Special Destinations into one search, so the paramedic doesn't need to know the category first.

4. Plain-language reasoning, every time a rule is broken Each broken rule gets its own clear sentence at the moment of decision, like "Liverpool Hospital is currently OVER their set threshold." Not a colour code: an actual reason.

Everything else, in brief
Age step added: drives which facilities and categories are even eligible later in the flow
Two separate timers: a 5-minute stale-data refresh and a 2-minute cooling-off period, solving two opposite problems (outdated data vs. unnecessary reloading) instead of using one timer for both
Override reason auto-filled as "No Matrix Options Provided" when the system itself returns nothing: keeps the record accurate without making the paramedic explain a gap that wasn't their fault
Three separate closing paths (Transport / Referred–No Transport / Cancel), each using real NSW Ambulance disposition codes
Multiload handling: the primary patient drives the recommendation, with a clear pop-up when a second patient's needs are different, instead of the system silently deciding for them
Universal Search used throughout: the same search pattern from override is available anywhere a facility needs to be found, not just during override
Patient details visible and editable at every step: no need to start over after a misclick or a changed detail
Edge-case taxonomy: a hospital can support a clinical category on paper but not in practice, like a CT scanner only staffed from 6pm to 8am. Scoped as future work with a labelling system like CT_AVAILABLE=false

Version 1 IA with NSW estimated features, hypothesis, audit IA questions and answers
Proof points
5 to 6 rigid steps, now a live branching flow with referral diversion, override, and three closing paths
5-second / 15-second response targets for critical vs. standard acuity: a hard requirement from the source document that shaped every routing decision
Zero live data sources, now four (ETA, Pre-TOC, PTT, Threshold), pulled directly from the Statewide Operational Data Store
Zero staleness handling, now two purpose-built timers, each solving a different failure mode
Reflection
Both phases came down to the same thing, even though the problems looked nothing alike: find where the system stayed silent (no reasoning, no way out, no record of decisions) and fix that, not just the screens that looked outdated.
What I'd still defend: keeping override fast, even for safety-critical flags, instead of adding an extra step that slows a paramedic down at the worst possible moment.
What I'd reconsider: the "technically available but not actually usable" hospital problem is real and still unsolved beyond a labelling proposal. I'd push to get it built as a tracked data field earlier, instead of leaving it as a known gap for later.


Built light and dark theme both. Map interaction for incidents and vehicles also can be seen here.




Built responsive screens for mobile as well as tablet in both the modes
Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem ;)

PREV
NEXT





Lorem Ipsum lorem ipsum
Page
Work
Play
About
Say Hi!
Resume
Krishna Doshi




