How to develop taxi booking app


Nearly every smartphone user has a taxi booking app downloaded on their device. The market for on-demand services apps has been proliferating and currently represents a great variety of features and designs.

We decided to write this post to shed some light on what it takes to build a clone of one of the most famous and in many ways controversial apps of recent times. Trying to compete with Uber’s global dominance is a daunting challenge, but launching a similar service at the national or regional levels seems very promising.

At Eastern Peak we have successfully implemented several similar projects including Gett, a global taxi service, #1 for on-demand corporate transportation driving half the Fortune 500.

To develop a taxi booking app like Uber we need to understand how it works and define its basic building blocks.

General overview

On-demand ride services (also referred to as ride-hailing or ridesourcing services) like Uber are marketplaces where consumers (riders) and service providers (drivers) can connect with each other.

Drivers for these services are not necessarily licensed professionals but are private individuals who use their own cars and want to make some extra money. This simplistic approach which captures a common consumer demand is what makes these services available almost everywhere – something not achievable by traditional taxi companies.

An individual who requires transportation services simply needs to make a request on the app. When the request has been made, a notification with all the necessary information, like the location and point of destination, is sent to the nearest driver. The driver either accepts or rejects it.

In the case that a rejection is made, the request is allocated to the nearest driver and so on. If the driver accepts the request, they drive to the customer’s location to pick them up. Afterwards, both the passenger and the driver get an option to rate each other.

How it works under the hood

Launching applications of such complexity involve both client and server-side development. They require a central server to manage interactions between multiple users (in our case passengers and drivers), to perform complex computations (matching, cost calculation, ETA, commission subtraction, etc), as well as business logic and data storage functions. Uber maintains numerous geographically distributed servers to optimize response times, eliminate failures and provide constant service availability.

Uber’s backend system is written using such technologies as Node.js, Python, Go, Redis, MongoDB and MySQL. Additionally, it uses its own data center network while also relying on third-party PaaS/IaaS providers such as Amazon Web Services for some operations.

Ride-hailing services of such magnitude as Uber cannot do without its own massive computing infrastructure. However, it will be sufficient to support your entire backend during the initial stages of your project using cloud service providers like Amazon Web ServicesMicrosoft AzureGoogle App Engine or Parse.

On-demand ride services also rely heavily on different frameworks and APIs for navigation, online payment and communication. Uber uses Google Maps to show the surrounding area, Core Location and Google Location Services API to determine the user’s location, MapKit and Google Maps Directions API for route configuration, Braintree for payments, Twilio for SMS notifications, Apple Push Notifications Service and Firebase Cloud Messaging for push notifications, and SendGrid for sending transactional emails.

The client-side of a taxi booking app like Uber consists of two interactive mobile applications – one for demand (passengers) and one for supply (drivers), each with its own set of features. There’s also need for the web-based admin dashboard which will serve the role of centralized backend-office, to monitor the entire system and to perform administrative actions. Client side mobile apps can be built as native apps using platform-specific programming languages (Java for Android or Objective-C/Swift/C++ for iOS) or cross-platform/hybrid applications using HTML5,CSS & JavaScript. In the context of taxi booking app development, using a native approach is considered more preferable.

Let’s now explore client-side apps in greater detail, define the basic features they should possess and how to implement them.

Must have features for both Driver and Passenger apps:

1. Registration and Authentication

Uber like apps should offer social media and email/password signup and login functionality. Creating a profile, beyond improving customer retention, is required for services that involve mobile payments. As an additional requirement for drivers, profiles should be verified and approved by the service administration.

2. Profile editing

Passengers and drivers should be able to easily edit their own profiles: name, photo, phone number, email, etc. The driver app should also include the driver’s license and information about the vehicle (manufacturer and year of production, car class, color, license plate number) and its photo. Both the driver and the passenger should be able to view each other’s profile. With this information, they can recognize each other at the pickup location. This helps reduce anxiety and gives a sense of security.

3. Matching

Matching allows a passenger to automatically connect to the nearest available driver. It’s a complex algorithm which takes into account several factors: locations of the passenger and nearby drivers (Uber shows up to 8 drivers), drivers’ status and their rating, car models, etc. The driver has a few seconds to accept the request (Uber gives 15 seconds) before it goes to the next driver.

Some taxi booking services allow passengers to choose the driver manually. Currently Uber doesn’t allow this option.

You could also add an option to customize the matching algorithm. For example, a driver could set a destination filter and be matched only with those riders who are interested in traveling in the same direction.

4. Navigation

At the heart of a location-based app like Uber is the technology of GPS tracking, around which everything else is built on. It allows to identify current locations of passengers and drivers, draw paths between them, set pickup and drop-off locations, track the movement of cars and even calculate the cost of the ride and the ETA (estimated time of arrival). All these data sets are sent to the server for further processing and broadcasting to other users in that particular area.

Numerous geolocation, orientation, and mapping APIs are also used when building apps with navigation features.

5. Notifications

Currently most ride-hailing apps use three options to notify users about important events: SMS, push notifications and email. Push notifications can be implemented using free utilities provided by platform vendors: Apple Push Notification Service for iOS and Firebase Cloud Messaging for Android, or third-party cross-platform utilities like OneSignal.

To implement SMS notifications Uber uses Twilio but there’re many other similar service providers: Plivo, Nexmo or Sinch.
For sending marketing and transactional emails Uber uses SendGrid.

6. Evaluating and displaying the cost of a ride

Both the driver and the passenger should know the estimated fare in advance. As we mentioned earlier, calculating the actual fare of the trip is usually performed on the server-side. It may involve the following parameters and factors: the distance between pickup and drop-off locations, cost of fuel, possible discounts, car class, traffic and weather conditions, peak hours etc.

Uber uses the so-called ‘surge pricing’ method and increases its normal fares when demand for rides exceeds supply, which is currently a very controversial feature and many people have been complaining about it since its introduction. We don’t recommend applying this feature, at least initially, because it may repel customers.

7. Making payments

This is how it works within Uber’s app:

Uber has partnered with Braintree to securely accept payments within the app. All payments are cashless, so when the ride has completed, payment is withdrawn automatically through the payment gateway. There are many other online payment providers like StripeWorldpay or Adyen. They provide robust APIs, that can easily be integrated into mobile apps. All of them are optimized for web, mobile and in-app purchases. They support major credit cards like Visa, MasterCard, American Express and digital wallets like Apple Pay, Walmart Pay, Android Pay and many others.

Uber makes money by charging drivers a 20% commission on all rides booked through it. Payments are transferred to the driver’s account per week.

Traditional cash payments should not be completely eliminated. Paying in cash still remains the dominant payment method in some countries, in rural areas or for some categories of the population like senior citizens and teenagers.

8. Rating and feedback

Passengers and drivers should be able to rate each other after the trip is over. This feature helps maintain a high level of service. Drivers with low ratings will eventually not be able to use the service. If a passenger has a low rating, it can be harder for him to get a ride. Passengers should also be able to provide feedback on their experience during the trip. This feedback will be shown in the driver’s profile for others to view.

Analyzing the rating of both the demand (passengers) and the supply (drivers) will help you identify strengths and weaknesses of the service and make improvements where needed.

9. Booking and payments history

Both drivers and passengers should be able to view detailed statistics about previous trips from their profiles: date, time, cost, driver/passenger name, car model, pickup and drop-off locations, rating etc.

10. Booking cancellation

Drivers and passengers should be able to cancel a ride. In the case of a cancellation, a fee may be charged.

Must-have features for the Passenger App:

  1. Tracking nearby drivers
  2. Ability to set the pickup location on the map without typing an address
  3. Ability to see relevant info about the driver: name, photo, contact info, rating, car type, and ETA (estimated time of arrival)
  4. Notification upon taxi arrival
  5. Selecting car typeRiders should be able to choose between different classes of vehicles (In the case of Uber there are UberX, UberXL, UberSelect and Uber BLACK). Of course, the fares will vary depending on the type of vehicle
  6. Sharing rides with other passengersA rider should be able to share a booking with another rider who’s heading in the same direction and split the cost
  7. Favorite addresses for convenient future bookings

Must-have features for the Driver App:

  1. Locating passenger on map
  2. Ability to see relevant info about the passenger: name, photo (optional), contact info, rating, number of passengers;
  3. Ability to accept or deny requests
  4. Setting status (Go Online / Go offline)The “Go Online” status allows passengers to see drivers on the map and engage them. The “Go offline” status will temporarily hide the driver from being tracked.

Admin panel

The admin panel is usually a web-based interface that helps manage the entire service: manage back-end settings, manage drivers, passengers, requests, transactions, view passengers and drivers’ activities, statistics, and generate reports.

Web-based ordering portal

As an additional option for passengers you could build an online web portal which will duplicate the functionality of the Passenger mobile app and enable them to make requests right from the browser without the need for a mobile app.


You don’t need to fill the product with all the above-mentioned advanced functionality when releasing it to the market. We recommend starting out with a Minimum Viable Product (MVP) – the first version of the product that will include both Passenger and Driver apps and the Admin Panel with the most basic and indispensable features just to ‘test the waters’ of the market.

How long will it take to develop an MVP for an app like Uber

Here’s an approximate list of features for a taxi booking app MVP and our rough estimate of how much development time it will take:

Functional specifications and design

  • Creating a detailed functional specification for the end product and UI/UX design – 120-150+ hours
  • High-level design: Database schema, third party integrations, technology stack, etc. – 50+ hours

Developing an app for a single platform

Creating an app for iOS and Android takes twice as long time.

  • Registration (in-app or via social networks) – 32-40 hours
  • Client profile – 16-24 hours
  • Driver profile – 16-24 hours
  • Placing an order (customer) – 80-96 hours
  • Booking (driver) – 48-56 hours
  • Pickup location and route – 32-40 hours
  • Booking history (customer)- 16-24 hours
  • Booking history (driver)- 16-24 hours
  • Payment (add a card, integrating payment API, automatic payment after the order is complete) – 40-48 hours

Backend development

  • Database schema – 24 hours
  • Business logic – 240 hours
  • Admin dashboard – 160 hours
  • System performance report – 160 hours

Quality Assurance

QA usually adds about 30% more to the development time.

Please note, that this is an approximate estimate based on our previous project in taxi booking app development. The development time of similar project may differ depending on the UI/UX complexity, project specifics and business logic complexity.

Expanding the functionality

For example, there’s no need to include rating and feedback functionalities, cost splitting or favorite addresses into the MVP or develop the web-based ordering portal. These features provide added value, but you can save initial costs and leave it for later date. Using only push notifications to establish a connection between drivers and passengers will also be sufficient. Here’s a list of other features that could be added later:

  • scheduled rides
  • discounts and free rides
  • ability to pick drivers (currently Uber doesn’t offer this option)
  • destination filter for drivers
  • paid waiting time for drivers
  • dynamic pricing (surge pricing)
  • in-app chat
  • voice-driven instructions
  • in-app tip feature
  • insurance coverage
  • multi-language support
  • promo codes
  • gamification

In addition to the most basic and indispensable features we’ve covered in this article, an MVP could also include special marketing features to help acquire initial customers (both drivers and riders) and promote your app in such ways

    • signup bonuses
    • tipping drivers to stay online even if there’s no demand 
    • free rides for new passengers at the expense of the service
    • no commission for new drivers for the first three months

How to get started?

The product discovery phase is the best first step you can take to lay a solid foundation for the development of your app. It includes a functional specification, UX/UI design, and a visual prototype that will give you a clear vision of the end product. On average, this phase takes 4-6 weeks.

The product discovery phase can help you:

  • define a full scope of work and develop a roadmap for the project
  • set a realistic budget for your MVP and plan your resources
  • test the waters with your audience using a visual prototype
  • craft a convincing investment pitch
  • get to know your team

Share With:

Blog Categories



Mobile App Development Company in Singapore FORERUN SOFTWARE SOLUTIONS