Uber-like app in no time with JavaScript and secret sauce

TLDR: This ultimate success story is about how technology comes to a very remote and hardly accessible regions, how I made Uber-like app, and how I achieved more than 10 thousand registered users in my app in less than 1 month. At the end of this story I’ll give you some advice on how to represent your business in these regions.

Uber, a company evaluated at $60B, will unlikely go to remote Siberian region where I was born. About 1000 people still live there. It’s not far from Russian Silicon Valley — Academgorodok in Novosibirsk, only 80 miles. But there is no road to such villages: deepest forest, Taiga, and the river. It takes about 2 days to get there by boat.

Sometimes I think that nobody understands remote regions better than me. And I don’t mean Russia only. I lived in 10 countries before I settled down in San Francisco Bay Area. I found that problems in Russian remote regions are very similar to problems Indian/Nepali remote regions have. And I expect they are the same somewhere outside of big cities in South Africa, China, Latin America and Middle East.

I remember when I visited my relatives in Siberia ~10 years ago, and explained them how cellphone works. They never heard about that and now they are lucky to have their own cell tower. Now they have few computers, mobile phones, internet connection. They use motorbikes to get to the same villages around in summer, and use special light vehicles to do the same in winter time. But with all of the technology available they’re still struggling with problems western civilization solved already.

Winter is about to start in Siberia. No Uber, no roads, no reliable Internet connection.

To my surprise, when I visited my native village 2 years ago, nobody knew what Uber is. I explained how entire business works to locals and I’ve heard very positive feedback. “It would be nice to have such thing here”, — told Mikhail, Siberian farmer and father of 4. It sparked my interest in finding solution for the problem and we quickly created Facebook group for that.

Idea was that anyone can post request for a ride to the group. Others should check the group before going somewhere. Later I found that exactly the same idea works for residents of Austin, TX. 36 thousand members ask for a ride when they need it. Drivers are notified via Facebook mobile app. Unfortunately it didn’t work in my Siberian village, so we had to switch to Telegram with just a group chat.

Group chat worked for a while, but soon it became annoying. It was hard to filter the noise: when someone posts and you’re not interested or you’re too far from the passenger, request for a ride just useless. Region-specific group chats in Telegram were better, but they required too much effort to use them. It was obvious for me that Uber was better, and people worldwide prefer Uber because it’s just a tool that works. It was obvious for me — I should help people and create a tool that works.

I left my Siberian village with this idea in mind and started thinking about that. How it should work? How Uber for remote regions should work? What requirements it should have? Should I do it for money or free of charge? Should I monetize them and if I shouldn’t, where do I get money for development? Uber app is not something very easy to implement for one engineer. I should take advantage of my experience and the best tools available, so I started looking for something that already exists.

I had spent some time on research and found that there was no any open source solution I can use. But maybe my requirements were too high: it should work on iOS, on Android (including very outdated devices), on desktops — when you have a very old cellphone connected to your computer for Internet access purposes, on Windows, and Linux. It shouldn’t take too much network traffic. It should be network fault-tolerant (network coverage is usually poor in rural areas). And app should be fast and reliable.

I had really bad feelings about what I found. Being software engineer, I knew the amount of effort it takes to build Uber-like app — insane! Even when it comes to MVP only. It was even worse: I promised to solve “this easy problem”, and people were looking forward for this improvement to their lives. They had hope and I was about to fail delivering that hope. And the reason was… “Sorry, I just have no time”.

If you ever worked in Silicon Valley you know what it is: ~2-hour commute every day, 8 to 10 hour workday, 30 minutes for lunch. If you have family, please go to day care before and after work, do some shopping so you’ll have something on the table this evening. Where to find a year to build the app for 1000 people and who will pay your bills?

“I’ll just say no”, — I said to myself, — “sometimes you have to admit the failure”. Exactly at this moment I got notification in my Telegram app installed on mobile phone: “new version released, new bot API available”. Wait a second?!

