Designing for Practical Decentralization
Uber, whatever its faults, provides value to its users, both the drivers and the riders. People appreciate or even enjoy the service, even if they don’t like the corporate behavior or economic disruption. Solutions seem to mostly include boycotts (in favor of taxis or competitors like Lyft) and legal action. But most of those those solutions are pushing water uphill, because people actually like the service.
I have another solution: let’s rebuild the service without any major company involved. Let’s help software eat the world on behalf of the users, not the stockholders. In this post, I’ll explain a way to do it. It’s certainly not trivial, and has some risks, but I think it’s possible and would be a good thing.
The basic idea is similar to this: riders post to social media describing the rides they want, and drivers post about the rides they are available to give. They each look around their extended social graph for posts that line up with what they want, and also check for reasons to trust or distrust each other. That’s about it. You could do this today on Twitter, but it would take some decent software to make it pleasant and reliable, to make the user experience as good as with Uber. To be clear: I’m aiming for a user experience similar to the Uber app; I’m proposing using social media as an underlying layer, not a UI.
What’s deeply different in this model is the provider of the software does not control the market. If I build this today and get millions of users, someone else can come along tomorrow with a slightly better interface or nicer ads, and the customers can move easily, even in the middle of a ride. In particular, the upstart doesn’t need to convince all the riders and driver to switch in order to bootstrap their system! The market, with all its relationships and data are outside the ridesharing system. As a user, you wouldn’t even know what software the other riders and drivers are be using, unless they choose to tell you.
With this approach, open source solutions would also be viable. Then the competition could arise quite literally tomorrow, as someone just forks a product and makes a few small changes.
This is no fun for big money investors looking for their unicorn exit, but it’s great for end users. They get non-stop innovation, and serious competition for their business.
There are many details, below, including some open issues. The details span areas of expertise, so I’m sure I’ve gotten parts incomplete or wrong. If this vision appeals to you, please help fill it in, in comments or posts of your own.
Perhaps the hardest problem with establishing any kind of multi-sided market is getting a critical mass of buyers and sellers. Why would a rider use the system, if there are not yet any drivers? Why would drivers bother using the software when there are no riders? Each time someone tries the system, they find no one else there and they go away unhappy.
In this case, however, I think we have some options. For example, existing drivers, including taxi operators, could start to use the software while they’re doing the driving they already do, with minimum additional effort. Reasons to do it, in addition to optimistically wanting to help bootstrap this: it could help them keep track of their work, and it could establish a track record for when riders start to show up.
Similarly, riders could start to use it in areas without drivers if they understand they’re priming the pump, helping establish demand, and perhaps there were some fun or useful self-tracking features.
Various communities and businesses, not in the ridesharing business, might benefit from promoting this system: companies who have a lot of employees commuting, large events where parking is a bottleneck, towns with traffic issues, etc. In these cases, in a niche, it’s much easier to get critical mass, which can then spread outward.
Finally, there are existing ridesharing systems that might choose to play in this open ecosystem, either because their motivation is noncommercial (eg eco carpooling) or because they see a way to share the market and still make their cut (eg taxi companies).
In the model as I’ve described it so far, there’s no privacy. If I want a ride from San Francisco to Sebastopol, the whole world could see that. My friends might ask, uncomfortably, what I was doing in Sebastopol that day. This is a tricky problem, and there might not be a perfect solution.
In the worst case, the system ends up as only viable for the kind of trips you’re fine being public, perhaps your commute to work, or your trip to an event you’re going to post about anyway. But we can probably do better than that. I currently see two imperfect classes of solution:
There might also be cryptographic solutions, perhaps as an application of homomorphic encryption, but I’m not yet aware of any results that would fully address this issue.
When I was much younger, hitchhiking was common. If you wanted to go somewhere without having a car, you could stand on the side of the road and stick out your thumb. But there was some notion this might be dangerous for either party, and in some places it became illegal. (Plus there was that terrifying Rutger Hauer and C Thomas Howell movie.) There have been a few stories of assaults by Uber drivers, and the company claims to carefully vet drivers. So how could this work without a company like Uber, standing behind the drivers?
There are several approaches here, that can all work together:
One of the great things about the Uber experience is not having to think about money, dig for cash, or decide how much to tip the driver. For me, personally, it feels good to end the ride with thanks, instead of payment, even though I know I’m actually paying.
I think this part’s pretty easy to decentralize. Each party can post the details about pricing and the payment mechanisms supported, including cash, check, credit card, paypal, venmo, square cash, and bitcoin. Some of these resolve or settle later, but the same reputation/trust mechanism used for personal safety should, I think, be able to handle this. If the transaction is canceled hours after the ride, the aggrieved party should be able to make evidence of this clear in their review.
In the worst case, there could be safe-payment services that agree to absorb some of the risk of the transaction, giving more guarantees to both parties, in exchange for higher fees. One of the companies trying to compete with Uber today might consider going into this business, perhaps along with the driver-certification business. They can be like IBM supporting open source to beat back the Microsoft monopoly: they’ll never have the scale to beat Uber by themselves, but if they join the team of “everyone else”, they can probably carve out a nice market segment for themselves.
Now we turn to details about the use of social media to decentralize applications.
Which social media should these ridesharing apps use for posting their announcements and looking for announcements from others? Twitter, Facebook, Mastodon, Instagram, … or something set up just for this service? LinkedIn?
I think the answer is: all of the above, if they include the necessary functionality, as detailed below. Right now, I think that’s Twitter and Mastodon, but there may be a way to make other systems behave as needed.
Of course, no one wants to see a lot of irrelevant ridesharing posts. This is a special case of the general problem of Context Collapse: when we try to unify communications, to get economies of scale and critical mass, we can end up involved in a lot of unwanted communications.
I see three solutions here. I’m most optimistic about the last one:
What would the actual posts look like? Current software industry trends would suggest something like {“rideFrom”:{“lat”:42.361958, “lon”:-71.09122}}. This kind of JSON data works well when one organization controls the data format, but it breaks down when people do not all agree on all the syntactic and semantic details of the format. Even if people are inclined to agree, actually getting it well specified is difficult and time consuming. (Ask anyone who’s been involved in a data interchange standardization effort.)
A somewhat more palatable approach would be be JSON-LD, with multiple schemas from different sources, and an understanding that consumers need to know how to work with them all.
My favorite approach is to use natural language sentence templates. Instead of all agreeing we’ll use JSON and the ‘rideFrom’ property, etc, apps use strings that read like natural language sentences, conveying exactly what they mean, but which can easily be parsed using declared input templates. This concept also needs a post of its own, so I’ll go into that separately.
It’s great if I can catch ride from an existing contact, but in most cases, I will need to reach farther out my social graph. Some systems, like Twitter, make that public. Some don’t. Twitter’s graph, however, is not endorsement or trust. I follow a few unpleasant and untrustworthy people to keep track of what they’re up to. So we need some trust data in the social graph. This is hard.
Some wild ideas:
An alternative to having the social graph be visible is to have user-configured bots which automatically boost some posts on the user’s behalf. If a friend of mine is looking for a ride, my bot can post that my friend is looking for a ride, etc.
That’s what I’ve got. Looking back, I can see it’s quite a lot. Have I made anything harder than it needs to be? Is there a nice MVP that can ignore the complex issues? Are there other problems I’m missing?