Initially I decided to choose Python/Django because I am familiar with that tech stack and I can be productive from first day. But I have some doubts because our web app will use heavily a lot of interactive stuff like a WebRTC, realtime whiteboard, chat messaging etc.
So, do I need to choose something like NodeJS based web frameworks or I can stay with Django using builtin Channels library?
If I need to choose NodeJS based solution, what kind of libraries do I need to use? Express, React, MongoDB, etc. Is there a some recommended ways of building such apps and do it have standard functionality with common cases like user authorization, session etc.
Maybe some another good alternatives here?
Anything else and you're making serious tradeoffs on mindshare, features, or something else.
Of those 3, I know Rails has good realtime support via ActionCable.
I was under the impression that scaling ActionCable beyond 1k/users per server was pretty difficult.
I came from Rails to Laravel. It has a similar feel and in some ways is more fun to work with.
Part of that is the great community and lots of make your life easier features. Especially Laravel Forge and Envoyer. Forge makes spinning up servers easy and secure and deployments a breeze. Envoyer adds zero down time deployments.
These are both paid SaaS but they fund the development of the framework and provide way more value than the monthly cost.
Laracasts is also great for getting up to speed with Laravel.
How is React superior to Angular in your use cases?
Whatever you're good at and can get a decent MVP out of the door with.
That might be Python and Django like you mentioned above, it might be NodeJS, or it might be anything from React to Angular to any other framework you can imagine.
Because at the end of the day, whatever you actually write the product or service in matters far less than what you actually do with it. Indeed, unless your audience are programmers and run your software themselves, your audience won't give a toss what your software was built in.
Pick whatever you want to write this thing it, but always remember that being early to market it usually a hell of a lot better than being late because you spent tons of time learning an all new framework for it.
There will always be arguments around the "optimal solution", but the only solution that matters is the one that gets your product to market the quickest and with the least resistance.
If you know Python and Django, keep on keeping on.
Of course, there is always room to experiment and try new things for learning purposes.
Don't get lured in by the clickbait articles and twitter stack-of-the-month evangelists.
There are very few framework choices that are 'bad'. And I'm willing to bet that a dev that knows a 'bad' framework inside and out is more effective than someone who hops around to the current flavor of the month.
The main reason should be the people you want to hire and how you structure your team. Also, you need to consider if you need high performance or data science
Rails - good choice to start off. Fast to bootstrap a product. If you do not need high performance, you can get old with it otherwise, you will move.
Java Spring - a lot of people know Java
Python - framework is not the fastest and modern, but python is a good skill to have in your team if you need data science
.net mvc -- became an interesting choice.
Elixir Phoenix - smallest community but fun to work with and awesome performance (like .net or spring) will scale very well.
Go/Iris -- best performance and easy to learn. Is missing strong abstractions but an awesome community and libraries.
Javascript (express) - ever changing environment. Your developers can work on frontend and backend. It's an advantage to have just one language.
My favourites are Go and Elixir but in the end, I would decide on the people you will hire.
I would recommend labstack/echo or go-gonic/gin as alternatives, chi if you're looking for something more minimal.
if you haven't seen Sam Stephenson Turbolink talk from RailsConf 2016, you should give it a watch. What they did in a year with a small team is amazing.
The "best" is what you can get the best product done the most efficiently, and what you're able to hire for. If a niche new thing comes out that might be 1% faster in synthetic tests, but you'd have to spend 4 months learning it as well as what you know now and there are no people near you to hire, it's not really the "best" for you.
However, I'd like to highlight ASP.net Core + Angular + Visual Studio here. Microsoft appeasement towards Open Source and cross-platform made this a solid choice. As web apps grow steadily in complexity, a modern strongly typed language like C# (and TypeScript) might be helpful for architectural patterns. And, last but not least, the tooling around the Visual Studio product family is maybe best in class.
I am saying all this as someone who has not touched any Microsoft product for years.
I use sailsJS in my day job which is built on top of expressJS, and it does everything you want out of the box for GET, POST, PUT and DELETE simply by adding a model file and configuring the MongoDB connection string. It also has standard functionality with it such as logging, session, authorization, BUT you have to spend time learning how it works with sailsJS. Therefore it is much easier to start at a lower level framework like express and add high quality functionality modules as you need it, such as expressJS and adding your favorite logging/apm module like New Relic.
I've done .NET, Python and now I'm doing Node at work. By far, Node is my favorite because it always just works. I develop on Windows 10 and deploy using Ubuntu 16 docker images. I use mssql node module and it has just worked in both OSs. The only cross platform issue, with Node, I've had was that file names are case sensitive in Linux but not Windows.
For UI development, that's another beast. I wrote an Angular 5 application recently but I don't like it. Vue and possibly React look simpler.
As a bonus it has a good community and is in my opinion a pleasure to work with. I've released a couple production projects using it and am currently building my third. Ive also found from my own experience and watching a new team pick it up that the learning curve is fairly small.
Write your application in Python/Django. Your concern should be getting to market fast, not which tech should I choose.
Stick with what you know for the parts that don't absolutely require another solution; not all (parts of) pages will be so interactive. Then branch out a bit where needed, e.g. to handle socket connections well. Maybe not all of that needs to be handled by the same service?
If you move the semi-realtime stuff into a separate project, it will be a lot smaller in scope, hence less risky to experiment with. Regardless, I wouldn't stray too far. If you'll be writing Javascript anyway, NodeJS could still be fine, but don't needlessly bring in a third language. Do try Channels, but don't overlook other Python solutions. Tornado is a workhorse that doesn't get nearly enough credit in my opinion.
If your startup is for consumers and you don't have a good estimate of your growth or you don't know how fast your app will need to scale, then make sure you can hire people who know quickly. Your hiring skill will be more important than your tech.
Also, if the complexity of your app is low or medium, consider your first implementation as a prototype that - given growth happens - can be replaced with a faster stack relatively simple.
If high concurrency is needed, you'll bump into frameworks focusing on async I/O. Java and C++ implementations are the leader here. (see techempower benchmarks for more information).
If you can commit to a datastore (and you rarely make a mistake by choosing PostgresQL), then replacing your prototype down the road is easier.
Disclaimer: I work for skygear (it's a opensource project)
(We're a 25 people remote company and have been in business for almost 10 years now, so we've a little bit of an idea of what we're talking about. Disclaimer though: one of the tools mentioned in this blog post -- Localname -- if one of our own)
Personally, I love the combo Golang + Vue.js.
A product’s success has nothing to do with which language or framework you choose. They are there to help you develop something that works as per your needs.
You mentioned your product deals with chat messaging. So I would suggest using something like NodeJS + SQL for the backend. NodeJS for its ability to handle high volume of events. SQL for managing the chat history of each person in a relational way.
My two cents worth :)
Killer feature: you can use every symfony component in your own app without the framework if you want (console, http router, service container, templating, etc.)