Skip to content
Product Design Human–Robot Interaction 8–10 min read

Designing the human command layer
for autonomous campus delivery.

One autonomous system. Two radically different experiences.

Role
Product Designer
Duration
8 weeks
Focus
HRI · Fleet operations · AI product design
Platforms
iOS + Web
Contribution
The two-product boundary, both experiences end to end, and the AI authority model between them

Three nodes orbiting one core — the identity was built around the actual product shape: a fleet in motion around a single coordinating layer.

  • VYN User · iOS
  • VYN Command · Web
  • One shared mission object

In short

Autonomy is the easy part to demo and the hard part to hand to people.

A robot that drives itself across campus still needs two humans to succeed: someone who trusts it enough to hand over a package, and someone who can tell within seconds whether the fleet is fine. Those two people need almost nothing in common, and building one interface for both is the most common way this category fails.

The problem

Campus delivery fails on coordination, not distance. And the system that solves it produces two irreconcilable users — a student with four minutes between classes, and an operator responsible for a dozen autonomous machines at once.

What I owned

  • The decision to build two products instead of one app with a role switch
  • VYN User end to end — request, send, track, handoff, and every exception
  • VYN Command’s information architecture and the attention-queue model
  • The AI behaviour spec: what the system may claim, recommend, automate, and must escalate

The outcome (honest)

A designed system and a validated interaction model — not an operating fleet. No robot ran on this design. What exists is a product boundary, two complete experiences, an AI authority model, and a measurement plan for the claims I could not yet test.

There are no fleet KPIs on this page, because I did not own a fleet.

The box I was designing inside

Four constraints did more design work than any idea I had.

A closed campus is not a small city. The boundaries are tighter, the identities are known, and the time budget is brutal — which rules out most of what consumer delivery apps do.

Scale 1,500 acres One campus, fixed map, known buildings — routing is solvable, so routing is not the product.
Identity Verified UIDs Everyone is already authenticated. Stranger-danger patterns from consumer delivery are dead weight here.
Time budget 5–15 min The class-break window. Anything that needs the sender to wait for a reply has already failed.
Surface 2 products One autonomous system, two human roles with opposite information needs and opposite tolerances for complexity.

Problem & stakes

The problem isn’t distance. It’s coordination.

A ten-minute walk across campus is not a ten-minute task. It becomes a forty-minute interruption once you add remembering, finding a window, locating a person inside a building, waiting for them to show up, and getting back late. The walk is the only part anyone would have estimated.

Today Six steps Five of them are coordination, not transport.
  1. 01RememberEasy to forget entirely
  2. 02Find a windowBoth calendars must agree
  3. 03WalkDetour between classes
  4. 04LocateBuilding, floor, desk
  5. 05Hand offBoth people, same place, same minute
  6. 06ReturnAlready late
With VYN Three steps The sender’s obligation ends at the drop-off.
  1. 01RequestRecipient, item, pickup point
  2. 02LoadRobot arrives at the sender
  3. 03DoneTracking continues without them

The distance is unchanged. What collapses is the number of moments where two people have to be synchronised — from five down to one, and that one happens on the sender’s schedule.

Strategy pivot

The breakthrough wasn’t a better waiting state. It was removing the waiting state.

My first flows had the sender pick a person, then wait for that person to accept. I spent a week designing the waiting screen — pending states, nudges, expiry timers, a graceful way to fail. All of it was craft applied to a step that should not have existed. Inside a five-minute class break, a pending state is a dead end with good typography.

Before · person-to-person

Sender requests
  • Recipient in class — waiting
  • Recipient off campus — waiting
  • Recipient never opens the app — expired

Every branch parks the sender in a state they cannot resolve, during the only free minutes they have.

After · department pre-acceptance

Sender requests
  • Department desk has standing acceptance — robot proceeds
  • Person available now — direct handoff
  • Desk closing soon — next open window offered before send

Departments accept once, as a policy, instead of individuals accepting every time. The recipient stops being a blocking dependency.

What this decision cost

Pre-acceptance is an organisational commitment, not a feature. It needs a department to agree that a robot may leave a package at its desk during posted hours, and someone there to own what arrives. That is a policy conversation I could scope but not close — so the design has to work when a department says no.

How the design absorbs a “no”

Person-to-person sending stays as a first-class path with an honest constraint attached: it is offered when the system has signal that the recipient is reachable, and it carries a visible risk of return. The pivot changes the default, not the option set.

Accountability

What I owned — and what I didn’t.

This was design work wrapped around an autonomy stack I did not build and a university policy surface I did not control. Being precise about that boundary matters more than sounding senior about it.

