You always dreamed of becoming an entrepreneur but you don’t really know how to get started? Successful startups that inspire you benefit from teams of talented engineers, designers, marketers and you feel all alone? You feel like creating and launching a product is impossible for one single person?
If one of your answers to the questions above is yes. Then, you should find this article interesting.
In 2019, I challenged myself and decided to build and launch, on my own, in my free time, a Saas product.
To give you a bit of context about what Pixelixe is: I decided to build the easiest to use and accessible graphic design studio on the market. Developing a WYSIWYG (What You See Is What You Get) editor was complex enough to challenge my computer engineering skills. A lot of mathematics and calculus would be involved! Perfect. I was excited as hell!
Find out more about the design studio in this short video or test for free (no account required) the product here: https://studio.pixelixe.com
Video of Pixelixe :
I will describe in this article the technical stack I chose to create Pixelixe.com.
Let’s come back to the topic now. To create an entire Saas product on my own, I had to think about a few prerequisites. To make it work in the long term, I had to find ways to limit the quantity of source code to maintain and also make sure to not reinvent the wheel.
Here are for me, 5 key prerequisites required to create an “easy to maintain” application :
Rely on an auto-scalable infrastructure = Serverless (Cloud based)
Expandable core modules (design to ease features creation and evolution)
Ease of deployment (one-click/command to deploy it all)
Not to many source code and programming languages involved
Do Not reinvent the wheel (Classic but still true)
The last point « Do not reinvent the wheel » is really key. All Saas applications online have few standard features in common. Here are a few examples :
An authentication system and a registration form
A payment system for monthly or yearly subscriptions
A settings webpage
And more.
To save you a lot of headaches and hard work, do not bother creating those required functions/features from scratch. Let’s start with the « Serverless » choice.
Serverless and cloud based infrastructure
To develop my product, I used Firebase. Firebase definition is : “Google's mobile platform that helps you quickly develop high-quality apps and grow your business”.
Firebase is most-known by mobile apps developers but it can also work perfectly well for webapps.
For those of you who want to know more, Firebase provides a few fully managed services that I used for Pixelixe :
Serverless front-end hosting,
Serverless database (Firestore), Serverless compute (cloud functions),
And a plug&play Authentication mechanism.
Firebase itself is built on top of Google Cloud Platform, one of the competitors of AWS (Amazon Web Services) and Microsoft Azure.
Nowadays, I hope that, at least, choosing a cloud based infrastructure seems obvious to most of you.
I would absolutely not recommend at all, for a solo developer or entrepreneur willing to launch a Saas product, to rely on a dedicated server. A few years ago, it was still normal to purchase a Linux based dedicated server and install every piece of software required manually (Java, Python, PHP, Apache, MySQL and so on). The main cons with this approach is that once your project is live, you will be in charge of maintaining the service up and running. At first, it might not be too much work but the more your project will be successful, the more it will become difficult for you to keep being in charge of the monitoring and maintenance of the infrastructure and dependencies of your project.
For example, in this scenario, if your Apache server or your MySQL instance crash: You will be completely responsible to put it back on. Be sure your users will be disappointed and maybe will leave your product and never come back.
On those type of static servers, to guarantee the best service level for your users, you will have to choose and install on your own a monitoring system (Nagios for example) to be notified when something goes wrong. Installing software monitoring tools is painful and take a huge amount of time that you definitely can’t afford.
You can completely get rid of those issues using cloud based hosting. Managed services offered by all cloud providers, either Amazon Web Services, Microsoft Azure or Google Cloud Platform will give you access to virtual machines where a variety of programming languages and their main dependencies and libraries are available (For example Python, NodeJS, Java and more) and are already pre installed and ready to use. You won’t have to monitor their running processes anymore, you will just have to focus on your features and product.
That’s all that matters!
Moreover, that’s not all, a lot of managed services today are now« serverless » with « auto-scaling » features. « Autoscaling » means that you won’t even care about the number of users/visitors your app will have to serve. If your app traffic explodes overnight from 100 users to 10.000.000, the underlying infrastructure will automatically scale and serve your users without you noticing it. Of course, you will pay more but still, it is pure magic. Servers are not a constraint anymore, you can truly focus only on your code and key features to release an MVP as quickly as you can. Few years ago, to scale an app on dedicated servers, it was mandatory to manually install, start and prepare them, install and deploy load balancing tools that are really complex and again, time consuming.
And guess what, even backups are automated on Firebase for hosting and compute. No need to worry about them either!
As a result : No need to hire a system administrator anymore to deploy your Saas product or to train yourself to get those skills.
If you don’t want to use Firebase, here are some alternatives I found (not tested them though) :
Prioritize Front (web browser) processing instead of back-office processing to decrease cost drastically.
A second technique I used while designing and developing my product was to prioritize execution of complex operations and processing on the client side (meaning the browser side). My app being an image studio, I knew from the beginning that processing images on the server side (back office) could become really expensive. Moreover, I knew I wanted to launch a freemium business model but I didn’t want to lose too much money with users of the free version.
Using javascript on both sides, server side and client side (NodeJS and jQuery mostly), it was easy to choose on which side, key functions will be processed. On client side, your tasks will rely on the CPU and RAM of your user computers (Free of charge for you).
Browser based processing = Free of charge for you
Moreover, Firestore, the database I use to store Pixelixe data is a NoSQL JSON document oriented database. JSON being the native data structure for Javascript it is pretty easy to process on both server and client sides as well. Having only one programming language to handle and one data structure everywhere make the development process a lot easier. You can even reuse common functions everywhere.
I am proud to say that Pixelixe Studio image processing is executed entirely on the client side. My cloud servers cost are therefore really cheap (to not say almost free).
How to register and authenticate users
To authenticate users on Pixelixe, I choose, once again, Firebase authentication. I just had to call a « createAccountWithEmail » function in Javascript to sign in users and that’s it. I never had to create a « User » table in the DB, encrypt user passwords, secure their personal data. NOTHING..! Once again, I saved precious time here and I strongly recommend you to do the same. Whether you choose Firebase or an alternative, to login user, you just have to remember a simple JS function is enough to get “logged” user data whenever you need them.
How to handle payment and subscriptions
I used Stripe as a payment platform. Stripe provides Javascript and REST APIs to subscribe and unsubscribe users. You can define plans from their dashboards and you even get a front end code plugin to generate automatically the credit card form to let users fill-in their card details. This way, you don’t even need to store yourself card details. Only Stripe have access to them (no security risk on your side).
Also, Stripe provides a complete back office with analytics to let you monitor your sales progress (MRR, cohort analysis, churn analysis and a lot more).
I used PayPal a few years ago but I found it quite difficult to use. Stripe is (from my point of view) easier to set up and get started. And once again, as Stripe exposes REST APIs, my Javascript based front and back end can easily integrate it.
Conclusion
This post is absolutely not at all a sponsored post for Firebase or other platforms. Even if it might look like one. I think I am just a happy Firebase customer, I have been amazed by those tools. To be clear, I just wanted to share with readers, tips and techniques I used to focus on my core product and launch a stable webapp really quickly while making sure it will be easy to maintain.
Of course, technical tools and frameworks described in this article are not the only one of interest but I hope it will help some readers to discover new tools and hopefully to start coding great products.
So yes, we can definitely conclude by saying that a simple person, can build and launch a software on his own in 2020. I did it, and I know that I am not the only one, I met a lot of other indie hackers in the process of creating this side project. Still, I think it is really cool to know that a simple guy in his garage (like Steve Jobs back in the days) can start an amazing project and make it a huge success.
Pixelixe is growing, slowly but surely, sales and traffic are increasing each month, which is really nice. I still take a lot of pleasure improving the product.
Top comments (7)
Great article! I am very curious about the actual user count and cost, if you are comfortable sharing it.
Most of my experience is with Azure and I have to say that it's designed to rob as much cash as possible.
Thanks for this. For some reason I never thought of doing some of the processing workload on the client-side. Definitely going to borrow some of those ideas. Pixelixe looks fantastic as well, great work!
Thank you Shivan! Glad to read that you appreciated the article.
A very nice read. Would like to know best practices for firebase.
Hey Thomas,
nice work!
Firebase is great. I use AWS, but Firebase is really simple and you can start shipping stuff very easy.
Hey Mike, thank you! I also use AWS for another side project. It is powerful but I am not a fan of the console user interface.
It's gonna be very expensive!