Tuesday, March 31, 2020

Top Programming Languages for Android App Development

Do you know how often you check your smartphone in a day?

No? Well, according to the Journal of Accountancy, that’s an astounding 86 times a day (At least for us millennial's. The rest of the population is a little saner). And the reason we are so addicted to our phones is the overwhelming sensory experience they provide in our daily lives. How so, you ask? Facebook, Instagram, Twitter, YouTube, WhatsApp (need I go on?!!)
So in a nutshell, smartphone apps are an integral part of our daily lives. They can be used to create connections, obtain information or just have fun! And while creating a smartphone app is also fun, it requires a little more guidance, specifically in choosing the right programming language. That’s why this article deals with the top programming languages required for Android App Development UK and around the world.

What language to choose?

While Java is the official language for Android, there are many other languages that can be used for Android App Development. Details about these are provided below to help you make an informed decision.

Java

Java is the official language for Android App Development and consequently, it is the most used language as well. Many of the apps in the Play Store are built with Java and it is also the most supported language by Google. In addition to all this, Java has a great online community for support in case of any problems (And trust me, there will be problems!).
However, Java is a complicated language for a beginner to use as it contains complex topics like constructors, null pointer exceptions, concurrency, checked exceptions, etc. Also, The Android Software Development Kit(SDK) increases the complexity to a new level!
All in all, Java is a great language to experience the full joys of Android App Development. However, it may be a little complex with beginners who would prefer to start with something easier and then return to it.

Kotlin

Kotlin is a cross-platform programming language that may be used as an alternative to Java for Android App Development. It has also been introduced as a secondary “official” Java language in 2017. Kotlin can inter-operate with Java and it runs on the Java Virtual Machine.
The only sizable difference is that Kotlin removes the superfluous features of Java such as null pointer exceptions. It also removes the necessity of ending every line with a semicolon. In short, Kotlin is much simpler for beginners to try as compared to Java and it can also be used as an “entry point” for Android App Development.

C++

C++ can be used for Android App Development using the Android Native Development Kit(NDK). However, an app cannot be created totally using C++ and the NDK is used to implement parts of the app in C++ native code. This helps in using C++ code libraries for the app as required.
While C++ is useful for Android App Development in some cases, it is much more difficult to set up and is much less flexible. It may also lead to more bugs because of the increased complexity. So, it is better to use Java as compared to C++ as it does not provide enough gain to offset the efforts required.

C#

C# is quite similar to Java and so it is ideal for Android App Development. Like Java, C# also implements garbage collection so there are fewer chances of memory leaks. And C# also has a cleaner and simpler syntax than Java which makes coding with it comparatively easier.
Earlier, the biggest drawback of C# was that it could run only on Windows systems as it used the .NET Framework. However, this problem was handled by Xamarin.Android (formerly Mono for Android) which is a cross-platform implementation of the Common Language Infrastructure. Now, Xamarin.Android tools can be used to write native Android apps and share the code across multiple platforms.

Python

Python can be used for Android App Development even though Android doesn’t support native Python development. This can be done using various tools that convert the Python apps into Android Packages that can run on Android devices.
An example of this is Kivy that is an open source Python library used for developing mobile apps. It supports Android and also encourages rapid app development (which is a win-win situation according to me!). However, a downside to this is that there won’t be native benefits for Kivy as it isn’t natively supported.

Corona

Corona is a software development kit that can be used for developing Android apps using Lua. It has two operational modes, namely Corona Simulator and Corona Native. The Corona Simulator is used to build apps directly while the Corona Native is used to integrate the Lua code with an Android Studio project to build an app using native features.
While Lua is a little limited as compared to Java, it is also much simpler and has an easier learning curve. Moreover, there are build in monetization features as well as various assets and plugins that enrich the app development experience. Corona is mostly used to create graphics applications and games but is by no means limited to that.

HTML, CSS, JavaScript

Android apps can be created using HTML, CSS, and JavaScript using the Adobe PhoneGap framework that is powered by Apache Cordova. The PhoneGap framework basically allows the usage of web development skills to create hybrid apps that are shown through “WebView” but are packaged like an app.
While the Adobe PhoneGap framework is enough for basic tasks in the realm of Android App Development, it hardly requires much programming except for JavaScript. And since it needs a lot of work to even create a decent app, it is better to use the other languages in this list if you want to be called a true Android developer(Yes…That’s a thing!)

Conclusion

Now, its time to go forth and conquer Android!!!
There are a lot of apps such as Chat messengers. Music players, Games. Calculators. etc. that can be created using the above languages. And there is no language that can be called a “correct language” for Android App Development. So, it’s upon you to make the correct choice of language on the basis of your objectives and preferences for each individual project. And always remember, whatever your choice, it will only expand your skill set and lead to your growth as an Android developer.

Friday, March 27, 2020

OFFSHORE SOFTWARE DEVELOPMENT | EMERGING TRENDS


Due to the increased demand for software development, IT companies now prefer to give software development project to other Software Development Company UK and around the world and we call this phenomenon Offshore Software Development.

THE IDEA BEHIND OFFSHORE SOFTWARE DEVELOPMENT:

The offshore services first began in the late 90s and today thousands of companies prefer offshore software development services. The reason is that you can give your software development project to top reputed companies around the globe.
Yes, there is no need to put the extra money to train your in-house employees while you can give your whole project to an offshore software development company.
If you are familiar with the concept of outsourcing software development, then it will be easy for you to understand the idea behind offshore software development. The offshore software development is the outsourcing of software development services from a third-party entity which is situated in a remote location off the shores of the first party’s residence.

WHY YOU SHOULD CHOOSE OFFSHORE SOFTWARE DEVELOPMENT?

As we are living in a competitive age, companies who are not preferring outsourcing are at a great loss. The reason why you should choose offshore software development services is based on its following advantages:
Increased Focus: The offshore software development let you focus on the core values which means that it allows you to outsource the less important modules of your project to a third-party developer. By this, you can focus more on the core values and the functions of the software.
Fast Delivery Speed: When you give your software development project to an experienced IT company, it becomes the responsibility of the company to provide you the product within a given time. Outsourcing the services of software development companies ensures that your project will be completed on time without compromising its quality. This is because the professional IT companies have enough experience in the software development field which makes their developers consume less time on software development.

EASY SCALABILITY:

The outsourcing of software development allows you to scale up and down according to the client’s demand. If you are planning to develop your required software in-house, let me tell you that it will cost you time, energy, and money. You have to train your employees or spend extra money on the recruitment of developers which might not be ideal for a one-time project. With offshore software development, you can hire experienced developers suitable for your software development project.

COST REDUCTION:

With offshore software development, you do not need to spend money on tools, supplies, and other resources to develop software. You do not have to hire a whole team of developers for a one-time project. Offshore software development let you choose the best developers around the globe within a suitable cost.

SAVES TIME:

As mentioned above, for In-House Software Development you need resources which may cost you a lot. Hiring developers for a one-time project is also not a good option. Therefore, offshore software development is preferred by companies as it reduces the cost of software development projects.

NO TRAINING REQUIRED:

If you outsource software development services, there is no need to train your own employees for that. Your whole team can focus on the main goal of the business while the development company will take care of the development process.

REDUCED RISKS:

The thing which you should always keep in mind that you must choose the software development services that matches your project requirement. Choosing the right software developer for your project reduces the risk of errors in software development.
Due to all these benefits, organizations seek to get offshore software development services, especially in the field of IT.

EMERGING TRENDS OF OFFSHORE SOFTWARE DEVELOPMENT:

According to the report of Statista, the offshoring and outsourcing market in 2007 reached USD 88.9 billion globally. With this elevated business in the IT industry, the outsourcing of software development is expected to rise more in the future.
As more and more companies are getting benefits outsourcing services the following are some emerging offshore software development trends to look in the present year of 2019.
  • New Offshore Locations
  • Enhanced Data Security
  • Cloud-Computing Technology
  • Excessive Use of Collaborative Tools
  • Increasing Demand for Cutting-Edge Skills
  • Block Chain Technology
There are countless reasons why you should shift to outsourcing including low labor and operational costs. Due to the increased demand for outsourcing software development, here are the details of top emerging trends of offshoring software development in 2019 you should know.

NEW OFFSHORE LOCATIONS:

The trend of getting offshore software development services is spreading like a fire. According to market studies, around 80% of the world’s largest companies are getting offshore software development services. As the demand for outsourcing increases, more and more tasks will be done by preferring offshore services. Today, Latin America and Asia are known to be the best offshore service providers. Moreover, the Philippines is expected to turn into famous offshoring choice due to low labor cost. It is already popular for its BPO services.
The recruitment of offshore development teams helps foreign organizations to jump-start their business. The Asian countries such as India is a prime destination for recruiting offshore software development due to the price flexibility, exceptional quality of services, and technological availability. So, if you are seeking best and professional offshore software development services the Asian countries would be a better choice for you.

ENHANCED DATA SECURITY:

The main concern of a businessman is the security of the business data. When recruiting an offshore developer, people might think about whether their company’s data is secured or not. Well, it is not bad to worry about your data security. Many organizations believe that outsourcing is an open gate to security threats and data theft as data security is not guaranteed. Poor data security can lead to the loss of leakage of trade secrets. Obviously, data security cannot be compromised. Therefore, the World Wide Web has intensified the security risks for businesses either it is getting in-house or offshore services.
The security issues can be resolved by emphasizing the need for data integrity certifications. With the increased demand for offshore software development services, security solutions are evolving to address the client’s concerns.

CLOUD-COMPUTING TECHNOLOGY:

We all are familiar with the concept of Cloud Computing as there has been around two decades since it was introduced to the world. Anyhow, in recent years cloud-computing is much popular.
According to the study conducted by the International Data Group (IDG), 69% of businesses use cloud-computing technology. Moreover, 18% of businesses are planning to implement cloud-computing technology solutions to enhance service quality. It is observed that companies that invest in cloud-technology enjoy 53% faster revenue growth as compared with other competitors.
Cloud computing guarantees a dynamic and significant increase in the overall profit of your business. Moreover, it also ensures customer satisfaction. The incorporation of cloud computing makes business reliable with most services sustaining an uptime of 99.9% on average. Because of this, all the services of your business become available 24/7. Moreover, cloud-based applications can be launched anywhere in the world at any point at any time.
Another amazing feature of cloud technology is that it offers flexible facilities which can be molded according to the requirements of the user. This means that the capacity of cloud-based services can be twisted depending on the needs of the user, which leads to the reduction of costs for the business.
Another amazing advantage of cloud computing is that it includes automated updates, enhances collaboration and security. It is estimated that cloud computing will rule over the technology world in the coming years and will become one of the dominant trends in outsourcing services. This is the reason offshore service providers are focusing on increasing productivity using cloud technologies.

EXCESSIVE USE OF COLLABORATIVE TOOLS:

The purpose of introducing collaborative tools is to help multiple people to support each other for the accomplishment of a common objective. As offshoring services are common these days, collaborative tools are excessively being used by onshore and offshore teams. These tools act as a bridge between the in-house team and offshore team and create better understandings among them. By observing the needs of today’s working environment, app developers are focusing more on developing collaborating and communication tools.
The growing trend of the usage of collaborative tools ensures businessmen that they can easily get offshore services without any disturbance. The reason is that collaborative tools lower the risk of miscommunication, manages time, and reduce cost.
The following are some collaborative tools that will be used at a large scale to build a strong offshore team:
Trello: This is a collaborative project management and storage tool. It possesses an intuitive user interface which helps team members to collaborate team members with different tasks such as the organization of attachments, conversations, and to-do lists.
JIRA: It is a software solution for offshore software development teams. JIRA helps team members to customize and modify track bugs, scrum boards, etc. It also helps to check the status of the project.
Yammer: It is an enterprise social network. Yammer mimics the collaborative environment but it is not like Facebook and Twitter etc. Basically, Yammer is a platform where team members can upload files, micro-blogs, etc. It helps team members to follow-up on discussion with other team members. In general, Yammer connects offshore and onshore team members around the globe.

INCREASING DEMAND FOR CUTTING-EDGE SKILLS:

The fast evolution in technology from Artificial Intelligence. to Block Chain and Cryptocurrency creates the need for a business to resources with cutting-edge skills to stay competitive. The demand for skilled IT workers is increasing exponentially turning companies to get offshore software development services. However, while hiring the software developers the main thing which the company considers is the soft skills and hard skills including teamwork, communication skills, leadership skills, etc.
According to studies, every third organization is looking for offshore software development services in the area of Artificial Intelligence, Machine Learning, and Cybersecurity. The outsourcing services are accelerating to facilitate global technical transformation. Due to which developers must have cutting-edge soft and hard skills to meet the competitive criteria of this digital world.

BLOCK CHAIN TECHNOLOGY:

The blockchain technology hit the road of the digital world in 2017. This trend gained popularity in Healthcare Organizations, Telecommunications Industry, Media Houses, and many others. Almost every industry is looking forward to investing in blockchain technology to enhance its business models. Along with the financial industry, the IT industry is also taking advantages of this technology. The benefits of blockchain technology include reduced costs and complexity, increased flexibility, fast speed of digital transactions and reduces the probability of data duplication.
As there is an increased call of blockchain technology among many organizations, the developers with expertise in it are going to be in high demand too. With the increased demand for Blockchain Developers, outsourcing is done by the majority of companies to find the best developer around the globe.

THE STRATEGIES BEHIND OFFSHORING SERVICES:

There is a huge number of companies which are getting offshoring software development services. The executives are developing strategies to aid outsourcing. The following are some outsourcing strategies that help the businesses to achieve maximum return on investment.
  • Share the Big Picture
  • Create a Culture of Belonging
  • Respect Offshore Team Expertise
  • Communication
  • Establishment of Consistent Process
It is obvious that strategies drive the tasks. For a better understanding of offshore software development services, let’s have a look at the details of strategies behind these services.

SHARE THE BIG PICTURE:

Most of the businesses take offshore services as execution partners for temporary projects, systems or functions. This gives the offshore service providers a vague image about the goals and objectives of the client’s company. To avoid this, the company must clearly communicate about their vision with offshore service providers so that the Offshore Software Development Team feel invested in the process of developing a product. The benefit of this strategy is that this will make offshore team members focus on the client’s goals and objectives.

CREATE A CULTURE OF BELONGING:

The main problem in Offshore Software Development is miscommunication. The companies should create a culture of belonging between offshore and onshore team members so that they can work on the same goal. The client should promote a healthy engagement between onshore and offshore teams. This will result in a unified sense of belonging across time zones, borders, and hierarchies. The companies should make every team member, both onshore and offshore, feel included and appreciated so that all the team members work with their full concentration without any disruption.

RESPECT OFFSHORE TEAM EXPERTISE:

With the advancement of technology, there is a huge demand for skilled cutting-edge developers. This increased demand makes the Offshore Developers create new innovative ways to tackle a roadblock in the software development process. Some clients practice very active approach with their offshore resources which does not always give good results. Anyhow, it is significant that businesses use diverse skillset of their recruited team members. The professional approach of employees can help the business go the extra mile.

COMMUNICATION:

Whether working offshore or onshore, communication is the key to success. Many projects and companies go down just because of miscommunication. Working with an offshore team requires a lot of attention and communication because you have to deal with two different time zones. Your offshore team is a virtual team which requires effective communication. The best thing to deal with both onshore and offshore teams is to create a bridge between them. This can be done by creating an environment for communication where both onshore and offshore team members can collaborate effectively.
The collaborative tools have made communication between offshore and onshore team members too easy.  Both teams can simply schedule the meetings, make notes, and communicate with each other using these collaborative tools. The use of collaborative tools reduces the friction between two teams and aid in the planning and success of the project.

ESTABLISHMENT OF CONSISTENT PROCESS:

The most common problem faced by many companies with offshoring is the risk of inconsistent process deliverable's. The software development process is implemented differently by different developers. Although the main stages of the software development process such as requirement gathering, coding, testing, etc. remain the same. The software development process gets interrupted due to the lack of these standard practices. Both the offshore and onshore team members should have a clear vision when developing software so that any hurdle in the process can be detected at the beginning of the process. The client should provide clear requirements to the offshore developers so that the risk of inconsistency can be reduced.
Offshoring Software Development Services is quite a challenging task. Because your service providers are virtual, you cannot compromise the communication. Bridging the time zones and geographical locations is the key to outsourcing any service. Offshoring services are being taken by many countries including America and Europe. The companies around the globe want to recruit the best people for a job regardless of their geographical location.
Getting up to date with evolving technological trend and provide the best services is the goal of every company. Does your company follow these trends? Do you think your business needs offshoring software development services? Or if you already getting these services do you think there is another way to make it in a better way?

Wednesday, March 25, 2020

9 Must Decisions in Web Application Development


So you’ve decided to create a web application? Great, welcome to a world without any easy choices. There is a vast amount of different great technologies in every step you are going to make. And for every option, you will find a notable company like GoodCore Software UK that used it with great success.
The web development market is huge. It’s the biggest programming space by far, with never-ending technology options. Looking at the StackOverflow survey of 2019, 52% of all developers are full-stack developers, 50% are back-end developers and 32.8% are front-end developers.
StackOverflow Developer Type Survey
As you can probably guess, 134.8% of all developers is a pretty big market.
There are many popular technologies, databases, philosophies, design patterns and methodologies in the software world. They change drastically every few years, but somehow the old ones never seem to die. Cobol and ClearCase are great examples of something that shouldn’t still exist but clearly does.
We will talk about 9 technological choices you have to make when developing a proper web application. Some will not be relevant to your product, but most will be. A lot of these choices give way to an entirely new group of choices, but that’s just modern-day development.
I’m mostly a .NET developer, but I’ll try to stay objective and not to express too many personal opinions.
This article is talking about web applications, not websites. The distinction is a bit hard to put into words. Blogs and standard e-commerce sites are websites, whereas interactive websites like eBay and Facebook are web applications. Pretty much anything you can’t build (easily) with WordPress is a web application.

1. Client & Server Architectural Pattern

Since the internet came to life, we developed many different ways to build web applications. We had CGI, PHP, ASP, Silverlight, WebForms, and a bunch of others. In the last 10-15 years, we came to agree on 2 architectural patterns: model-view-controller(MVC) on the server-side or single-page-application (SPA) on the client side and Web API on the server side. Out of those two, the second approach (SPA + Web API) is getting the most traction in recent years.
The first decision in your web application is to choose an architectural approach.

Single Page Application (SPA) and Web API

Ever since AngularJS was released in 2010, SPA and Web API combination gradually became the most popular way to write modern web applications. And with some good reasons. With this pattern, the entire client side part of the application is loaded just once rather than loading each page from the server. The routing is done entirely on the client side. The server provides just the API for data.
There are many advantages to this approach:
  • Sine the entire client is loaded once in the browser, the page navigation is immediate and the web application experience becomes more like a desktop application experience.
  • Separation between client-side and server-side. There’s no longer necessity for full-stack developers (that know both server-side and client-side).
  • Testing both the client and server is easier because they are separate.
  • Your Web API server is reusable for any type of application – web, desktop, and mobile.
And some disadvantages:
  • Initial project setup is slower. Instead of creating one "new project" in your favorite MVC framework, you now have separate projects for the client-side and server-side. You’ll have to deal with more technologies overall.
  • Slower first-page load. In a SPA we are loading the entire client-side for the first page.
  • You’ll have to use bundlers like webpack for a decent develop experience. This adds some overhead like having to deal with bundler configuration. However, this is also an advantage because the bundler allows to easily add more tools to the build chain, like babel and a linter.

Model-View-Controller (MVC)

The server-side MVC pattern got popular in 2005 with the release of Ruby on Rails and Django frameworks.
In MVC, each route request goes to a Controller on the server. The Controller interacts with the Model (the data) and generates a View (the HTML/CSS/JavaScript client-side). This has several advantages. It creates a nice separation of concern between the client, server, and the different components. As a result, more developers can work on the same project without conflicts. It allows to reuse components. Since the Model is separate, you can replace it with a testable data set.
Some popular MVC frameworks are Ruby on Rails, ASP.NET MVC, Django, Laravel, and Spring MVC
You can somewhat combine between MVC and SPAs. One View can be a single page application on its own. This is best done with thin SPA frameworks like Vue.js.

Others

There are a couple of other ways you can go, which aren’t considered great options nowadays. They are old technologies, which were replaced for a reason. Some of those are:
  • Classic ASP
  • Classic PHP (without MVC)
  • WebForms
  • Static pages and Web API (this is still valid for static content, but not for a web application)

2. Server-side Web API (when choosing SPA & Web API)

If you chose to go with a single page application (SPA) framework, then the next step is to choose a server-side technology. The standard means of communications are HTTP requests, so the server will provide an HTTP API. This means the server-side and client-side are decoupled. You can also consider using a RESTful API pattern.
There’s an abundance in great server side technologies. This is both a blessing and a curse. There are so many good choices that it becomes difficult to choose. Here are some of the more popular technologies:
  • Node.js – JavaScript
  • ASP.NET Web API – C#
  • Java – Spring, Jersey, Apache CXF, Restlet
  • Python – Flask, Django REST framework
  • Go
  • Ruby – Sinatra, Ruby on Rails – Rails is mostly MVC, but Rails core 5 supports API-only applications.
All of these frameworks are free and most are open source.
This is not an exhaustive list, but those are the most popular technologies. Choosing a popular framework is important. It probably got popular for a reason. A popular framework will have better support, better documentation, and more documented issues. Perhaps most importantly, you’ll find more developers that are familiar with that framework.
Checking market popularity with Google Trends and surveys in this particular category was a bit difficult. Instead, we can see popularity by looking at Tags in StackOverflow. We can see overall usage according to the total number of questions asked. And we can see the trends according to the number of questions asked in the last month. This is not a perfect indicator of popularity, but I think it’s pretty good. Here are the results:
Backend frameworks trends
Node.js, for example, has 291K questions, 161K watchers and 5K questions asked this month
The big 4 winners are Node.js, ASP.NET, Spring, and Ruby on Rails. Flask, Django REST and GO are much less popular. However, this is not a fair comparison. Spring, ASP.NET, and Ruby on Rails are primarily MVC and not API-only, so they really have a much lower value. Go is a programming language, so it’s overvalued as well. On the other hand, Django-rest, and Flask are server-side API technology only, so their value is "real". Node.js is also not an MVC framework, rather a technology to run JavaScript natively. But, it’s mostly used for Web API with something like Express.js framework.
Keep in mind that even though Node.js is clearly the most popular, the other ones are still extremely popular technologies.
Java Jersey, Apache CXF and Ruby Sinatra usage was so much lower in comparison that I didn’t even include them in the chart. There are probably hundreds of other lesser known frameworks that don’t appear as well.
Besides popularity, here are some more considerations when choosing:
  • For web applications that provide big-data analysis, consider going with a Python backend.
  • Do you want to work with a strongly-typed programming language like C#, Java, and Go? Or weakly typed languages like JavaScript, Ruby, and Python? This is a big consideration. Make sure your development team is comfortable with the language.
  • With Node.js, you work in the same language in client-side and server-side. I claim that’s way too much JavaScript, but the world seems to think it’s a good idea.
  • Which development technologies are more popular in your area of the world? Prefer those.
  • If you love C#, but afraid to be stuck with a Microsoft proprietary tech that’s tightly coupled to Windows, then fear no more. The latest versions of ASP.NET (.NET Core) are open-source, work on Linux and have great performance on top.
  • If you have a team that’s already experienced with a framework or language, go with their known technology. This consideration trumps all others.

3. Server-side MVC (when choosing MVC)

Like with Web API, there’s a big selection of server-side technologies that use the MVC pattern. Up to a few years ago, the MVC pattern was by far the most popular way to build web applications. The most notable frameworks are:
  • C# – ASP.NET MVC
  • Java – Spring MVC, Apache Struts, Play Framework
  • Groovy – Grails Framework
  • Python – Django
  • Ruby – Ruby on Rails
  • PHP – Laravel
And here’s the popularity contest results according to Stack Overflow Tags:
Backend MVC frameworks trends
This is a normalized chart. ASP.NET MVC, for example, has 183K questions, 63K watchers and 856 questions asked this month.
These results were interesting and quite surprising for me. I expected Ruby on RailsSpring and ASP.NET MVC to be on top. Instead, I found that Django, Ruby on Rails and Laravel were the most popular frameworks. Ruby on Rails has the most questions in all times. Django and Laravel seem to be rising in popularity with the most questions asked in the last 30 days.
Besides popularity, the additional considerations when choosing a framework are similar to the ones for Web Api server side:
  • For web applications that provide big-data and statistics, consider going with Python Django.
  • The strongly typed vs weakly typed language is still a consideration.
  • If you have a team that already knows and loves a framework or a language, go with the already-known known technology.
On a personal note, I’m dumbfounded that PHP is gaining popularity.

Performance Benchmarks – for Both Web API and MVC

If you’re building a small business web application, performance might not matter as much. But for big applications that should serve many requests, response times are crucial. The most notable performance benchmarks comparison site is https://www.techempower.com/benchmarks/. Here, you can find a huge list of frameworks and various server configurations. Those are all benchmarked and compared into something like this:
server-side performance framework benchmarks
The candidates in the above test include a server with a web framework, a database, and an ORM. In the benchmark, the framework’s ORM is used to fetch all rows from a database table containing an unknown number of messages.
If we go by language, the fastest is Rust, followed by C, Go, Java, C++, PHP, C#, and Kotlin. If we go back to our "popular" frameworks and look for them, we’ll find this:
  1. ASP.NET Core Web API (42.8% of best result)
  2. Node.js variation (17.9% of best result)
  3. ASP.NET Core MVC (17.2%)
  4. Spring (4.4%)
  5. Laravel variation (2.9%)
  6. Django (1.9%)
  7. Ruby on Rails (1.3%)
By the way, the #1 performance winner Actix is a Rust language framework that I didn’t include due to its very low popularity.

4. Choosing a Single Page Application (SPA) Framework

If you chose to use a Web API and SPA (not MVC), then the next decision is to choose a SPA Framework.
Just a few years ago, a new JavaScript framework sprouted about once a week. Luckily, those days are behind us and the field stabilized a bit.
The most notable SPA frameworks of all times (well, since 2010) are:
  • React
  • AngularJS
  • Angular (2+)
  • Vue.js
  • Ember.js
  • Polymer
  • Aurelia
  • Backbone.js
Let’s do our usual trick with StackOverflow:
Single page applications comparison
So this chart shows a few conclusions at a glance:
  1. All past frameworks except for React, AngularJS, Angular, and Vue.js are dead. If you’ve been following web development news in the past few years, that should come as no surprise.
  2. AngularJS has the most questions but the least new questions. Even though there’s probably a huge amount of code written with AngularJS, it’s a legacy framework. It’s not recommended to choose it for new projects.
  3. React and Angular dominate the market with Vue.js a distant 3rd. React in particular has the most interest.
This means your best choice in 2020 is between React, Angular, and Vue.js. These frameworks have the best community support, the most documented issues, and the best component/library support. With React and Angular having the most support.
Here are a few more points to consider:
  • Angular was built as a sort of "enterprise" framework that considered everything and forces you into a particular mode of work. React and Vue.js are more separated into components and allow you to pick and choose development approaches.
  • React won the "Most loved web framework" title in StackOverflow survey of 2019, with Vue.js a close second.

5. Database

Every modern web application has some sort of database. Or several databases even. In the old days, there were just relational databases and the differences were in performance and features. Today, we’re in the age of "specialized databases". We need different databases for different purposes, which makes this decision pretty important. I’d say even more important than the previous decisions of server-side and client-side technology because those offer pretty much the same thing in different flavors.
It’s important to understand your business needs when choosing a database. If your product needs high-performance Search capabilities, consider using Elastic Search. If you have a high-load of similar requests, whose response doesn’t change very frequently, consider using Redis for its caching. If you just want to store a bunch of JSON documents without much fuss, then go with a document-store database like MongoDB.
Databases can be divided into several types:
  • Relational Databases – A classic table database that works with SQL queries like Microsoft SQL Server.
NoSql databases:
  • Document-store databases like MongoDB
  • Key-Value stores like DynamoDB and Redis
  • Wide column store like Cassandra
  • Graph-based database like Neo4j.
Before choosing a specific database, it’s best to decide on the type of the database you need.
Like with other technologies, choosing a popular database is very important. You’ll have more forums, bigger community and more developers familiar with the technology. Besides, they probably got popular for a reason. According to Stack Overflow 2019 survey, the most popular databases are:
popular databases 2019
MySQL is by far the most popular database. Note that the all 4 first spots are filled with relational databases. This might serve as some kind of indication that relational databases are the best choice in most applications.
Here are a few points to consider when choosing:
  • Some of the commercial databases like Oracle and SQL Server can be quite pricey. Consider using one of the many open-source databases if the cost is an issue and you have a lot of data.
  • Relational database stood the test of time. They are fast, reliable and have a ton of tools that work with them. You’ll also find more developers familiar with the technology.
  • If you’re using a certain cloud provider, see which databases they support as cloud-as-a-service. This can reduce some initial development time when starting out. You might not actually need your cloud provider because there are services that provide independent database-as-a-service services like MongoDB Atlas.
  • For small web applications, the considerations are different than for large enterprise applications. You’ll need databases with the ability to scale, possibly to multiple machines (sharding).
  • For distributed databases, consider the CAP theorem. It states that a database can provide only as much 2 out of 3 guarantees between Consistency, Availability, and Partition tolerance. Consider which two guarantees are most important to your needs and which database provides those two.
  • For big applications or apps with high-frequency requests, you’ll need to consider performance. One of the best places to find performance comparisons is DB-ENGINES. Here are the latest scores while writing this:
Database choice is obviously a huge topic and an important one. Unlike other decisions, I suggest giving this one more weight and do additional research.

6. Deployment

In 2020, we have a big variety of Cloud Offerings. I believe that deployment in the cloud is the best fit in almost all cases. With a few exceptions. So before comparing cloud service providers, let’s talk about why you would deploy to the cloud and what alternatives you have.
There are actually 3 options available:
  1. Cloud deployment – Instead of bothering with setting up your servers in the basement, you can rent compute power and storage from a company like AWS or Azure. In fact, ever since AWS was launched in 2006, the software world is changing in this direction. There are many advantages to this:
    • With the Cloud, you can use dynamic scaling to cut costs. In low-pressure times, reduce the number of servers and in high-pressure times increase them. Since you pay-per-minute or per-hour, you can dramatically decrease costs.
    • The initial setup and deployment are much easier. In some cases, like with Azure App Service, deploying to a server for the first time is literally a few clicks.
    • You need to employ much fewer sys-admins (but a few DevOps engineers).
    • You no longer need to buy server machines, store them in the basement and upkeep them. It’s all in the cloud man.
  2. On-premise deployment – On-premise servers is the way organizations worked up to 2006. You had a server room and an army of sys-admins to keep them running. In 2020, we still have a lot of on-premise deployments. These companies either started on-premise and just didn’t move to the cloud or they have some good reasons to stay on-premise. You should consider staying on-premise if:
    • You have some security or legal issues to place your server in the cloud. Maybe it’s software in the military and government sectors.
    • You’ve invested so much effort in your on-premise server farm that it no longer makes sense moving to the cloud. It can happen if you’re a big enough company and you’ve made your on-premise solution automated enough to justify the upkeep.
    • You’re big enough that it makes financial sense not to pay to the middle man. One example is Dropbox who aren’t in the cloud. They did the math and it makes sense for them to be on-premise.
  3. Hybrid cloud solution – The big cloud providers allow you to install a fully operational cloud server on-premise. That is, you’ll have an AWS or Azure portal installed in your own data center. Pretty crazy concept and not for everyone, especially due to the cost. Both Azure Stack and AWS Outposts require you to buy new customized hardware. Google recently released Anthos, which doesn’t require customized hardware.

Comparing Cloud Service Providers

Cloud services are divided into 3 categories: Infrastructure as a Service (IaaS), Platform as a Service (PaaS), and Software as a Service (SaaS). To deploy our web application, we’re interested in IaaS. The three dominant IaaS cloud providers are: Amazon’s AWS, Microsoft Azure, and Google Cloud Platform. Besides, it’s worth mentioning IBM Cloud, DigitalOcean, Oracle Cloud Infrastructure Compute, Red Hat Cloud, and Alibaba Cloud.
Besides AWS, Azure, and GCP, the only real competitor in terms capabilities is Alibaba. Unfortunately for them, major western enterprises are not so willing to work with a Chinese company.
The 3 big cloud providers have somewhat similar offerings. They all offer services like Scalable Virtual Machines, Load balancers, Kubernetes orchestrators, serverless offerings, storage as a service, database as a service, private networks & isolation, big data services, machine learning services, and many more.
Competition is fierce. Prices are somewhat similar and when one of the providers comes up with a new popular product, the other providers will adjust and offer similar products.

7. Authentication & Authorization
In practically all web applications we have a Sign-in mechanism. When signed in, you are identified in the web application and can: Leave comments, buy products, change personal settings and use whatever functionality the application offers. The ability of your application to verify that you are who you say you are is called Authentication. Whereas Authorization means permissions mechanism for different users.
There are a couple of ways you can go with authentication and authorization:
  1. The manual solution – Most web frameworks have support for authentication and authorization (usually with JWT tokens). If not, there’s always a free 3rd party library available. This means you can manually implement basic auth mechanisms.
  2. External Identity Server – There are several open-source and commercial identity providers that implement the OpenID Connect standard. This means that client-server communication will involve a dedicated identity server. The advantages are that these servers have already implemented a bunch of auth features for you. These might include:
    • Single sign-on and sign-out with different application types
    • Built-in support for external identity providers (Google, Facebook,…)
    • Role-based permissions (authorization)
    • Multi-factor authentication
    • Compliant with standards like ISO, SOC2, HIPAA,…
    • Built-in analytics and logs
Your cloud provider probably has an identity server, like AWS Cognito or Azure Active Directory B2C.
Notable open-source solutions are: IdentityServer, MITREid Connect, Ipsilon.
Notable commercial solutions: Auth0, Okta, OneLogin
Make sure to do some price calculations before committing to a commercial solution like Auth0. They tend to get kind of pricey and using an open-source implementation is also a good option.

8. Logging

Server-side logging is pretty important for any type of software, and web applications are not an exception. Whether to implement logging or not is not really a decision – implement logging. The decision is where to send these logs and hot to consume them.
Here are some logging targets to consider:
  • A database. Logging to a database has many advantages
    • You can retrieve the logs from anywhere, without access to the production machine.
    • It’s easy to aggregate logs when you have multiple servers.
    • There’s no chance the logs will be deleted from a local machine.
    • You can easily search and extract statistics from the logs. This is especially useful if you’re using Structured Logging.
    There’s a myriad of choices for a database to store your logs. We can categorize them as follows:
    • Relational Databases are always an option. They’re easy to set up, can be queried with SQL and most engineers are already familiar with them.
    • NoSQL Databases like CouchDB. These are perfect for structured logs that are stored in JSON format.
    • Time-series Databases like InfluxDB are optimized to store time-based events. This means your logging performance will be better and your logs will take less storage space. This is a good choice for intense high-load logging.
    • Searchable Solutions like Logstash + Elastic Search + Kibana (The "Elastic Stack") provide a full service for your logs. They will store, index, add search capabilities and even visualize your logs data. They work best with structured logging.
  • Error/Performance monitoring tools can also act as logging targets. This is very beneficial since they can display errors alongside log messages that were in the same Http request context. A few choices are elmah.io, AWS Cloudwatch and Azure Application Insights.
  • Logging to File is still a good logging target. It doesn’t have to be exclusive, you can log both to file and a database for example.
Once you have logging in place, I suggest doing a test run on retrieving them or searching them. It’s going to be a shame to wait until you have a bug in production only to find out that you have some kind of problem in your logging.

9. Payment Processor

In many web applications, you are going to be charging your customers. That is, receive credit card, PayPal or Bitcoin for services (well, not Bitcoin). Even though theoretically, you can implement payment processing yourself, it’s not recommended. You’ll have to deal with PCI compliance, security issues, different laws in different countries (like GDPR), frauds, refunds, invoices, exchange rates, and a million other things.
There are several big commercial players in this field like PayPal, Stripe, 2checkout, and BlueSnap. Those have a rich API and you can integrate the payment in your own site.
Here are some things to consider when choosing a payment processing company:
  • Security and PCI Compliance – Make sure your chosen payment processor has PCI compliance. Any company that handles credit card has to uphold this standard. All the major companies will be PCI compliant.
  • Fees – The standard fees in the industry are 2.9% of the transaction + 30 cents. Maybe some companies offer a cheaper rate.
  • Exchange Rates – If you have international customers, they will pay in their own currency. Check which exchange rates the payment processor charges.
  • Ease of API – One of the most important considerations is the ease of API. Be sure you will have a lot of interaction with the payment processor. You’ll want hooks on transaction events, modification of invoices, adding discounts or more fees, refunds, and so on. Stripe, in particular, is known for it’s excellent API.
  • Popularity – Big companies will have more forums and internet discussions. With PayPal or Stripe, that’s not going to be a problem. With big companies, you’ll also find more developers familiar with the framework.
  • Data portability – If you ever wanted to change payment processors, the current processor needs to allow that option. PayPal, for example, just won’t give you your customer’s credit card data. Whereas Stripe allows to export card data.

Summary

As you can see, web application development in 2020 is not getting any closer to a consensus. If anything, we have more technologies to choose from and as much controversy as ever. I guess this is good news for us developers since we can afford to have specialties and get paid extra for our respective narrow fields.
In almost all decisions, all the choices are pretty good. That means you won’t make a terrible mistake by choosing the one over the other. On the other hand, by choosing one you’re usually stuck with them. Suppose you chose to go with AWS and then decided to move to Azure. That’s not going to be that easy.
There were a lot more "Must" decisions I wanted to include like Error Monitoring, Application Performance Management tools, ORMs, Mobile support + PWAs, and Localization. Then, there are a bunch of client-side decisions like free or paid UI Controls, bundlers, linters, and so on. This article got a little bigger than I planned, so I’ll leave those to another post.
Thanks for reading, Cheers.