On-demand economy – also known as 'gig economy' or 'sharing economy' – is constantly growing and expected to generate half the sales revenue ($335bn) in the sectors with yet-prevalent traditional operating models by 2025, according to the PwC study.
With the likes of Uber, Lyft, Airbnb, and Netflix expanding further and further, more startups try to challenge the industry leaders or adapt their business models to yet-unconquered markets. Succeeding in these endeavours requires thorough software development planning and preparation for rapid scalability, should you decide to actually have a go at battling the titans with their access to 'unlimited' capital.
If the above is your goal – read on, as today we’ll focus on developing a mobility startup, specifically one of its crucial elements – the infrastructure. For the simplicity of explanation, let’s take building an Uber-like app as our example.
Cloud vs on-premise
To begin, let’s lay out the foundation. Should you go for a cloud or an on-premise hosting? Both solutions, obviously, have their own pros and cons, but as we are a startup company, going for the cloud-based option will help us save the cost of setting up and running a feasible on-premise solution.
As RST is an official AWS consulting partner, I have access to our certified cloud architects and had a chance to speak with our Chief Cloud Solutions Officer – Marek Ziółkowski, whose knowledge and expertise will help me guide you through the process of understanding what is required from the infrastructure perspective to face rapid scalability and growth of your business.
Frontend for an Uber-like app
Let’s start with the frontend of your application. In most cases, it is represented by a static web or mobile screen, meaning you don’t need to re-render what is being shown on the screen each time someone uses your application. All the interactive parts, eg navigating a map, will be done by embedding an external service, be it your custom-built one or via third-party APIs. This leaves us a fairly simple task to fulfil.
Amazon Simple Storage Service (Amazon S3), simply put, is your cloud storage that offers industry-leading scalability, data availability, security, and performance features and should be used for hosting your static applications’ frontend.
Not much to add here, to be honest with you. It’s as simple as it gets. Obviously, we could dive deeper into the process of properly setting up an S3-based storage, but that would make this article too technical for the purpose of giving you an overview of what is needed for Uber-like app development, so let’s leave it for later.
Compute platform for an Uber-like app
The compute part of your application is where it gets sliiiightly complicated.
First, we need someplace to host our infrastructure. There are two options.
Amazon Elastic Compute Cloud (Amazon EC2) is the simplest and yet broadest compute platform offered by Amazon – in other words – your virtual server. Amazon gives you full access to your EC2 instances, just as if you would have with a regular on-premise server.
Here’s what it means:
you don’t want to build a cloud-native application (which we do recommend building, by the way);
you want to have access to the server’s OS;
you want to access the console terminal;
you either don’t plan to scale rapidly or you have access to DevOps engineers who will be able to configure everything properly;
you plan to have a stable and predictable resource usage and want to reserve instances for a longer time-frame, which will lower your costs; or
you don’t want to vendor lock-in yourself with AWS and want to be able to migrate when required.
AWS Fargate is Amazon’s serverless, pay-as-you-go compute engine that allows you to ignore an entire process of dealing with your own servers, whether virtual or not, and focus on developing your app instead. To be completely honest with you, Fargate is the solution we usually advise to go with, unless you have a very specific case, which an Uber-like app isn’t. Why?
Fargate removes the operational overhead of scaling, patching, securing, and managing servers;
it automatically scales your compute infrastructure according to the actual usage;
if your user traffic suddenly peaks due to an ongoing marketing campaign, you don’t need to prepare beforehand; and
if your app usage drops at night or during working hours, you don’t have to pay for the idle servers.
Now, let’s think about containerization of our application. AWS offers two services, and it’s up to you and your dev team to decide for which to go, as both solutions are equally good for the given task. Let’s look at both ECS and EKS (both are compatible with AWS Fargate and EC2).
you don’t want to vendor lock-in with AWS and want to be able to run your app or its elements with Kubernetes on-premise or within other cloud providers (this approach is called ‘multi-cloud’, if you’d like to search more about it); or
your team already has Kubernetes competencies and you don’t want to switch technologies.
Data storage services for an Uber-like app
Okay, we’ve sorted out the computing piece. Now we need to figure out how to store our data, which in the case of an Uber-like application requires specific solutions compatible with location-based services.
Amazon Relational Database Service (RDS) is a collection of managed database services which we’ll use to host our database. It’s compatible with the seven most popular engines, and most importantly, with the one we’re going to need in our case.
Amazon RDS for PostgreSQL + PostGIS
Because our location-based application needs to operate on geodata, PostGIS is an extension for PostgreSQL that enables storing and managing of various spatial information, eg polygons, geographic lines and coordinates, geometric figures etc. PostgreSQL also supports libprotobuf 1.3.0 – a library used by PostGIS to deal with map box vector tile data.
It’s also worth taking into consideration it’s best to create a separate database with installed PostGIS extension that will handle your map-related data alongside your regular PostgreSQL database.
Amazon S3 Glacier
Amazon S3 Glacier is a storage class designed specifically for data archiving, be it your logs, backups, or some actual data archives. The main principle is that you shouldn’t need to have instant access to those files. Which, in turn, will allow you to significantly reduce your storage costs for long-term digital preservation and rarely-accessed data.
Amazon CloudFront is a content delivery network (CDN) that is built to reduce latency and increase the performance of your application in various regions around the world. In simple terms, it caches contents of your app and when a user in Australia runs it, instead of requesting the content within your server region. Let’s say you’re based in the US, the request goes to Amazon’s Australian CDN and receives what the user needs in a fraction of the Australia-US latency.
This is extremely useful if you’re planning to operate in multiple locations around the globe, as it not only provides better experience to the end-user but also reduces your costs.
Location-based services for an Uber-like app
Not the last and definitely not the least, building an Uber-like startup heavily relies on proper usage of location-based services. There are plenty of various third-party map providers, and building everything from scratch would be a suicide mission from any logical standpoint, so you’ll need to select an option that works best with your planned location based features.
In our previous articles, we’ve compared the most commonly used ones, ie Google Maps, Mapbox and OpenStreetMap. If you haven’t had a chance to check it, please follow the links to the map APIs comparison as well as their pricing models.
But, as we’re looking at the services provided by Amazon, it’s worth noting that they also have their own tools for building Uber-like apps.
Amazon Location Service
Amazon Location Service is a set of solutions that natively integrate with the rest of your AWS-based services and provide plenty of ways to generate and process location data out-of-the-box.
That means you can use ALS if you want to:
track your assets (which would be your fleet in our Uber-like app);
coordinate delivery tracking (which can also be understood in a sense of moving passengers from one location to another with push notifications once you enter the geo-fenced region of passenger’s proximity etc.);
implement routes optimization for point-to-point navigation (perfect for offering an on-demand taxi service); or
use it for user engagement and geomarketing (special discount for app users at an airport).
Geospatial data is provided to Amazon from well-established global providers such as Esri and HERE, so you don’t have to worry about getting good geographic coverage and geodata accuracy.
If your Uber-like application requires custom data layers or map features altogether, you can easily integrate third-party solutions or build your own location-based services using OpenStreetMap, for instance. We used the latter for one of our largest clients – Trans.eu (here’s our case study) – the leading logistics platform in Europe and Asia.
Analytics tools for an Uber-like app
Your app is up and running. You want to keep tabs on both app’s performance and business growth. Here’s what you can get from Amazon’s offer.
Amazon CloudWatch is a monitoring and observability service that provides your dev team with insights into your Uber-like app’s performance, whether we speak of system-wide metrics or just your infrastructure resources utilization.
While you, as a business founder, might not be able to fully understand the scope of provided analytics data, it’s important to have it set up from the beginning, so it’s both easier to optimize your system and quickly pinpoint any existing issues.
Amazon QuickSight is what you might find a lot more interesting and aligned with your field of responsibility. QuickSight is one of the most popular cloud-native, serverless business intelligence (BI) tools.
As it was in the case of Fargate, QuickSight is also an auto-scaling, pay-as-you-go service that allows you to connect all your data sources within one place for complex analysis. A customizable dashboard provides you only with the data that matters to you and integrated machine learning algorithms can detect anomalies, forecast business metrics as well as perform interactive what-if analyses.
If you store all of your data inside the suggested above RDS and S3 storages, QuickSight also provides you with native integrations and granular access control.
Sum-up of the best AWS tools for building an on-demand delivery app
As you can see, Amazon Web Services offer a plethora of tailored solutions that can easily power your Uber-like startup, from its initial software development stages to further improvements, analysis, rapid scalability and world-wide availability.
Amazon S3 – best for hosting your static frontend: websites, web and mobile applications;
Amazon EC2 – the best cloud server for your backend, especially if you want to avoid vendor lock-in, but requires an experienced development team for proper setup and maintenance;
AWS Fargate – the best serverless solution for your cloud-native application that offers pay-as-you-go pricing model, requires no deep DevOps expertise and is best for rapid scalability due to its auto-scaling infrastructure;
Amazon ECS – Amazon’s own containerization service, best if you’re going to use more AWS-powered services in your Uber-like app;
Amazon EKS – Amazon’s solution for Kubernetes-based containers, best if you’re trying to avoid vendor lock-in or have extensive prior experience with Kubernetes;
Amazon RDS – your go-to choice of database storage;
PostgreSQL + PostGIS – the best choice for storing your geospatial data with increased performance and computation abilities;
Amazon S3 Glacier – the cheapest storage option for secure data archiving;
Amazon CloudFront – the best CDN service for low-latency access to your app from anywhere in the world;
Amazon Location Service – a set of tools designed specifically for building location-based startups that offer cost-effective location-based services (LBS) out-of-the-box;
Amazon CloudWatch – the monitoring tool of your choice that provides your dev teams with crucial information about your system’s performance and existing issues, should such appear; and
Amazon QuickSight – the best cloud-native BI solution that can enhance your decision-making processes with real-time business data and machine learning-powered analysis.
These are essential for your technology stack if you want to build a successful location-based startup. Here's an infographic, if you'd like to download it and keep it for later. ;)
If you’re not sure whether the above applies to your specific case, feel free to drop me a line at email@example.com, and I’ll match you with our certified AWS lead architects who’ll be able to advise you on the proper way of approaching your situation. And that’s about it for today. Till the next one!