I owned

  • The product boundary Argued that VYN is two products sharing one mission object, not one application with a role switch — and defined what each side is allowed to know about the other.
  • VYN User, end to end Request, recipient selection, pickup, review, robot assignment, live tracking, secure handoff, completion, and every exception path including the ones that end in a return.
  • VYN Command’s information architecture The attention-first structure, the robot-as-object detail view, the incident workspace, and the rule that direct teleoperation is entered deliberately rather than sitting ambient on a dashboard.
  • The AI authority model What the system may observe, explain, recommend, automate without asking, and must escalate — plus what an operator sees before approving anything consequential.
  • Failure and degradation states What both products do when the recipient is gone, the department is closed, the robot stops, the compartment won’t lock, or the prediction service is unavailable.
  • The shared design system Status language, semantic colour rules (never colour alone), map markers, and the component set that makes one team’s alert legible to the other team’s screen.

I did not own

  • The autonomy stack Routing, localisation, obstacle handling and safe-stop behaviour were given to me as capabilities with known limits.
  • The prediction models Battery-at-destination, ETA and orchestration scoring. I designed how their output and uncertainty are shown, not how they compute.
  • Hardware and safety Chassis, payload compartment, sensors and certification.
  • University policy Who may send, who may receive, which departments participate, and who is accountable when something goes missing.
  • Roadmap and deployment Whether this ships, in what order, and on which buildings first.
  • Production instrumentation Which is the direct reason the impact section below claims no operational metrics.

Decisions & tradeoffs

Four decisions that shaped the system.

Each of these had a credible alternative that a reasonable designer would have picked, and each one cost something real. The costs are listed because they were accepted knowingly, not discovered afterwards.

01

User experience

Hide the robotics. Show the outcome.

Decision

The user-facing product exposes one machine fact — where the package is and when it arrives. Telemetry, robot identity, fleet state and every other robot on campus stay out of the interface entirely. The user tracks a delivery, not a machine.

Alternatives considered

Show the fleet map with all robots, which is what every robotics demo does because it looks impressive. Or expose battery and sensor confidence as a transparency feature, on the argument that autonomy earns trust by being legible.

Why I chose it

Transparency only builds trust when the person can act on what they see. A student cannot do anything with “localisation confidence 91%” except worry. Exposing it transfers operational anxiety to someone with no authority to resolve it — the worst trade in the system.

Cost accepted

When something goes wrong, the user has no independent way to verify what happened, so the exception copy has to do all the work — and if it ever lies, the whole abstraction collapses at once. I also gave up the demo appeal of a live fleet map, which is the single thing stakeholders ask for first.

02

Operations

An attention queue, not an equally-lit map.

Decision

Command opens on what needs a human, ranked, with the map as supporting context rather than the primary object. Twelve healthy robots produce one line of text; one at-risk robot produces a card with a recommendation attached.

Alternatives considered

The conventional fleet console: a full-bleed live map where every robot renders identically and the operator scans for anomalies. Or a dashboard-first layout leading with utilisation and throughput charts.

Why I chose it

An equal-density map makes the operator’s job pattern-matching against a moving picture, and that degrades exactly when the fleet is busiest. The target was five seconds to answer four questions: is anything wrong, which robot, why, and do I need to act. A ranked queue answers all four; a map answers none of them without interpretation.

Cost accepted

The queue is only as good as the ranking behind it, so a missed signal is now invisible rather than merely hard to spot — a map at least gives the operator a chance to notice something the system didn’t flag. Experienced operators also lose the ambient spatial awareness they build from watching a map, which is real skill I am deliberately trading away for triage speed.

03

AI behaviour

AI recommends. Humans approve anything with consequences.

Decision

The system automates only reversible, low-consequence actions — a minor reroute around congestion, a charging decision for an idle robot. Anything that changes what a user was promised, moves a mission between robots, or touches a stopped robot requires an explicit human approval with the expected consequence stated before the click.

Alternatives considered

Full autonomy with exception-only escalation, which is where fleet products eventually want to go and where the operational savings are. Or the opposite: advisory-only AI that never acts, on the grounds that oversight is safer when nothing is automatic.

Why I chose it

Full autonomy asks for trust the system has not earned on day one, and the first bad automatic decision would end operator confidence permanently. Advisory-only is the reverse failure — it buries the operator in confirmations for things nobody would ever say no to, which is how approval becomes reflex. Splitting on consequence and reversibility keeps approval meaningful in the moments where it actually is.

Cost accepted

