The perfect technical architecture for a startup

Is there a perfect technical architecture that budding startups could follow?
I thought of summarizing the requirements of a simple technical web application architecture that startups could use to avoid wasting time on web surfing through a vast list of technologies to get started with.
This guide is very generic in some aspects but I will also mention some specific personal staple favorite technologies for specific sectors.
Disclaimer: everything listed here is a personal opinion. If you have a different view, definitely share it in the comments!
Choosing the right backend

There are different options for the backend languages that could be used to get started. MVC (Model View Controller) is a great start but not my preferred choice. I would opt for PHP/Node.js/Python, keeping them separated from the front-end.
Now, let’s say I want to put a framework on top of PHP/Node.js/Python. What would be the best ones? Among thousands of choices, Laravel, Express & Django might be the way to go . All of these are powerful and the best in their own fields.
🏆 — Php, Node, Python
Choosing the right frontend

This is always a quarrelsome topic, with a wide range of suggestions including React.js, Angular.js, Vue.js and SomeMore.js I don’t even know about.
In my opinion, Angular 2 is complicated and has several dependencies. React.js does not allow proper CSS syntax, so I feel like the power given by HTML5 and CSS3 is not being utilized. As for Vue.js, I think it’s what would come out if Angular 2 and React had a baby together.
Maybe instead of choosing from the three most famous javascript frameworks, why not go with something old and easy to get started with? Knockout.js! It has pretty easy documentation along with great examples right on the homepage and the for-loop is simple as hell, unlike React.js.
🏆 — Knockout.js
Choosing the right authentication
This is always a hard topic for me. Maybe the best communication between the frontend and backend is using Oauth or an inbuilt framework authentication which can be created by using tokens that change on every page load or ajax call.
🏆 — Oauth
Choosing the right database

There are many database storages out there, the most common ones being Oracle, Mysql , Rethinkdb and Mongodb.
Choosing a database might be a hard process, but a simple Google search shows that Mongodb is a pretty widely used one. For a financial platform, I would definitely go with Mysql or Postgresql, but other than that going with something which has more advantages over a relational type database might be the right choice. Mongodb is great because it has an amazing framework over it called RoboMongo.

It’s not that hard to get used to the syntax — someone experienced in javascript can get started in a matter of hours. It’s like adding to a js array.
🏆 — MongoDB
Choosing the right version control

I heard a lot of people talking about SVN, but seriously I think there is an obvious winner in this category — GIT. Storing the code on the other hand can be done in two places, bitbucket or github. Bitbucket charges per user and has free private repo on the start. Github on the other hand starts charging for private repos from the get-go. Since normally it’s widely used and I would not mind spending 7$ for the private repos offered, github sounds like a good choice.
🏆 — Git
Choosing the right cloud platform

In my opinion, the top contenders are Heroku, Azure, Digital Ocean and App Engine. Azure offers up to xxx.xx bucks of free services for a new start up using their platform. I haven’t used Digital Ocean but App Engine took a while for me to set up on a python environment.
In this section I would go with Heroku, where setting up a Node/PHP/Python environment took less than 3 minutes. It’s fast if you just want to deploy your app there in a matter of minutes. It has NGINX right out of the box so you would not have to worry about load balance. Integrated databases are available, for all the backend platforms. The plugins, extra cores and more database space all cost some cash but it’s not a crazy amount.
🏆 — Heroku
Choosing the right bug/project management tool

There are many that can be used: trello, clubhouse, dapulse. I have come to a conclusion that JIRA is the right choice! Why?
It has a really easy-to-understand project management tool which connects to everything else, including the bug reports.
JIRA’s API can be added to the platform so that it sends calls when there is a code failure and reports a bug ticket.
🏆 — Jira
Choosing the right tools for DevOps
This is a pretty huge topic, but I will try to talk about it concisely. I would pick one of built-in or easy-to-use unit testing frameworks which you can see in the picture below.

Mocha for Node.js, Pytest for Python and PHPunit for PHP are all good to start unit testing.
Locally, each developer can run the testing on their own machine to get to see if it works, but you really need a continuous integration testing system for them. So, whenever a developer makes a change to the code — ALL testing unit checks if some other function has been affected.

I have been playing around with a lot of tools: Jenkins, Travis and Circle ci.
Jenkins is hard to set up if you are a beginner since you need to get your own cloud platform to host it and configure everything manually. Travis and Circle ci are pretty great! Both are already cloud-based and they do an amazing job for beginners.
I would choose Circle ci since it has a better documentation and the UI is pretty easy to understand. They have a great community as well.
🏆 — Circle ci
Choosing anything else
That’s about it! Below is a picture of a startup architecture that you can look at for ideas.

Would love to hear everyone’s thoughts on this topic! Drop a line in the comments if you’ve got suggestions!
This post is written by Masnad Nehith, Senior Software Developer on the Aurora Exchange team.
