Creating Flutter app with AWS Serverless backend — Part 0: Problem definition
I am going to build a job-search platform for small scale on-demand tasks. Where customers can find someone to fix a leaking tap, assemble a wardrobe or babysit your kid.
Call it a kind of Uber for housekeeping activities.
I decided that to create this platform I need web backend, web frontend, ios and android mobile apps. Before I can start with coding I need to choose which technologies am I going to use for each part. Normally such projects are done by a team but here I am a team of one person :) So technology-wise I will choose from what I am comfortable working with.
A little bit about my background so you understand what I have been working with: I started my career developing Java web backend services, later I also learned to build it with Python. After a few years in the backend I switched to Android development, which I still do most of my time. A couple of years ago I also started developing with Flutter for mobile devices(Android + iOS) and accidentally playing with Flutter for web.
Of course the described topic is too big to fit one article so I am going to write a series. Stay tuned :)
You never know how fast your new shiny service will get some traction. One thing I want to avoid is scalability issues harming my user experience. It is not very nice when you already have users willing to use your service but you are unable to serve them properly because your server is not powerful enough or network throughput is insufficient. I also don’t want to spend much time working on reliability i.e. preventing my users data from being lost in case of hardware failure.
To address these potential issues I decided to build my web backend on AWS serverless architecture with python.
What is Serverless architecture?
Serverless architecture is a cloud computing execution model in which the cloud provider allocates machine resources on demand, taking care of the servers on behalf of their customers.
While building and running an application, there is significant side work, such as installing software, managing servers, coordinating patch schedules and scaling to meet user demand.
Serverless architectures allow you to build and run applications and services without having to manage infrastructure.
Your application still runs on serverless cloud infrastructure but all the server management for you is done by AWS(or other cloud provide of your choice).
As long as you follow a serverless path you won’t need to think about scalability issues, at least not earlier then you reach 1 billion users, the only thing you will have to keep in your mind is your cloud costs. The same system can totally be built using another language and deployed to another cloud provider infrastructure; this is a matter of your preference but all examples in later parts I will describe with Python and AWS services.
I am going to use AWS Cognito for authentication and user management, this should save me some time needed to develop a secure and fast user-management solution from scratch. The rest of my backend will be nothing more than a set of Lambda functions binded to API Gateway methods. For persistent data storage I will use DynamoDB. And I will also use S3 for some amount of user generated content like uploaded avatars and photos.
Web frontend + mobile
I am neither a frontend nor ios developer myself. Learning this to a decent level from scratch is obviously going to take too much time. Fortunately I am pretty comfortable with Flutter! As you probably know nowadays you can build ios, android and web frontend from a single codebase using Flutter(there are also other platforms supported but those I didn’t try myself). I will start from building a Flutter mobile app(backend I build in parallel) and after this is done I switch to web frontend.