---
title: 'Building a reliable eMSP driver app'
description: 'Lessons from charging apps: session resilience, honest errors, offline mode, and treating the agent as a real product surface.'
author: yacine
date: '2026-07-28'
categories:
  - engineering
  - product
tags:
  - app
  - emsp
  - drivers
  - product
  - engineering
imgSocial: building-a-reliable-emsp-driver-app.webp
imgThumb: building-a-reliable-emsp-driver-app.webp
toc_depth: 3
---

An eMSP app is a real-time systems product wrapped in a consumer UI. Pretty maps are not enough if start and stop are unreliable. Drivers judge you in one moment: did the charger start, and was the bill fair?

This post is how we think about reliability for easyplug — the non-negotiables, the agent layer, and the metrics that actually matter.

## Non-negotiables

### Session state machine

Start, active, stopping, finished, failed — with recovery if the app is killed mid-session. Drivers reopening the app should land on the **live session**, not a blank home screen. Roaming lag is not an excuse for lost state.

### Honest errors

Map every backend code to a human sentence and a next action. “Error 503” is not a product. Prefer classes drivers understand: offline, rejected, timeout, vehicle not ready, payment required.

### Offline and low-signal mode

Show last-known station status, explain RFID / Plug & Charge fallback, and queue stop or start when the network returns. Highway exits are not a fiber lab.

### Price and energy stream

Users stare at kW and €. If the stream stalls, say so. Do not freeze a fake number that will disagree with the receipt.

## The agent layer

A conversational agent only helps if it can:

- Search with real filters (power, free, connector, price when known)
- Start and stop sessions
- Explain failures in the same language as the rest of the app
- Open support with full session context

Otherwise it is a chatbot on top of a broken flow. We treat the agent as a first-class surface, not a demo.

## Metrics that matter

- Remote start success rate (home network vs roaming)
- Time-to-energy after Start
- Stop success and stuck-cable rate
- Support contacts per 100 sessions
- Price dispute rate

We optimize those — not only app-store screenshots. Operators feel the same numbers as utilization and ticket volume; see [OCPP for operators](/blog/ocpp-for-operators).

## What’s next

Deep dives on [roaming failures](/blog/roaming-failed-authorization), [transparent pricing](/blog/transparent-pricing-at-the-charger), and [driver support](/blog/driver-support-when-charging-goes-wrong).

→ [Explore the product](/#features)
