Even though a couple of years ago, you wouldn’t hear anyone saying “Let’s get an Uber”, it is today something that’s said pretty often around the world. It’s the go-to phrase when you want to get from point A to point B. But, what is Uber anyways? How did it came to be?
The idea about Uber came to it’s founders, Garrett Camp and Travis Kalanick, when they were left stranded one winter in Paris. After getting back to San Francisco, it took them two years to develop and launch UberCab. Five years later, Uber has a value in the billions, and it operates in more or less 300 cities around the world.
Uber is actually a whole platform, made to connect the drivers, and the people who need a driver. You have an app on your smartphone, which you use to request a ride. When you have a nearby driver who accepts your request, you get an estimate as to how long will he or she need to get there. You will get a notification when they’re about to arrive. You can also see information about your driver, both personal and vehicle info, which lets you connect easier at your pickup location. You can enter your destination before, or during the ride, and you can even discuss a preferred route with your Uber driver. The trip ends when you exit the vehicle, and payment is done via your connected payment method, with an automatically calculated fare. There’s also the option for paying cash in certain cities, but you do need to select that before you request the ride. At the end, you are asked to rate your driver, and the driver is asked to rate you. This makes sure that the community has enough respect and accountability.
But, if you’re curious as to how to develop an app like Uber, you already know all this. However, you may or may not know that there’s actually a pretty big number of such applications, and you might find some people advising you against doing something similar. If you do know what you need, and why, though, go ahead and read on.
The truth is that to make an app platform like Uber, you will need a lot of technical knowhow. What you will learn in the article below is more or less everything you’ll need to build your app. Things such as the technologies and features required, as well as how to implement them, and how to build the backend, process payments, how to choose the marketing tech stack etc.
If you do have the technical knowhow, the other thing you’ll need is the budget. You will need to pay for backend and web development, as well as native app development for both iOS and Android. Then you’ll need to pay for the design, and when everything is done, you should have some sort of management for the app, and quality assurance. If you have in-house developers, you might get away with a smaller budget, but if you need to outsource everything, be prepared to pay a pretty penny for the app.
These are all things you’ll need to know if you want to build an app like Uber, and we’ll try to go into as much detail as possible, and not miss out on anything important. Let’s begin.
The basics: features required for MVP and how to build them
When you’re making an app like Uber, at it’s base, it must be able to have a feature where users can request rides, as well as a system in place for cashless payments. There’s also the need for a real-time interaction between the app and the server, so you can process the payments automatically as soon as the ride is complete. And, to wrap it all up, if you want a viable marketplace, you will need refunds, as well as a well-thought-out rating system. These are the important things you’ll need, so let’s take a look at how you can build them.
At the core, you must have real-time tracking and notifications. To code this, you will need your code to be optimized for performance, as well as socket programming. You will also need to incorporate a system for communication with Google Maps’ various APIs. Your database should have security in place, and users should be able to register with their mobile phones. This is also crucial. Those Google Maps APIs will be pretty useful when a user wants to request a cab. The app will drop a pin on the map, and the nearby drivers will get a notification that the user has requested a taxi. And once again, Google Maps APIs come to save the day by calculating ETA for the driver and the passenger.
Once this part is taken care of, you will need to send out a push notification when the cab is booked. You can choose between creating the server component yourself, or using a third-party provider, which saves you a bit of time. The ideal solution for this kind of app would be Amazon’s Simple Notification Service, as it works great, is very lightweight, and it won’t cost you too much. What might be a bit more difficult to implement is the SSL connection, which is required for push notifications. And, last but not least, you will need a payment processor, such as Braintree, for payments via your application. Billing can begin by motion detection, for example, from the location where the user requested the ride. All things considered, the basic functionality where users can request a ride, and the app can send notifications and process payments, all while using Google Maps’ APIs, can be made on a backend architecture that is easily scalable in the future, and is very reliable.
Who do you need for such a task, and how will they build it?
Now, what kind of developers will you need to build all of this for you? You don’t really need Uber’s exact technology if you’re only testing out the market – that might even prove to be a costly mistake. On the other hand, when you have a product that has all the minimum required features, you can easily see if you’re even moving in the right direction. If you are, you can build on what you already have. For your mobile apps, you will need developers that know Java, Objective-C, and Swift. These technologies will let you build consumer-facing apps that are natively built, and give you pretty high performance. You will also need people to do the backend stack of web services for your apps, and for this you will need developers who are well versed with PHP, as well as Node.js. Last but not least, you will need your database for an app platform like Uber, where you’ll store the users’ data. The best option would be to get a well-designed database that uses MySQL and MongoDB. The combination of the two is something that can handle the loads such an app can require, with ease, as well as provide you options for security as well. If you think the opposite, just remember that a simple stack of MySQL was enough to process 250 million tweets for Twitter back in 2011.
As far as the “how”, you should know that software development is a tricky thing. There’s a lot to go wrong, and if you don’t have proper management and roles, and everything planned out, it very well might go wrong. Therefore, we choose MVP, as well as some well-proven methodologies for project management. If you want your app development to go as smooth as possible, there are a few things you should do. To begin with, make sure you have your tasks and projects divided, and sorted by priority. If the tasks are well assigned to developers, designers and managers, you will have the process going smoothly, the way it’s supposed to. Each task should have a deadline, in order for developers not to waste time. Give each of the team members top 5 priority tasks they should be focusing on. Make sure that you’re completely up to date with everything that’s going on – from the progress, to any potential problems, and be an active member of the team.
Building the backend
A few years ago, creating an architecture that will handle a lot of users in a sudden surge was a very hard thing to do. However, in 2009 we got Node.js, as well as its first native Windows implementation in 2011. This changed a lot of things for the better, making tasks that were previously difficult, pretty easy. What you’ll need to focus on here is real-time location, tracking and display. For this to go well, data extraction, as well as optimization, should be your primary focus.
Uber communicates with their servers every four seconds, but depending on how accurately you need to track your driver’s location, you can change how often this happens. You might need more, or less. The data that is sent here is the ETAs, the location, as well as a calculation of the shortest distance. Google Maps’ APIs are essential here, as they pretty much have all of these things – you just need to access them. In order to reduce communication overhead, and not need to open and close ports at all times, you’ll also need a half-duplex-socket. This is what is needed for the app to push information between the apps and servers in real time. The socket is always connected to the server, and unlike an HTTP protocol, there’s a port that’s always open for easy information exchange. An ideal solution is Nginx. Even though you might be thinking about Apache, know that when it comes to real-time, dynamic information, it’s far from the best option.
Incorporating payments and processing them through the app
There are a lot of payment gateways that you’ll find online, but the best option for this kind of situation is by far Braintree. When you’re starting out, you will need a bit of time to reach a total of $50,000 in transactions. Why do I mention that exact amount? Because up to that amount, Braintree doesn’t charge anything. And, as far as functionality goes, it has everything from auto-payments, to refunds and recurring payments.
You might be thinking about building your own payment gateway. Before you even start to look at the details, just don’t. If you’re a startup, building your own gateway isn’t feasible, and with all the technologies and costs involved, you’re much better off with an existing one.
Make sure you talk about your developers about data security with the payment gateway. The SDK should be properly integrated, instead of integrating the gateway’s API. This leaves room for sensitive information to go through networks that might be vulnerable. SSL encryption is a must here, and you shouldn’t be storing any of the payment or credit card information locally.
The ride booking and scheduling
There are two options here, and it’s yours to choose which one you go for. The first one is to have the user request a ride, and that request is shown to all drivers that are in the proximity. The ride is awarded to the first one to accept it. The second option is to have the request shown only to the driver in the proximity which has the highest rating. They can choose to take it, or ignore it, and if they choose to ignore it, the next highest rated driver in the proximity gets the ride. It is completely up to you, but the second option can be a bit slow. On the other hand, the first option might leave the passenger with a low-rated driver.
When you want to create an app like Uber, an app that requires real-time communication, Node.js is essential. The fact that it sends an asynchronous task to the event loop is great for your specific need, and the task has a callback function. After that, the rest of the program is executed. The real-time websocket runs over TCP, and any delay that HTTP might cause is greatly reduced. And, last but not least, if you want to make future upgrades easy to push, you might want two PHP-Laravel based implementations, for the REST API and the web app. This way, you won’t need to upgrade the web application for every update.
A scalable architecture
A scalable architecture is a must. You might think that a certain simple stack is enough, but when you do grow bigger, that stack might not do everything you need. For example, in Uber’s case, the LAMP (Linux, Apache, MySQL, PHP) stack didn’t deliver due to performance issues. In this situation, they were forced to build something new, as they knew they’d need to scale further in the future.
However, as with the backend services, we have Node.js now. You want to separate the services which store, as well as handle, real time data, from the real time logic, and separate both of them from the business logic. The real time logic is everything that has to do with the real time data and tracking, while the business logic is everything that has to do with invoices, payments and other business-related things. By keeping them separate, you’re saving yourself a lot of trouble. For example, if you have everything in one singular location, and your payment provider fails, the system will keep on looping, expecting a response. However, if you separate the logic, one’s failure doesn’t mean that the entire system fails too.
When you’re done with all of the above, where are you now? You have an app that has all the minimum viable features, and is optimized for both performance and scalability. Any future growth is dependent upon what kind of users you acquire, as well as the KPIs that you set for them.
The users and KPIs
If you want to find any differences in the behaviors of users, you’ll need to separate them. For example, you might be getting a 30% increase in rides, but that increase may only be coming from two out of your five segments. You can go with the Upsight SDK, which gives you a metrics explorer in order for you to understand your users, and build KPIs (key performance indicators) tailored for each segment. Some more popular growth KPIs include, but aren’t limited to, monthly or daily average users, total rides by users/segments, as well as the average revenue per users.
What else do you need for your app?
We did cover, pretty extensively, the basics, but there’s a lot. You will need crash reporting if you want to see what you did wrong with the coding, and if you want to fix it. In-app customer support is also a must since if you don’t have it, users are forced to leave reviews, which may not always be good. With customer support, you can deal with any issues they might be having before they leave feedback. An option for this would be a ZenDesk-based solution.
You will want, and need, reviews and ratings. Asking for them is important, but so is the way you’re asking. If you prompt a user for this after they do a series of events within the app, this feels frustrating and intrusive. However, something like Apptentive will use an algorithm that determines when is the best time to ask users, and get the ratings you desire.
Uninstall.io is another great tool that lets you see why people commonly uninstall your app. You can use this for ad campaigns that aren’t doing their job, as well as problems that a user might be forced to deal with within the app.
You might’ve thought of it, but A/B testing is another thing you could try. If you can’t make up your mind between two features, choose something like Optimizely, which lets you divide the app for users, where different users see different features. From then on, see what gets the best feedback, and move on from there.
Wrapping things up – how much does it cost to develop an app like Uber, and how long does it take?
As mentioned above, getting such an app developed completely is a pretty big investment. I did try to avoid numbers, because I wanted you to understand everything that needs to happen for the app to work well and succeed, which in turn will justify the price. However, depending on where you source your developers from, you might be looking at around $35 to 40 thousand dollars, or much more. This might seem like a lot, but if you do things right, you can scale and return your investment in no time.
When we’re discussing time, this all depends on how well the project is organized, how fast the developers are, and how good the project management is going. If all of these things are well optimized, you will have your app relatively soon. However, if one of them fails, this might lead to further issues and reorganization requirements. To prevent this, make sure you have everything planned out – it will make things much easier for you!