A human in the loop is a latency floor: incidents wait for someone to look. The model also does not scale — it holds for a campus fleet and breaks somewhere past the point where one operator can read every recommendation. Worst of all, the boundary between “reversible” and “consequential” is a judgement I encoded, and a wrong call there is invisible until it causes an incident.

04

Product strategy

Predict availability instead of asking for it.

Decision

Remove the acceptance handshake from the critical path. Departments carry standing acceptance during posted hours, and for person-to-person sends the system predicts reachability from class patterns, past acceptance and building access — then warns before confirm rather than failing afterwards.

Alternatives considered

Keep the handshake and make waiting pleasant: live status, nudges, a generous expiry. Or schedule everything in advance so both parties commit to a slot up front.

Why I chose it

Both alternatives solve the wrong problem. A better waiting screen still consumes the class break, and scheduling reintroduces the calendar negotiation the product exists to eliminate. Prediction moves the uncertainty to where it is cheap — before the user has committed anything — and leaves them with a choice rather than a pending state.

Cost accepted

The system now makes a claim about a person’s availability, which is a claim it can get wrong and which touches privacy in a way an acceptance tap does not. I kept the signals coarse and campus-scoped for that reason, and accepted weaker predictions as the price. There is also a cold-start hole: a new recipient has no history, so the first send to anyone is the least informed one.

One system, two humans

Users should not need to understand robotics. Operators should not need to hunt for what a robot needs.

Same robot. Same minute. Same mission. Below is Mission #482 rendered for both people — the clearest test of whether the two-product boundary actually holds, because if one side needs something from the other’s screen, the split was wrong.

VYN User · iOS

Trust autonomy without managing it

One fact, one place, one action if needed. No robot identity, no fleet, no telemetry.

VYN Command · Web

Understand autonomy without constantly controlling it

Fleet state compressed to one rail, and the single thing that needs a person next to the action that resolves it.

Both interfaces are rebuilt in HTML and CSS from the design files rather than pasted in as flat exports, so the type, states and data stay legible at any width. The values shown are the worked example I designed against.

AI product rigor

Reduce attention without removing authority.

An operations AI is not a feature you add to a dashboard — it is a set of standing permissions. The design work was deciding where each of those permissions stops, and what the product does on the day the model is confidently wrong.

The escalation ladder

01

Observe

System

Detects the condition and states it plainly. No interpretation yet.

02

Explain

System

Adds the signals behind it, so the operator can check the reasoning rather than trust it.

03

Recommend

System

Proposes one action with its expected consequence and at least one alternative.

04

Approve

Human

The gate. Anything consequential stops here until a person accepts, modifies or refuses it.

05

Automate

System

Only reversible, low-consequence policies run unattended — and every one of them is logged where the operator reads it.

06

Escalate

Human

Safety, property or a stopped robot. The system stops proposing and simply hands over.

What an operator sees before approving anything consequential

  • What happened
  • Why — the signals used
  • Confidence, and what it is based on
  • Recommended action
  • Expected consequence
  • At least one alternative
  • Override, always

Authority model

Where the line sits, case by case.

Minor congestion on a route Reroute and log it Nothing — it appears in the activity log
Battery predicted below reserve at destination Propose a transfer with a named replacement Approve the transfer
Path blocked, robot stopped safely Diagnose and offer reroute or remote assist Choose the action
Payload compartment fails to lock Hold the mission and notify Decide between return and field recovery
Anything the recipient would notice — destination change, ETA slip beyond 3 min Recommend only Approve before the user is told

The last row is the one I argued hardest for. The user-facing abstraction from Decision 01 only survives if no machine can quietly change what a person was promised.

Failure model

Five ways this gets worse over time, and what holds it.

  • Approval becomes reflex. If operators approve everything without reading, the gate is theatre. The queue is capped, every recommendation must state a consequence in plain language, and there is no bulk-approve — deliberately, even though operators will ask for one.
  • Confidently wrong prediction. An 88% confidence that reads like certainty is worse than no number. Confidence is always shown with its basis — “41 comparable runs” — and a recommendation with thin history says so instead of rounding up.
  • Automation drift. Low-consequence policies accumulate until nobody remembers what runs unattended. Every automated action lands in the same log the operator already reads, and the policy list is a visible, editable surface rather than a config file.
  • The model is unavailable. Command degrades to raw telemetry and manual dispatch with an explicit banner — never to a blank dashboard, and never to a dashboard that looks healthy because nothing is being evaluated.
  • Explanations that can’t be checked. A rationale nobody can verify trains people to skip reading it. Every explanation names the signal it used, and when the evidence isn’t there the system reports the condition without proposing a fix.

