← Back to Work

02 / MOBILE RELIABILITY

Restoring trust in a product that had become unreliable

I took ownership late in a major mobile rebuild. Visually, it was a significant step forward, but reliability was still the bigger problem. I helped move the team from repeated hotfixes toward fixing the tracking system itself.

What was really happening: the tracking system

A failure anywhere breaks trust. The driver feels the same pain.

Role
Product Manager / Lead PM
Company
Cardata
Focus
Mobile · Reliability · Turnaround
Outcome
20+ point gain → 90%+
20+ points → 90%+
acceptable tracking performance
2 platforms
Android + iOS stabilized
Fewer hotfixes
releases grew more predictable

Some of the hardest failures weren't obvious crashes. The app could simply stop tracking, and a driver might not realize anything was wrong until two or three days later, when trips turned up missing. Other issues showed up differently: trips starting late, splitting unexpectedly, routes appearing as straight lines, duplicate trips, backfill and sync problems, and inconsistent behaviour across devices and operating systems.

Across those failure modes, the user-facing question was the same: could drivers trust the app to capture reimbursable mileage consistently? The pattern was persistent enough to require a system-level response rather than another round of isolated fixes.

Underneath, It's a System

Different failures at different points create the same driver experience.

THE QUESTION WE NEEDED TO ANSWER

Where in the tracking journey is trust breaking down?

Reliability patterns
Failures persisted over time.
Support tickets
Volume signaled real pain.
Device & OS variance
Inconsistent across environments.
Backfill & duplicates
Repeated, similar reports.
Platform compatibility
Dependencies created compatibility risk.
Customer sentiment
Trust eroding in feedback.

A GPS mileage product depends on a long chain of events: the device detects movement, the app recognizes a trip, tracking continues in the background, location data is captured, the trip ends correctly, it synchronizes, and mileage reaches the reimbursement platform. A failure anywhere in that chain looks identical to a driver: "the app didn't track my trip." The root causes were rarely the same twice.

Failures looked identical to drivers no matter their root cause. The fix had to address the system, not the symptom.

Key Decision

Stop treating reliability as a backlog of individual bugs. Start treating it as a system.

Option A: Patch the symptoms

One fix at a time

  • Fast relief, one issue at a time
  • Same failures recur under new names
  • Doesn't address root causes
VS
Chosen

Option B: Treat it as a system

The whole chain, together

  • Slower start, but addresses root cause across the chain
  • Every stage gets diagnosed, not just the loudest ticket

Why: Failures looked identical to drivers no matter their root cause. Patching the loudest symptom would have left the underlying chain just as fragile. The fix had to change the unit of analysis from individual tickets to the reliability system itself.

1
Stabilize
Shipped targeted hotfixes to stop the most painful failures.
2
Map the journey
Traced the end-to-end tracking chain and where it broke.
3
Diagnose root cause
Identified which failures happened at each layer.
4
Invest in capability
Built the case to bring the core tracking capability in-house.
5
Add a fallback
Introduced Manual Trip Start for when automation fails.

The dependency became a product decision

We had been addressing issues through incremental fixes to a third-party tracking capability. Eventually the question changed from "what should we ask the vendor to fix next?" to "is continued dependency on this model the right long-term decision?" I built the case to bring the core tracking capability in-house, giving the team more direct control over reliability and iteration.

Before: Vendor Dependency

Cardata External provider Tracking capability Tracking

Request fix → wait → repeat.

After: Capability In-House

Cardata Tracking capability Tracking

Direct influence. Faster iteration.

Android needed different attention

The failure profile wasn't identical across platforms. Rather than treating Android and iOS the same, I pushed for platform-specific expertise where the reliability problems were concentrated. Sometimes the product problem isn't another ticket; it needs different technical expertise.

iOS
Android

Same product. Different failure profile.

Sometimes the product problem isn't another ticket; it needs different technical expertise.

Give drivers a fallback

Automatic tracking remained the ideal experience, but automation without confidence creates frustration. We introduced Manual Trip Start, letting drivers start a trip themselves rather than relying solely on detection. This wasn't an abandonment of automation. It was a fallback for when the normal path failed.

Ideal path

Movement
Auto Detect
Track Trip

Fallback, if detection fails

Movement
Manual Trip Start
Track Trip
Trip recorded

Automation should make the normal path easier without leaving users helpless when the normal path fails.

ChoseGave upWhy
Bring the core tracking capability in-house rather than continue incremental vendor fixes The simplicity and lower short-term cost of staying a vendor customer Continued dependency meant we could only ask, not directly influence, reliability
Platform-specific engineering investment A one-size-fits-all stabilization approach The failure profile differed across platforms
A manual fallback alongside automatic tracking A "pure" automation-only vision for the product Automation shouldn't leave users helpless when the normal path fails

What Changed

20+ points → 90%+
acceptable tracking performance over the course of the stabilization work
Fewer hotfixes
releases grew more predictable as underlying failures became rarer
Confidence restored
Support, CS and Engineering regained trust in the product and the process
The product became more dependable because we stopped treating reliability as a backlog of symptoms and started treating it as a system.

Some product, customer and implementation details have been generalized to protect confidential information.

Next Case Turning reporting into an enterprise differentiator
→