I rushed to my computer, found Telegram bot API docs and hit Ctrl+F “location”. Yes, there was support for location. It means that you can write your own Telegram bot, ask user for location, and do whatever you want with these GPS coordinates. Moreover, to simplify bot experience for users you can render buttons, so users just need to click on them, instead of typing stuff from mobile keyboard.

It seemed a perfect solution to me. Yes, it has some limitations: there was no live GPS tracking. But who needs GPS tracking in remote Siberian region? Moreover, it’s not friendly to your mobile battery at all. People there usually don’t have new phones, so battery life is important. Telegram was more than perfect on saving mobile network traffic and was 100% network fault-tolerant.

There were plenty of examples, and API was not hard to use at all. There were multiple existing libraries/API-wrappers available, and this evening I decided — no matter what I gonna do it! I was on my way to create application that will change people’s lives and I was super-excited about that! Moreover, I should open source the app, so people in other remote regions can use and can benefit from it. Somewhere in Africa or Iran they shouldn’t wait for Uber to come and cut their earnings. They should be able to use it for free. Telegram was my secret sauce and I knew what to do.

Telegram allow to write code once and reuse it on Android, iOS, desktops, web. Telegram has clients for iPhones, iPad, and even Apple Watch. So you write it once and use everywhere.

I could code it with any languge, but I decided to use JavaScript, as the most popular language in the world. I was also inspired by success of RocketChat. I remember meetup I attended in San Francisco, where RocketChar founder told us how he created Slack alternative and how RocketChat became super-popular. Also, I don’t know if it was a good or bad decision, I decided to use Google Firebase as my database storage for the following reasons:

  • Quite easy to use and get started
  • Good free plan
  • GeoFire library you can use for geospatial calculations

It was also important that software should be really easy to understand, setup, modify, and maintain. Usually database engine is something you don’t want to install on a very affordable hosting, so I tend to think that Firebase was a good choice. There were some other technical decisions: as much docs as it possible, so I documented almost every JavaScript file. I couldn’t afford to fail, so I should have as much tests as possible. Code should be easy to understand for unexperienced users, so no files with more than 250 lines.

According to my estimation I should be able to finish MVP in 3 months by just coding for 3 hours every evening and full-time on weekends. But it took 9 months. I started in April and finished in December 2016. Little bit exhausted , but happy. And I’m still feeling like a mom, and LibreTaxi is my child.

Here is what I was able to achieve in that time:

  • Create an app that works on iOS, Android, web, all desktops, and even full Apple Watch support
  • Build MVP that includes instant hiring for all drivers
  • To simplify things LibreTaxi just connects drivers and passengers. Passengers should call drivers to confirm the order or cat chat though Telegram
  • Drivers can select the radius they want to be informed in
  • Drivers and passengers can negotiate the price, it’s really useful when passenger wants to get the cheapest price available, and win for drivers when they just want to pick someone down the road
  • Multiple languages support, currently works for English and Russian
LibreTaxi MVP on Android. Note how easily you can add buttons and map to a chat window.

MVP now works and it works extremely well! Only by spreading the word I have about ten thousands users worldwide. By spreading the word I mean just talking to people in my Facebook, on forums, reddit and in private Russian communities. I’m looking forward to translate the app to Mandarin Chinese, Spanish, Persian (Telegram is very popular in Iran).

I consider this project as ultimate success. I probably cannot compete with Uber in big cities — my marketing budget is more than modest. And zero regulation seems little bit extreme. But when it comes to remote regions, I’m pretty sure in a year or two LibreTaxi (or its clones) will be represented everywhere. Local communities can add their own regulations, use the platform as their starting point and implement whatever they want.

Here is my advice to those who wants to represent their business in remote regions:

  • Explain it better, people there have more time to read what you are going to offer
  • Don’t offer something they can’t use
  • Save network traffic and be fault-tolerant
  • You should support old devices

As a conclusion, I just wanted to say it one more time. Business in cities is not the same as it is in remote regions. But people have money there. They sell honey, fish, caviar, handmade stuff. And they have cars, boats, computers, and mobile phones. Nobody pays mortages, they own their houses. They can be your customers if you can solve their problems. And when they have better Internet connection and roads, you can be already there.

LibreTaxi website | Source code

See also: