Nearly 1,000 fake bookings a day, and nothing inside the app could stop them
A MiCab driver gets a request and drives across Cebu to the pickup. They wait. Nobody comes. The meter only starts when a passenger gets in, so the fuel and the time are gone, and the trip pays nothing. The next request pings. They ignore it.
By July 2018 this happened about 29,000 times a month, or nearly 1,000 a day. We called them phantom bookings.
| Product | MiCab, a Cebu taxi-hailing app. Passenger app on iOS and Android, and a driver app for partner taxi franchises |
| Time | 6 weeks in 2018, until a booked TV business interview |
| My role | The only designer on a team of eight. I owned the driver interviews, the driver app and the rules for who gets the next request |
| Not mine | Matching and pricing |
| Constraints | No new fees, budget or channels. The fake bookings would keep coming the whole time |
MiCab only made money when drivers accepted requests. Phantom bookings taught drivers that a request might be worth nothing. So they stopped accepting, and bookings fell with them. MiCab had 6,500 active drivers against a target of 15,000, and the taxi owner franchises who pick an app for their whole fleet were watching.
MiCab only made money when a driver accepted a request. In June 2018 there had been 15,000 phantom bookings. Drivers learned fast. They stopped trusting requests, so they stopped accepting them, and bookings fell with them. MiCab had 6,500 active drivers, against a target of 15,000.
The cause was out of reach. The product couldn’t stop the no-shows, or the recruitment calls that MiCab said came after them. That fight sat with a complaint at the LTFRB, the transport regulator, and it would not be settled in a quarter.
And there was a deadline. A TV business segment that interviews emerging companies in transportation had booked MiCab. We wanted to show the fix there to taxi owner franchises, the operators who decide which app their whole fleet uses.
What’s missing from this page
You won’t see the driver app here. MiCab licensed it to partner taxi franchises for their own use, so it was never published and I can’t capture it. I’d rather not pass off a mock-up as the real thing, so the line sketch further down is labelled as a sketch. I no longer have the old design files either, so there are no early versions to show.
The phantom booking figures come from news reports. The trip figures further down are rough, from my memory of MiCab’s operations data, which was internal and never published. The claim that a competitor was behind the bookings is MiCab’s claim, as the press reported it. The competitor denied it, and nobody ever published a finding, so this page doesn’t name them.
I couldn't stop the fake bookings, so I changed who gets the next request
When a passenger doesn’t show, the driver who lost the fare gets the next real request first.
Line of free drivers
- Driver Bwaiting
- Driver Cwaiting
- Driver Ajust had a phantom booking, back in line
Requests
- New account0 completed trips
- Passenger38 completed trips
- New account0 completed trips
Requests arrive with nothing to go on, and the driver who just lost a fare waits like everyone else.
Line of free drivers
- Driver Ahad a no-show, moved to the front
- Driver Bwaiting
- Driver Cwaiting
Requests, ranked by completed trips
- Passenger38 completed trips
- New account0 completed trips
- New account0 completed trips
The burned driver gets the next request, and it is the one most likely to be real. No claim to file, no fund, no fraud check.
One driver, one bad pickup
Follow Driver A from the sketch. They just drove to a pickup with nobody there.
Before the change, Driver A goes back to the end of the line, like everyone else. The next request they see could be from a brand new account with no trips. They’ve just been burned, so they skip it, or they turn the app off for the day.
After the change, the app puts Driver A at the front of the line on its own. They don’t file a claim or call support. And the request that reaches them first is the one most likely to be real: a passenger with a record of finished trips. The request card says so, with a badge: “Requested by a repeat passenger”. Driver A still decides whether to take it. This time there’s a reason to.
Both changes only change the order. That’s why neither needed a compensation fund or a fraud check.
Four calls got me to those two changes.
1. Why I stopped chasing fake accounts and changed who gets the next request
The brief said fewer no-shows. MiCab already had an automatic ban after three cancellations, and the regulator was chasing the same goal. But a banned passenger could sign up with a new number that same afternoon.
So I proposed guerrilla interviews, wrote the questions, and rode along with 11 drivers on the job. I wanted to see what drivers did after a no-show, and how they felt about MiCab against the competition.
The drivers surprised me. They weren’t leaving over pay, and they had already made peace with some bookings being fake. What they had lost was a reason to take the next risk. A no-show would start it, and a recruitment call would often follow within a day.
That changed the question. Not “How do we stop the no-shows?” but “How do we make a request worth accepting while they keep happening?”
Rejected: Keep the automatic ban and keep chasing accounts.
Why not. Any passenger can get a new number, so a ban list always leaks. And it did nothing for the driver's next request.
Rejected: Run a campaign telling drivers that we're handling the no-shows.
Why not. It answers a trust problem with a promise.
The log made the ban look smart at first, because most cancellations came from new accounts. But so did most honest new passengers. The ban kept flagging real people, it had no way to stop, and acceptance didn’t move.
2. Why a driver who got burned goes to the front of the line
“First time it happens, it’s fine. I’ll take that rather than just being idle. But 2 or 3 more times, it’s too much. I will probably not use it until the next day.”
A MiCab driver, on a ride-along
Before, a driver who lost a fare to a no-show went back in line like everyone else. That was the moment we lost them. After a phantom booking, a driver’s next accepted request came 4 to 5 hours later, or the next day.
The cost: moving one driver up means another driver waits longer. Fairness in the line became a product decision, and it was ours.
3. Why finished trips, not account age, decide whose request comes first
To rank requests, I needed one sign that a booking was real. The data had a few candidates.
Rejected: Account age.
Why not. New accounts are cheap to make. Most no-shows came from new accounts, but old accounts failed too.
Rejected: Pickup distance.
Why not. It tells you how much a failed trip costs, not how likely it is to fail.
The cost: a new passenger has no history. So the rule rewards passengers who already succeed, which is the opposite of growth.
4. Why I said no to the one thing drivers asked for
On the ride-alongs, drivers asked for one thing: to see whether the person booking was a new user, so they could skip those requests. It was the obvious feature, and it came straight from the people we were trying to win back.
Rejected: Show drivers when a passenger is new.
Why not. Drivers would skip real new passengers too, and their first ride would fail. Getting more passengers was one of our top priorities.
Ranking by completed trips put the likeliest real requests in front of drivers. The badge marks repeat passengers, not new ones, so nothing on the card teaches drivers to skip every new face. I come back to this one at the end, because I’d now test a softer version.
Where it was heading: a score for both sides
This part was still in development when I left in November 2018, so the options were open. Scoring only passengers protected drivers, but it assumed every driver was honest. Scoring only drivers protected passengers, and it left drivers with all the risk.
Drivers took requests again the same day, and new passengers paid for it
A Cebu taxi made about 12 trips a day. This is what one day looked like for a partner driver.
| A driver’s day | MiCab trips out of about 12 | After a phantom booking |
|---|---|---|
| Before the phantom bookings | About 7 | Not an issue yet |
| Phantom bookings, before the change | 2 at most, often none | Next accepted request 4 to 5 hours later, or the next day |
| After the change | About 5 | Next accepted request much sooner |
So a burned driver’s MiCab trips more than doubled, from 2 a day at most to about 5.
These are rough figures from my memory of MiCab’s operations data. That data was internal and was never published.
Support also stopped getting tickets from drivers asking why they should bother turning the app on.
Drivers knew about the phantom bookings, and we told them about the change. But accepting a request was always their choice. So the result is in what drivers did: they started accepting requests again on the same day as a phantom booking.
What I’d change: a new passenger has no finished trips, so their first booking lands at the back of the line. New passengers were exactly the people we most needed to grow.
What I’d do differently
Moving a burned driver up needs no history. Ranking passengers does, and that’s the gap. A new passenger has no completed trips, so their first booking goes to the back of the line. New passengers were exactly the people we most needed to grow.
In 2018 we chose not to show drivers who was new. Next time I’d test a softer version of what they asked for. I’d flag first bookings on the driver’s request card as a possible no-show, with the pickup distance setting how strong the warning is. The driver decides whether to take the risk. Behind the scenes, I’d limit how far a new passenger’s request travels until they finish one trip.
That idea has four risks:
- Nobody knows the real rate. If 1 first booking in 20 is a no-show, the flag warns drivers away from a group that is 95% honest.
- Two rules would squeeze the same group. A flagged new passenger might never get a ride, stay flagged, and prove the flag right.
- Distance shows what a lost fare costs, not how risky the booking is.
- MiCab’s real trip data was never published, so I can’t check these ideas against it.
What I took from it
I would never have come up with these decisions if it weren’t for the guerrilla interviews. The numbers were already known. They told us drivers had stopped accepting. Only the ride-alongs showed why: drivers had already made peace with the fakes, and what they needed was a reason to take the next request. That’s what moved the work from stopping no-shows, which wasn’t ours to fix, to ordering requests, which was.
The passenger app’s look
I designed the passenger app’s visual system. I chose a rounder typeface to match the rounded shape of the MiCab logo. I drew custom map icons and badges, and I built the whole colour scheme on Tailwind’s colour system.





Sources
- Inquirer, 27 July 2018: MiCab’s driver pool, its 15,000-driver target and the phantom bookings
- BusinessWorld, 24 July 2018: MiCab’s phantom booking allegation
- Rappler, July 2018: MiCab’s CEO on the bookings and the recruitment calls
- Rappler, July 2018: the competitor’s response
- BusinessWorld, 30 July 2018: the competitor’s denial
- Inquirer, 2018: the competitor considers legal action
- Wikipedia: Transportation in Metro Cebu, for the trips a taxi makes in a day
A note on the phantom bookings. Nothing was substantiated, and we were not able to pinpoint the culprits for the coordinated phantom bookings. But the phantom bookings were real, and they were a major disruption to the business.
