Reason for the post
Recently one of my colleagues asked the following question on Twitter:
If I would like to start new web project, which technology should I choose for my front-end and why? There are so many of them and every one is telling me something different. @gutek, @liveweird, @Kamil_Mrzyglod, @marekgrabarz, @ElaMoscicka, @SebastianFyda— Michał Furmankiewicz (@mifurm) August 18, 2018
This reminded me of a time when I was facing pretty much the same issue.
The problem can be stated as the following:
There are so many frameworks available to build a website... which one should I take?
The dev world we live in
Before digging into the details and decomposing the problem we should describe the current state of the software development ecosystem.
Programming became popular and available to pretty much everybody in the late '90s. Computer prices dropped and silicon devices became available to every western family. Internet, as a communication medium, multiplied the collaboration effect so Linux and the GPL movement could grow. Knowledge became easily accessible to everyone interested in computers.
An implication of that was continuously growing number of wise programmers. More and more people had enough knowledge to build their own software. We started to build products. At some stage we identified a need for tools that will help us build products in a systematic and structured way - we have given them a name -
The 'dev force', big and strong, started to produce frameworks.... a lot of frameworks... Each framework lives its own life. Some evolve and flourish, others are abandoned and die.
With all that above in mind, we have to choose the best framework now... or bet on the 'good' horse.
The most important thing is to understand
the context. You should answer questions like:
- what is the expected user-base in particular time-frame
- what is the expected application lifetime
- what is the project type - prototype, pet project, utility, platform etc.
- what is your technical knowledge in particular areas
- are there any technical constraints? (Like OS, region, devices type)
By asking those questions you discover your context. Having a well-defined context allows you to limit the number of potential frameworks. In a best-case scenario, you should end up with one framework. Usually, you have to choose from 2-3 frameworks.
By having your context described you can ask an expert in a certain technical area for recommendations - if you totally don't have any idea.
Application lifetime is critically important. If you forecast your application to be operational and developed for many years you should take into consideration various different aspects. What about specialists availability, security updates, etc.
What is your goal
At this stage, you should have a clear overview of what you want to build. Now you should aim to deliver it reasonably fast. Fast does not mean without quality. Fast means, the time taken in consideration to deliver required value. This includes potential learning process or deeper framework research.
Usually, you would have to balance between simplicity and complexity. Simple frameworks allow you to implement majority of the common scenarios but are not flexible enough. The are designed to do
one thing. On the other hand complex frameworks have applicability in most of the cases, but it takes time to master them and understand the rules.
Framework validation questions
If you end up with multiple possibilities in frameworks selection you should rank them with following questions:
- how well do you know the framework already? (what is your learning curve)
- how mature is the framework? (how many use cases were already solved)
- how often are the new versions released? (is the framework still maintained)
- how large is the community?
- how good is the documentation? (is it updated, are there any examples etc.)
- is it supported by any large company? (so it doesn't disappear any soon, but can drift to 'owners' direction)
- do the creators provide support?
- what is your gut feeling (I know it looks strange)
- for prototypes choose frameworks that can create results fast
- for simple applications/web apps choose mainstream frameworks
- for large solutions choose well tested (but probably not modern frameworks)
- pay attention to what you already know, so you don't have to learn everything
Are you a Microsoft stack developer?
For those who work on Microsoft stack, I have a couple of recommendations. Visual Studio provides a number of project templates with already configured frameworks.
Additionally, it's easy to use Azure functions that can speed up the development process. Eg.: SendGrid or Cognitive Services