us
us
HomeBlog

GET A QUOTE

Request project development services right now.
It takes up to 30 seconds.

    How to Choose the Best Technology Stack for Web Application Development

    Over my many years of work experience, I’ve often heard questions about what kind of technology to choose for a particular web project. Some people know we’re developers, so they ask us what’s right; others come in and ask us to do the job using a specific technology. The problem is that most people choose a particular technology for subjective reasons, but I still haven’t heard a worthwhile and comprehensible argument that will allow people to choose a technology objectively, based on facts, and not personal desires. In fact, there aren’t many IT specialists that can choose the right technology because you need to understand the specifics of the project, have many years of experience working with project development in several languages, know how such projects are organized, etc.     

    Before choosing something, let’s take a look at what some technologies look like, how they differ and what technology to choose and when. 

    This is how most people choose technology nowadays:   

    1. I like it;    
    2. A friend told me about it;   
    3. I read about it on the Internet;   
    4. This technology has been used to build a similar website. 

    Here’s where the problem lies: 

    1. I like it. That’s very subjective. And what if it doesn’t comply with the requirements? Or the people specializing in this technology are expensive and hard to find? Or what if this technology is on its way out?      
    2. A friend. This is usually a friend that knows “a little more” about IT than whoever he or she advises. Even if he/she’s a programmer with a lot of experience, he/she can’t be aware of all the solutions in all the popular languages. After all, no one asks what criteria this friend used to choose this technology. Unless this friend is a Google CTO, I’d simply not trust such a recommendation.      
    3. I read about it. This is a bit better. We can find different comparisons and arguments. But once again, even if you know a lot about developing new products, it takes time to understand all the options. Therefore, unless you know everything about project development, it’s really not worth reading so many technical reviews.     
    4. There’s an analog. Most popular websites are built on certain technologies because that’s the way “it’s always been done”. If Facebook had to choose a technology today, I doubt that it would use PHP as a basis. Furthermore, the technology may have become old and obsolete; it may have been marketed on the basis of the last three points; or some kind of widely-advertised technology, but not a very effective one, was chosen, etc. You can’t really know the real reasons for choosing some specific technology to be used in other projects. The best technologies are very rarely used in similar projects.

    In the end, none of the above methods of selecting development technologies meet the criteria of objectivity. Therefore, we should first define these criteria, and only then can we select a technical platform. Below, I’ll try to identify the criteria that are really important for the project and will be used as our basis. 

    Important criteria when choosing technology:   

    1. Size and type of the project;   
    2. Complexity of the project;   
    3. Speed of development;   
    4. Cost of specialists;   
    5. Availability of specialists;   
    6. Available development tools;   
    7. Availability of ready-made solutions;   
    8. Solution flexibility;  
    9. Availability of a wide community;   
    10. Solution fault tolerance;   
    11. Development trend;   
    12. Availability of detailed information;   
    13. Support costs;   
    14. Load time requirements;   
    15. Security requirements;  
    16. Cross-platform applications;   
    17. Integration with other solutions  

    When using the above criteria to choose a technology, we’ll be making an objective choice, and thereby saving ourselves a lot of time and money.  

    What kind of projects are there? 

    We’ll get back to the technologies later on, but now let’s try to understand the projects. The type of project often speaks for itself, and you can immediately say whether it will be suitable or not: it’s either a ready-made solution, or else you’ll see which way to proceed.

    The projects are classified according to complexity:

    1. Simple (business card sites, landing pages, simple online stores, simple applications) — such solutions are usually created on thematic out-of-the-box solutions, CMS or templates.    
    2. Average (complex online stores and marketplaces, national portals, different services, advanced applications) — such solutions are usually created using frameworks.    
    3. Complex (large portals, social networks, innovative and non-typical solutions) — the core of such projects is usually developed in a pure (native) programming language.   

    Themes: online stores, bulletin boards, social networks, etc. Out-of-the-box products have long been available for most of the popular thematic solutions, and since we aren’t trying to create a “monster”, it would be better to choose them. There are many solutions, and it’s impossible to describe everything in one article.

    Programming languages

    I’d single out three levels of abstraction in the technologies, namely:

    • Pure functional language is a technique whereby anything can be done. We are limited only by language possibilities. All the major websites, like Instagram, YouTube, Pinterest, Tumblr, Dropbox, Twitter, Facebook, Amazon, Digg, LinkedIn, etc., which are visited by billions of users, are created in a native functional language. Moreover, the largest projects even create new technologies for their own use as existing ones don’t suit them anymore.     
    • Framework is a type of development environment for a programmer that has ready-made rules and tools. On the one hand, framework helps and speeds up development; on the other hand, it imposes certain restrictions. Frameworks are used for projects of medium complexity, which are visited by millions of users. 
    • CMS is a ready-made solution, a customized application that enables us to build our project in parts. It’s not programmed, but customized. There are a lot of restrictions; it’s difficult and inefficient to go beyond the borders of the box. CMS is used to build simple websites that are visited by up to a million users per month.     

    One level of abstraction is often based on another, that is, frameworks are developed in pure functional language, and CMS is developed with frameworks. There are many different frameworks and CMSs for each popular language, but more about that later.      

    Today, websites are built with many different programming languages. There are many examples of major sites that have been created in all the popular languages. Ten years ago, when we discussed technologies used for major websites, it was mostly about Java. Today it can be almost any language, so it’s banal to say that websites are created in a particular language. This is linked to the development of the languages ​​themselves; over the last decade, many have been developed and applied widely. Of course, every language is different and when choosing, we should be guided by objective criteria and be aware of the project goal.  

    Without using frameworks or out-of-the-box solutions, but using a native language, we can build huge projects with higher requirements for flexibility, load and security. The budget is often not as important as efficiency for such projects. The larger the project, the greater the requirements for flexibility and load, which means it’s easier to build everything from scratch using the best specialists than to take some ready-made solutions whose authors aren’t identified and whose problems are concealed. For example, when it comes to a small project with 10,000 visitors per day, it’ll be cheaper for us to create it on a CMS, which will consume three times more server resources, then add another server for $50/month, and it will work. When we talk about a website with 100 million users per day, the cost for additional servers will simply be out of this world, so it’s easier and cheaper for us to invest money in developing a solution in a native language that will really be the best for a specific project.      

    The larger the project, the more technologies it uses. Several programming languages ​​can be used at once in large portals. Here again, we must look for objective criteria when choosing the technology. One language can often work well for one specific task, while the other works well with another. Such projects can be so important that their parts can work on different servers, with different domains (subdomains) and different technologies. Don’t be afraid of considering the many technologies in a large project, although they shouldn’t all be used unless it’s really necessary. We should also remember that not all technologies are compatible. The most striking example of using different technologies is Google, which is so large that its different parts are written in C/C ++, Java, Python, JS and other languages. Moreover, Google is actively creating new technologies, such as the currently popular AngularJS.

    Below is a brief description of each popular language:     

    1. PHP is mainly used for simple and average projects. There are a lot of out-of-the-box solutions and the programmers are relatively inexpensive. It hasn’t been very trendy in the past few years although many good opportunities were available under the latest version of the language released as PHP 7.4.     
    2. Python is a modern language that enables you to work rapidly and qualitatively. It can be used for average and large projects. It’s difficult to find programmers, and they’re not cheap.   
    3. Ruby is a modern language that also enables you to work fast. It’s mainly used for the development of simple and medium-sized projects, often developed by start-ups. There aren’t very many programmers, and they’re expensive.    
    4. Java takes a long time to develop and can be expensive. It is used mainly for large projects with specific requirements.     
    5. C# is an analog of Java, also used for large projects, and partially in FinTech.     
    6. JS has been growing very quickly, and has become the trend in the past few years. It has many development possibilities and you can create anything you want, even games. It’s used for average and large-sized projects.     

    I’ve described the most popular languages used on websites today. There are many new languages that are growing very quickly, in particular Scala and some others. But, as they’re pretty young and immature, I wouldn’t recommend following this trend or using them until they’ve developed into something bigger and better. 

    Examples of large sites:     

    • PHP: Facebook, VKontakte, KinoSearch  
    • Python: Instagram, Pinterest, Reddit  
    • Ruby: 500px, Groupon, Airbnb  
    • Java: EBay, Amazon, Alibaba  
    • C#: Guru, Stack Overflow, Bank of America  
    • JS: LinkedIn, Walmart, PayPal  

    These sites perfectly demonstrate that large websites can be created in different languages, and this is normal. Once again we arrive at the conclusion that technologies should be selected according to what’s really needed and should be guided by objective reasons.

    Frameworks and platforms 

    This represents a development environment for programmers with a ready-made infrastructure and several ready-made functions and standard solutions for typical tasks. It’s a kind of half-finished product that allows you to create something useful. Each language has many different frameworks. There are general ones that were created to develop any kind of solution, and there are specialized ones used for narrower tasks. For example, Sylius is a specialized E-commerce framework based on Symfony. There are also some that are used for large and complex solutions, while others are not designed for such tasks. Below I describe popular frameworks for each language that you can use for large and complex solutions.    

    Relatively large and complex websites with unique functionality are developed using frameworks. It’s much faster and cheaper than using a native language, and this solution allows you to develop really complex things and improve loading speeds. In addition, it’s almost always more secure than any CMS.   

    Popular web frameworks  

    1. Laravel  
    2. Django  
    3. Ruby On Rails 
    4. ASP.NET
    5. Spring  
    6. AngularJS 
    7. Express

    Most frameworks are in PHP and this language offers a lot to choose from, but there are very few functional things. There are fewer in other languages, and some really high-quality frameworks only have one, like Ruby. Java generally has many different frameworks for different purposes, and not only for websites. All these frameworks are growing and being developed more and more year after year; new versions are released; some frameworks become better than others. For example, Laravel has made it to the top only in the last few years even though the most complex sites are still being built on Symfony.      

    CMS and CMF   

    This is ready-made software that needs to be set up; sometimes something has to be added/or a part has to be rewritten. There are many such solutions available in any language, but traditionally all popular CMS are created in PHP. This is a matter of language development. Previously, simple websites, for which CMS was created, were written in PHP. I remember the days when CMS wasn’t around very much; there were scripts, i.e. separate ready-made parts of different sites. Later, these scripts were collected and put together in an out-of-the-box product that was designed to solve the needs of 90% of the simple sites. So, it turned out that the main CMS were developed in PHP. Today, CMS ​​are developing poorly in other languages because there’s strong competition against PHP, and language isn’t so important for a simple website, so everyone’s looking at what these finished products can do.    

    CMF — to put it in plain language, it’s something between the CMS and the framework in terms of performance. Usually, CMF is used for the most complex sites in this category. This approach allows you to get rid of unnecessary CMS parts, which are not required in a particular project.

    CMS have different purposes: general ones, for online stores, blogs, etc. They’re different in terms of use: paid and free. There’s a whole bunch of different paid and free modules for each popular CMS that are easy to connect and use.    

    Small sites, which are mostly needed for small businesses, almost always use CMS. This allows you to save a lot of time during development. In addition, you won’t need expensive programmers to configure such solutions; novice programmers can do this, at least the setup itself, but it gets more difficult if you need to write the code.     

    It’s namely when working with CMS that the greatest misunderstanding arises among end customers.  All CMS have tons of ready-made codes created for all kinds of cases. There are dozens and hundreds of modules with out-of-the-box solutions. All this greatly limits specialists. Such solutions are very “slow”; they’re not at all flexible; they’re very easy to hack, especially free CMS. CMS are often hacked through third-party modules, which have critical vulnerabilities because we never know on what level the programmer wrote in order to create any of the modules, that is, NOT every CMS is designed for large and complex sites. They can’t handle heavy loads. This solution isn’t secure, no matter what the developers of a particular CMS say.     

    In over ten years of work experience, I’ve seen solutions on almost all popular CMS, and I’ve had to work on several personally. Some are popular in runet, and others are more widely known in western countries. It makes no sense to break down CMS in terms of languages used in them for the above-mentioned reasons.  It would be better to say a few words about each popular CMS:     

    1. WordPress — sometimes a blog engine; today, it can be used to develop almost any website, including stores. It’s one of the most popular CMS in the world; there are many examples of fairly well-visited sites. It’s often used to build an information site, including different media. The system is free.     
    2. Joomla! – a general purpose CMS. The quality is not particularly different. It’s used to create very small websites and is usually cheaper than all the other options since many novice programmers learn and practice on this CMS. The system is free.      
    3. Drupal is a general purpose CMF. It has built-in Symfony framework. It’s quite powerful; there are many well-known websites that use it, for example, the official White House website. The system is free.      
    4. Magento is the most popular management system for online stores. It’s quite powerful and complex. It’s rarely used in runet, but more in western countries.    
    5. PrestaShop is one of the most popular CMS for online stores. It’s also quite powerful and used mostly in western countries. The system is free.    
    6. OpenCart is another popular system for online stores, but it’s used more in runet than in the West. It’s used mainly for small and simple online stores. The system is free.     
    7. 1C-Bitrix is a widely acclaimed general purpose CMS; it’s number 1 in runet. It offers many possibilities. It’s often used to build large and complex sites, but after a certain number of visitors have been reached, it’s rewritten with other technologies. Many people think that only this CMS can be integrated with 1C, which is not true, since all the CMS enumerated on this list can be integrated with 1C; all the CMS have special modules to do this. The system requires payment.  

    I’ve worked basically as a developer with all the above-listed CMS. I definitely do NOT recommend Joomla, but you can work with all the others. It’s better to choose specialized rather than general CMS for online stores. Besides, 1C-Bitrix, runet has commercial CMS that are similar in many respects. It’s important to remember that each system has its own characteristics, but they aren’t designed for large and complex projects.  

    Website Templates    

    Template solutions have been actively developed in the past five years. They work one step better than CMS. If CMS operates as a constructor method and needs to be configured, then templates are ready-made solutions for typical cases. For example, every city has restaurants, taxis, clinics, etc. For all these types of small businesses you need about the same thing. Therefore, you can simply choose a ready-made thematic template, and change the logo, colors and content. If desired, such templates can be modified at the owner’s discretion.     

    Such solutions have several advantages: they’re very cheap and can be launched instantly. But, such solutions don’t take into account the specifics of the company and the conversion won’t be very high.    

    There are special template catalogs: TemplateMonster, ThemeForest, etc. There are also online website building platforms, including thematic ones, such as Wix, PageCloud, etc.    

    Mobile applications    

    Two approaches have recently been used in mobile applications: native development and cross-platform technologies. Native apps use the original programming languages, in particular Swift (for iOS; previously it was Objective-C) and Java (for Android). Today, there are quite a lot of cross-platform technologies; they’re based on different programming languages, in particular: Apache Cordova, React Native, etc. Some are better, some are worse. In any case, complex applications are always written using native technologies. There are often problems with cross-platforms, up to the point that some functions are simply inexecutable on certain cross-platform technologies; the device’s RAM gets heavily loaded, the battery drains quickly, etc.     

    People are often confused with these two approaches, trying to use cross-platform approaches for all occasions. It’s understandable because cross-platforms allow you to write the code once, and it works immediately on iOS and Android, while on native technologies it’s at least twice as expensive. However, few people know about possible additional problems that may arise in the development process. I’d advise you to choose the technology very carefully, and use cross-platform only for simple applications; otherwise you’ll have to rewrite everything. However, cross-platform technologies are gradually getting better, and the applications written on them have become more and more complicated.    

    Technology stack in large projects    

    I’ve described the different languages ​​and frameworks that are used in large projects, but if you look at really big projects, you can find a whole range of languages ​​and technologies. Almost all large websites basically use one language and a few additional ones. The same is true for databases: relational ones can be used for some tasks, and non-relational databases for others, and all this is organically combined within a single project.     

    The choice of technologies depends on the architecture. It’s the architect who plans the main blocks for the future site — what language will be used, will it be native or framework, what kind of caching system to choose, which databases should be used, how it all relates, etc.    

    Let’s look at Instagram technology as an example (data: Insight IT):    

    • Ubuntu Server 14.04 LTS — the main server operating system  
    • Python — the main programming language for the server part   
    • Django – framework  
    • nginx — the second level balancer for incoming HTTP requests  
    • gunicorn — WSGI server  
    • HAProxy — load balancer inside the system  
    • PostgreSQL – main data warehouse  
    • postgis — support for geo-queries  
    • pgfouine — logs reports     
    • pgbouncer – creates a pool of connections  
    • Redis — an additional data warehouse  
    • Memcached – caching  
    • Gearman — task queue  
    • Solr — geo-search  
    • munin, statsd, pingdom – monitoring  
    • Fabric – cluster management    
    • Xfs — file system   

    So, this is quite a common technical stack. Instagram isn’t the largest and most complex service in the world.    

    How much does a web specialist cost?   

    One of the most important factors to consider when choosing technology is the value and availability of specialists because this is precisely the most expensive part of any project. In Runet there is only one web ranking on salaries: https://jobs.dou.ua/salaries/ — I got it from Kyiv, Senior level, 3-5 years’ experience. Let’s compare the mean values.

    Salaries:  

    • C++ – $4,140  
    • Java – $5,000  
    • JS – $4,700  
    • PHP – $4,025    
    • Python – $5,000    
    • Ruby – $6,000   
    • Scala – $5,450   

    The picture is quite different in the U.S. 

    Now we convert digits into human language. Although Java isn’t a new language, Java specialists have always been some of the most expensive. PHP has always been the cheapest, and there are a lot of specialists in the market. In comparison, I’ve also introduced Scala as one of the newest and most trending languages in programming. JS is also expensive; this is due to its rapid growth in recent years. 

    So, if we want to economize, we’d better stay with PHP. The specialists are cheap, and the community is large. If we want the most qualitative programming language, then we should look at Scala, which is called the future language for web development, but, it’s almost impossible to find good specialists, and functional developments simply don’t exist.    

    Another important parameter is the speed in software development. After all, both the programmer’s salary and the speed are important. If we exclude existing developments, some of the fastest are Python and Ruby, while the slowest is Java. That’s why, in the last ten years, almost no new megaprojects have been created with Java, but many projects have been built using Python, which I will discuss below.   

    Trends   

    When choosing technology, we need to think in terms of the future, and especially if it’s a large project. Technologies are growing very quickly; newer and newer versions are released regularly. Languages ​​change significantly every 5-7 years, frameworks — every 2-3 years, and CMS — every 1-2 years. Today, not only is it important to choose good technology, but also to anticipate development trends so as to remain relevant and effective in future years. Otherwise, it’ll be necessary to rewrite the project, which always causes problems in the long run.   

    There are many different studies that might give us some statistical data. For example, the TIOBE Index study has some interesting statistics. According to the results of different studies, there are several obvious leaders — Python and C. Java also looks quite good.   

    Just to see the difference, let’s see what specialists are in short supply in the U.S.  This is a realistic picture of the trends that we see around us.   

    What languages have been used over the last ten years to create large projects?    

    • Airbnb – Ruby  
    • Instagram – Python  
    • Pinterest – Python    
    • Foursquare – Python    
    • Groupon – Ruby -> JS    
    • Twitter – Ruby -> Scala  
    • Uber – JS  

    These are no longer theoretical statistics, but real practice. Python and JS have really shown their worth. 

    The cost of support     

    Of course, an important criterion for choosing technology is the cost of support, which few people consider at the beginning of the development. Typically, everyone thinks about support in terms of cost per hour, but that’s fundamentally wrong. Several parameters are important: the cost per hour, the number of hours, official support for the technology, the availability of specialists, the right approach to development, etc.    

    The cost per hour depends on the specialist’s salary, which we’ve already dealt with above. But, the number of hours and the quality of the code depend on the technology itself. If we go for the out-of-the-box solution, then we’ll need a lot of hours, that is, on the one hand, we can save money while working out the first version of the project, but later on, we may get stuck in making permanent refinements. Well, if the solution is popular and official documentation is available; but little-known out-of-the-box solutions without any documentation are chosen, the cost of support for such solutions will be many times higher than the cost of the out-of-the-box solution itself. The same goes for poor-quality development: for some reason, we’re not used to conducting technical audits for ready-made solutions or any of their parts. On average, you can check almost any solution and find the main disadvantages in 20-40 hours. The more qualitative the code, the easier it is, and therefore the cheaper it is to support it.     

    We should also consider which version to use for language, framework, and CMS. You should always use the latest stable version, so that it’s not already obsolete when the project is released in production. When a new version appears, you should immediately consider converting the project into this version because if you pass over several versions, you’ll run into problems when making a new update.    

    So, what should we choose?      

    Let’s draw up a short summary. Out-of-the-box solutions and templates are often the best choice for simple websites. Complex sites are created only on frameworks or even in native programming languages. You can do it in very different languages; the language is chosen for the project. Simple mobile applications can be created on cross-platform technologies, and sophisticated ones are usually done on native technologies. In conclusion, when choosing a platform, you should always be guided by objective criteria, which I’ve described in the article.

    Author
    Mykyta Semenov
    CEO, SECL Group
    The CEO of a software development company called «SECL Group». Extensive experience in web development since 2002. An author of numerous studies and articles, a speaker at industry conferences, and an independent consultant for commercial companies and government agencies.

    Related publications

    More about us
    Company
    See more work
    Projects
    Have a project?
    Contacts
    Canada

    240 Richmond Street W
    Toronto ON M5V 1V6
    +1 (647) 946-92-12

    USA

    3524 Silverside Road
    35B, Wilmington,
    Delaware 19810-4929
    +1 (929) 237-12-11

    Ukraine

    174 Horodotska St.,
    Lviv 79022
    +380 (44) 389-90-39

    Copyright © 2005 – 
    2022
    , SECL Group Corporation