Frameworks, CMS, HLL: everything you need to know about the technology stack before making your own project
Each month several clients come to our software development company with a clear vision of what technology they want to use. This would be great if they were IT experts, but they aren’t.
And how do they choose the precise technology needed for this particular project?
There are 4 key motivations:
- they read about it online, hear that it’s reliable and like it;
- they discover through statistics that this particular technology is a trend;
- they know of a similar project built using this technology;
- they have a friend who’s heard of it and advised them to use it.
What’s the problem here?
You like it. This is very subjective. And what if, according to the requirements, it doesn’t fit?
Read about it. It takes time to figure out all the aspects, even for an expert with a strong basis in development – and without this, reading technical reviews is worth nothing.
My friend said it’s cool. This usually means someone “slightly better” versed in IT than you are, i.e. whose personal opinion is more valuable than yours. But even if he’s an expert programmer, nobody knows if he’s properly assessed every aspect of the project.
A similar website uses it. Most of the popular, mature apps share some approaches because integration with existing, out-of-date solutions demands some specific technologies. If Facebook was only now choosing which technology to use, it wouldn’t take PHP as its basis. For its time PHP seemed innovative, but now it’s a different story. Here is the chat on Quora with the same issue. The thing is, you can hardly know the real reasons behind the choice of technologies for other projects.
None of these methods are objective.
Below we will try to give you some inspiration on how best to pick the technology for your IT project.
List of objective criteria
- Size and type of the project and complexity of the tasks
- Development speed as well as cost and availability of IT experts
- Presence of development tools and ready-made solutions
- Project flexibility and scalability
- Technical requirements, existence of detailed documentation
- Support costs
Correlation between type of the project and the technology to choose
Types of projects
We can try to make recommendations for the direction of development based on the size and complexity of a given task.
Usually, IT projects are divided into 3 groups:
- Simple (business sites, landing pages, small online stores or applications) – such solutions are usually created with the help of CMS or ready-made templates.
- Medium (complex online stores and marketplaces, national-scale portals, various SaaS, advanced applications) – such projects are usually built around frameworks.
- Large (huge portals, social networks, innovative and non-trivial apps and integrated software systems) – the core of such projects is developed in a HL programming language.
If all you require is a set of standard features, there exist multiple SaaS and CMS programs that offer them.
They are available at a very reasonable fee, easy to use and can be implemented as soon as payment is made on a regular subscription basis. Moreover, the creators usually provide support and release regular updates.
However, if your project demands a customised approach, create from scratch unique software which meets every requirement.
Abstraction in software development
In software development, there are 3 levels of programming abstraction:
HLL coding: programming in a high-level language (HLL), you can do anything – you’re limited only by time and budget. Pure coding permits the development of advanced programs with high functionality, traffic and security. All the largest programs in the world, including Amazon, YouTube, Tumblr and Facebook, are written in HLL.
Creating your project from the ground up in HLL will demand more time in comparison to the integration of some ready components. In IT we count time as the hourly rate of a programmer multiplied by the hours needed for project realisation.
A framework is a kind of functional block with predefined features. The framework speeds up development but imposes certain limitations. It often demands additional data (libraries) and puts strict restrictions on integration.
A CMS (content management system) is a ready-made solution. These typically have a massive number of restrictions on their functionality, flexibility and appearance. It is difficult and inefficient to go outside of the box, but you can develop simple sites with up to a million users per month.
Most often, one level of abstraction is based on another. For each popular language, there are many different frameworks and CMS.
Moreover, different technologies can co-exist within one large project. For example, one computing language is more suitable for team programming and another for encrypting – this is why different components of the solution use different languages. This is okay if it helps to solve business tasks more efficiently.
When do you need HLL?
Pure coding is used when the requirements for functionality, flexibility, invulnerability and data exchange speed are at the highest level.
This applies, for example, to huge projects which have no basic solution and where budget is often not as important as efficiency.
- The larger and more complicated the project, the greater the requirements will be. It is easier to attract senior programmers and to create everything from scratch in order to guarantee the proper quality and security level instead of adding some open-source components and risking the loss of control over the whole system.
Web solution with CMS
When it comes to a small web project with a traffic of 10 thousand people a day and flat functionality, it is more convenient to use a CMS. This will use up server resources at three times the rate, but just install an additional server for $50 a month and it will work.
In the case of a site with an attendance of 100 million users per day, the cost of adding servers will be outrageous. Here it is, therefore, better to invest money in developing a solution in a common high-level language which demands less from the point of hardware resources.
Popular programming languages
Here we will try to give a brief description of the most widely used high-level languages.
- JS - this is a simple dynamic computer language which helps to make dynamic websites via integration of different scripts into HTML pages. It is used for small and medium-sized web projects with user interaction. There are a variety of cheap JS-competent programmers who are easy to find on the market.
- PHP - this is used mainly for small-scale and medium projects. Developers are relatively cheap. The counter-trend of recent years, although with the release of the latest version it has gained some really powerful features.
- Python is a modern language. Development using it is fast and of high quality. Used for medium and large projects. Hard to find programmers for and they are usually not cheap.
- Ruby is a modern language and development using it is fast. It is used mainly for simple and medium-sized project and loved by startups. Programmers are just as few and expensive.
- C# is used mainly for large projects with specific requirements. It’s a general-purpose language, so you can see it in very different projects, programmers are usually highly paid.
- C++ - very rapidly developing, the trend of the decade. It is used mainly for large, complicated projects with specific requirements. Programmers are expensive.
- Kotlin - statical cross-platform programming language. It represents one of the modern trends of recent years for the development of Android-related projects and is widely supported by Google. Therefore, a lot of mobile apps are now programmed using Kotlin.
There are also many new languages that are growing very quickly, for example, Go. But right now they are quite young and raw. For entrepreneurs, this means that the use of young languages for business projects can cause more harm than pleasure for your software users. This is not the fault of developers but of the changes in the language itself, which will lead to some unpredictable software behaviour.
- However, there is a relatively young programming language – Swift – that goes beyond expectations. It is used to develop native and cross-platform apps for iOS. Based on our experience, it’s great for business mobile applications.
The preference for one language over another should be based on the total scope of the functional and nonfunctional project demands, including peak user flow, scalability, hardware and integration with other software needs.
Frameworks and content-management platforms
Every language has many different frameworks. These include both general-purpose ones created to develop any necessary solutions and some for specific tasks. Sylius, for example, is a special e-commerce framework based on Symfony.
With frameworks, one can develop quite large and complex sites with advanced functionality simply via integration of several frameworks, which will be cheaper than in HHL programming code. At the same time, such a solution allows you to develop highly complex things much faster.
In addition, frameworks with the functionality of content administration are always a safer option than any open-source CMS – such as the very popular Wordpress, which got modifications from all over the place on a daily basis and often became the point of vulnerability.
- PHP: Symfony, Yii, Laravel
- Python: Django
- Ruby: Ruby On Rails
- C #: .NET
- C++: Qt
- JS: AngularJS, ReactJS, Vue.js
PHP has the largest number of frameworks, so there are plenty of options to choose from – yet not so many of them are truly functional. In general high-quality frameworks are quite rare. The Ruby language, for example, has just one worth mentioning. C# has several frameworks for different purposes, not only for sites. All of them are constantly developing and more and more versions are coming out.
Consequently, even though frameworks do look attractive for medium-scale projects, they have some drawbacks, especially for large ones. These take the form of additional limitations to the project architecture for integration, demands of appropriate libraries and necessity of regular updates.
CMS and CMF
A CMS (Content Management System) is a piece of off-the-shelf software which only requires additions to or rewriting of some of the parts.
- There are many such solutions in any language, but historically it turned out that almost all popular CMS are made in PHP.
- Here it is a matter of language development – the early websites for which CMS were created were written in PHP.
- CMS are usually used for online stores, blogs and so on.
- For every popular CMS there are a bunch of different paid and free modules that are easy to download and use.
- Small businesses almost always use CMS for their websites. To do so is a very effective time-and-money-saving solution.
CMF (Content Management Framework), in layman’s terms, is something in between a CMS and a framework. CMF is usually used for more complicated websites. It allows you to get rid of unnecessary parts of the CMS which are not required for a specific project. These are far more customisable than any CMS.
A CMS includes tons of ready-programmed code for every single occasion. Tens and hundreds of modules really do interfere with the normal workflow of developers. All this greatly limits programming capabilities and brings additional difficulties to any non-trivial tasks. Such solutions are inflexible and potentially easy to crack, especially in the case of open-source CMS.
Often CMS are cracked through third-party modules that have critical vulnerabilities, since we never know which programmer wrote this or that module. Therefore, no CMS is safe for a large and complex site.
Some popular CMS and CMF:
WordPress - once a blog engine, now you can find almost any type of site made on it, including e-commerce. It is one of the most popular CMS in the world. Often used to make informational sites, including various media. The system is free, but some plugins and design themes are paid.
Joomla! - General Purpose simple CMS. The functionality is very limited, lots of small sites are made on it as it’s one of the cheaper options to create your site. Many novice programmers begin learning with this CMS. Open-source and free.
Drupal is already a general-purpose CMF, which as of recently comes with a built-in Symfony framework. Pretty powerful, there are well-known sites on it – for example, the official website of the White House. Also free.
Magento is the most popular management system for online stores in the world. Pretty powerful and complicated. Requires more experienced webmasters and developers.
Each system has its own pros and cons, but none of them are designed for large and complex projects.
- The main thing is not to forget that no one can guarantee you the invulnerability of such a system.
Since business mobile applications have become a real trend, let’s have a look at them too.
There are two approaches to use: native development and cross-platform.
Native app development for iOS is performed mainly in a programming language Swift, previously Objective-C was used in this case. And Java, as well as Kotlin, are popular for Android native apps.
Complex applications are always made native. They look and function best on different devices running the same OS. However, the problem with them is that you have to plan the creation of two separate mobile apps with similar functionality or to choose the platform first: Android or iOS and stick to one app as your main priority.
Assuming that cross-platform applications are the best universal solution to any platform is a mistake.
Much depends here on the implemented technical aspects, and simply using HTML and CSS3 won’t work well in this case.
Hybrid app development with frameworksNew frameworks appear every day that help improve the quality of hybrid apps. For example, a whole new language, Dart, was introduced specifically to create high-productivity apps in a structured and flexible language.Flutteris also gaining popularity.Yet their functionality remainslimited.
In these cases, the following problems can arise with cross-platform developments:
- In following the various guidelines of iOS and Android, the program code can grow very long and runs the risk of running sluggishly. This, in turn, leads to delays in response on users’ smartphones screens.
- Providing app users with a convenient user experience across both platforms using a hybrid program is a real challenge for developers. These apps will never look and feel as good as their native counterparts, and the usability of hybrid apps is often cause for user dissatisfaction.
- With integrated cross-platform app development frameworks, your app became dependent on updates and some functions are simply unfeasible.
- New features of the mobile platforms, meanwhile, cannot be used as soon as they’re announced by iOS or Android developers but at some later point. In this way, your app loses its competitive edge as compared to native applications.
Advanced cross-platform solutions with C++ programming
In fact, cross-platform apps written in C++ can cope well with even the most complicated tasks.
For example, they can be used for the machine-learning needs of mobile technologies, e.g trend forecasting and data-mining, web applications with computer vision, and much more.
However, writing a high-quality hybrid app with C++ demands highly-qualified specialists. The main problem here is that the experts at this level of proficiency are usually involved in large, long-term projects, not in the creation of middle-difficulty hybrid apps.
The cost of development from scratch with C++, meanwhile, has again become quite expensive. Therefore, if the main reason for choosing a hybrid app in your case is money, you’d be better sticking to framework integration.
Technology stack in large projects
If you look at really large projects, you will find a whole range of languages and technologies. Almost all large-scale software solutions are based on several languages and frameworks, using all the power of the different advantages provided by each of them.
All technologies are developing very quickly and more and more updates are coming out. Programming languages change drastically every 5–7 years, frameworks every 2–3 years, and CMS every 1–2 years. It is important not just to choose good technology today, but to predict development trends in order to remain a leader in a few years. Otherwise, you will have to rewrite the project completely, which is always a question of time and money.
When it comes to choosing technologies, we need to look to the future – especially if we’re talking about a large project.
Cost of specialists
One of the most important factors in the choice of technology is the cost and availability of programmers. We have filtered London developers, Senior level, experience 3-5 years to discover how much they make.
- C # - £45,000 - £65,000 a year;
- С++ - £50,000 - £70,000 a year;
- Java - £60,000 - £80,000 a year;
- JS - £35,000 - £50,000 a year;
- PHP - £35,000 - £45,000 a year;
- Python - £60,000 - £75,000 a year;
- Ruby - £35,000 - £55,000 a year;
- Objective C - £55,000 - £65,000 a year;
- Swift - £55,000 - £60,000 a year.
You can check the actual rate here.
To summarise, experts in Java, though not a new language, have always been among the most expensive. PHP has always been the cheapest, and there are a lot of mediocre specialists on the market, but real experts are rare and well paid. Another costly one is Python. There aren’t so many professionals that can develop a large project in this language because it demands a high level of qualification.
- Thus, if you want to save money, you better start with PHP. Specialists are cheap and the community is large.
- And if you’re looking for the highest quality and functionality for a huge project, then look at Python. It’s one of the most difficult languages to work with but the results will pay off. However, once again, everything depends on the architecture and the goals of your project.
Another important parameter is the speed of development. The fastest languages in terms of development will be Python and Ruby, while the slowest will be C++ and Java. It should be remembered that, as Einstein said, all times and positions are relative.
Of course, an important criterion for choosing a technology is the cost of support. Only a few people think of this at the beginning of development.
Points to count when choosing the technology:
- the cost of an hour;
- the total number of hours;
- availability of programmers;
- the strategic approach to development;
- simplicity of maintenance and technical support.
The cost of an hour depends on the salary of a specialist. But the number of hours depends on the technology itself and the quality of the code. If you rewrite an out-of-the-box solution, this can mean very many hours.
Using popular computing languages and frameworks, you can be sure of a professional level of support. However, an unknown off-the-shelf solution without any documentation can result in maintenance costs much higher than the cost of the program itself.
The same applies to poor-quality development. Trying to save money on testing and quality assurance isn’t going to work. On average, you need 20–40 per cent of the project time to check the solution and discover its main weaknesses. The better the code, the easier and, consequently, the cheaper it is to maintain it.
You should also look at the version of your frameworks and CMS. It is vital to always use the actual version so as to avoid the risk of it becoming obsolete before your project is released into production. When a new version appears, you should consider the possibility of transferring the project to this version – because, if you skip several versions, then there’ll be problems with making a sharp update.
Let’s sum up
Web project development:
For simple sites, out-of-the-box solutions are often best suited.
Complex projects are made on frameworks or written in HLL programming languages.
The same goes for mobile applications:
- simple mobile apps for tests can be cross-platform;
- complex, market-targeted applications must be native.
Based on a concrete set of requirements and the existing software/hardware, the architecture and languages are chosen individually for each project. When choosing a platform, you should always seek to stay objective.
This is extremely difficult to do if you’re not an IT expert. The choice of technology and project architecture depends on the long list of functional and non-functional demands. It is the software architect who must plan out the technology stack.