How I chose the tech stack for my startup
One year ago, a dear friend of mine asked me to develop a simple web application.
One year later, we announced Epk.Cloud, an amazing webapp which lets artists and bands to create them own electronic press kit with ease.
My needs
I’ve always worked with teams. There were always a project manager, a software architect and a customer. This time I didn’t have any of these.
I needed to work with a simple programming language, a simple database and a simple storage.
I decided to dedicate one week for each language/framework/database before starting developing the webapp.
I took in consideration the following aspects of my developer experience:
- I have to develop and entire webapp alone.
- I have a very low budget.
- I need a language who will let me to easily introduce a new developer.
- I must develop and release a lot of new features quickly.
- It must be stable and secure.
My Weeks
Week 1
- Backend: PHP
- Frontend: PHP + HTML
- Database: MySql
- Hosting: DigitalOcean Droplet
Well I’ve started with the obvious “web developer starter kit”.
I had a lot of experience of PHP and MySql in the past, so I found it very simple to develop with this tech stack.
I just didn’t liked developing the whole frontend with HTML and PHP, but without a solid framework behind it, I wasn’t too sure about security and stability.
Week 2
- Backend: Laravel (PHP)
- Frontend: Blade + Vue.js
- Database: MySql
- Hosting: DigitalOcean Droplet
Laravel solved my doubts about security and stability.
Code was cleaner and developing the whole frontend with Blade and Vue.js was an amazing experience.
But I wanted to try something more interesting.
Week 3
- Backend: Ruby On Rails
- Frontend: ERB
- Database: MySql
- Hosting: DigitalOcean Droplet
Well, Ruby on Rails is amazing. Seriously. Ruby language is elegant and it let me to develop really quickly. Until week 5, it was my first choice.
Week 4
- Backend: Python Flask API
- Frontend: React.js
- Database: MySql
- Hosting: DigitalOcean Droplet
I really liked Flask. It reminded me of Ruby’s Sinatra in some features. The biggest problem about Python… it’s my poor Python’s knowledge.
As a former Javascript/Ruby developer, it wasn’t so hard to learn, but I just didn’t feel comfortable yet to use it for such big application.
I’ll work more on Python, I promise!
Week 5
- Backend: Express.js (Node.js)
- Frontend: React.js
- Database: RethinkDB
- Hosting: DigitalOcean Droplet
Totally different approach. I decide to try a full stack JavaScript setup.
I tried RethinkDB instead of MongoDB for a simple reason: I felt more comfortable with it. I don’t know why, but ReQl is a really good query language, and I still had left-join queries (MongoDB hasn’t).
RethinkDB taught me how to deal with NoSql databases. It has been a little difficult to me, coming from MySql. I wrote some libraries to handle some problems that I’ve never faced with SQL databases.
React.js is a rock. Is the “Ruby on Rails” of frontend frameworks.
Easy to learn, fast and with a strong community. It’s amazing.
Week 6
- Backend: Firebase (serverless!)
- Frontend: React.js
- Database: Firebase Firestore
- Hosting: Firebase Hosting
I wanted to try another approach (again). A serverless web application, using Google’s Firebase.
I found it really really really quick to develop with. Stable. Secure. But there was just a problem: Google Hosting doesn’t handle wildcard subdomains.
Week 7
- Backend: Firebase
- Frontend: React.js
- Database: Firebase Firestore
- Hosting: Heroku
My last week. I finally found the perfect stack for my startup. Heroku has a lot of features that Google Firebase still doesn’t have (wildcard subdomain support, application rollback etc…).
React.js works great with the Google Firebase SDK.
Everything is written in JavaScript, so it will be really easy to introduce a new developer.
Firebase and Heroku are also really cheap. They scale well and help me to control my budget with their pricing tools.
Heroku makes application deploy magical. I love it.
The verdict
After seven weeks, I finally found out the perfect stack for my startup.
If I had more budget, time, a team, I probably preferred Ruby on Rails API, React.js and Postgre SQL + RethinkDB. We’ll see how this application will grow!
Epk.Cloud is currently running with the following architecture:
- Two Heroku dynos
- One Firebase Firestore database
- Serverless backend (thank you again, Heroku and Google)
- React.js single page application for the frontend
I’ll update this post as soon as I’ll introduce new features to the Epk.Cloud architecture!
Update #1 (02/16/2018)
Epk.Cloud has been officially released as beta product and I’m already working on a total new architecture.
Some spoilers:
- AWS DynamoDB
- AWS lambda
- AWS EC2
- GraphQl
~ See you soon!