Impact

What this work actually produced.

No robot ran on this design, no fleet was operated, and no delivery was completed. I would rather be precise than impressive, so this section separates what the work produced, what a small amount of testing supported, and what I would have to measure before defending any of it.

01 — Design outcomes

The concrete deliverables: a defended two-product boundary with a shared mission object, two complete experiences including failure paths, an attention-queue pattern for fleet triage, an AI authority model that maps actions to who decides, and a tablet deployment flow that lets a non-specialist bring a robot online without touching motor-level configuration.

  • 2 productsFrom one system, with an explicit contract between them
  • 6 rungsEscalation ladder covering every AI action in the product
  • Exceptions firstRecipient gone, desk closed, robot stopped, compartment jammed, model down

02 — What validation showed

I ran informal walkthroughs with campus students and department front-desk staff — not a study, and not enough people to claim a result. What I was checking was comprehension: could a sender predict what happens next, and could a desk staffer say what a robot arriving at their counter would require of them.

  • Held upRemoving the acceptance step read as obviously correct to senders; nobody asked to see the robot’s battery.
  • Held upDesk staff understood standing acceptance immediately — it maps to how mail and packages already work at a front desk.
  • BrokeThe availability warning was read as a system error rather than advice, which sent me back to rewrite it as a choice with two visible options instead of a caution.
  • UnresolvedNobody could tell me what they would do if a robot arrived and the desk was unexpectedly unstaffed. That gap is a policy question, not a copy question.

03 — What I would measure first

Each of these exists to catch a specific way one of my decisions could be wrong. If I were handed a pilot tomorrow, this is the instrumentation I would ask for before anything else.

  • Completion rate for first-time sendersTests Decision 01 — whether hiding robotics removed friction or hid something people needed.
  • Department opt-in and withdrawal rateTests Decision 04 — whether pre-acceptance survives contact with real departments, or gets revoked after the first awkward delivery.
  • Time to first action on an attention itemTests Decision 02 — whether the queue actually beats a map, measured when the fleet is busy rather than idle.
  • Approval rate versus override rate on recommendationsTests Decision 03 — an approval rate near 100% means the gate has become reflex and the authority is fictional.
  • Second-intervention rate after an approved actionWhether recommendations actually resolve incidents, or just defer them by a few minutes.
  • Handoff timeout rate by building and hourTests the 5–15 minute window assumption the whole product is built on.

How to read this page

Every figure above describes the design or a walkthrough observation. None of them is an operational metric, a pilot result, or a production outcome — because I did not own instrumentation, and inventing the numbers would make the honest parts of this case study worthless too.

Reflection

The question changed halfway through, and that was the work.

I started on “how should a robot delivery app work?” and finished on “how should humans interact with an autonomous system when they carry completely different responsibilities for it?” Everything good in this project came after that second question replaced the first — including the decision to stop designing one product.

Limitations I’d state in an interview before you asked

  • No field deployment. Every claim about operator speed or sender confidence is a design argument, not an observed result. The attention queue has never been used during an actual bad afternoon.
  • The strategy depends on a commitment I couldn’t secure. Department pre-acceptance needs institutional buy-in. I designed the fallback, but the headline strategy is contingent on a conversation that never happened.
  • Single-campus assumptions throughout. Fixed map, verified identities, short distances, one operator. Loosen any of those and at least two of the four decisions need re-arguing — the authority model first.
  • AI behaviour is specified, not evaluated. I defined what the system may claim and when it must defer. I never saw it be wrong in front of a real operator, which is the only test that matters for a trust model.
  • Accessibility is designed to guidelines, not tested with people. Contrast, focus order, non-colour status and reduced motion are all handled in the system. None of it has been through assistive technology with an actual user.

What I’d do differently

  • Talk to a department in week one. The pivot that shaped the whole product rests on organisational behaviour, and I validated it with users long before I pressure-tested it with the institution that has to agree to it.
  • Design the log before the dashboard. I built the attention queue first and the activity log second. It should have been the reverse — what the system did unattended is the record that keeps automation honest, and it deserved to be a primary surface rather than a tab.
  • Write the failure copy earlier. The abstraction in Decision 01 puts enormous weight on exception messages, and I wrote them last. The availability warning that tested badly is the direct consequence of treating that copy as finishing work.

The four rules the system ended up running on

UserTrust autonomy without managing it.
OperatorUnderstand autonomy without constantly controlling it.
AIReduce attention without removing authority.
SystemDesign the failures as deliberately as the successes.