Any company, whether they like it or not, have to face the challenges of software architecture when they set out to develop and maintain web and mobile applications of their own. It’s vital that they do not neglect it as it will come back to haunt them during the lifecycle of the application. In order to create a safe, easy-to-maintain and high-performance application in 2021, you need to learn more about software architecture and choose the best solution for your software needs.
This article is meant to serve as an introduction to the topic of software architecture in 2021 for CTOs and other decision-makers (e.g. CEOs, CIOs, Lead Developers, senior developers, business department stakeholders) in companies that have to do with modern software (which increasingly refers to… just about anyone).
Below, you will also find an exhaustive list of articles we wrote concerning the topic of software architecture. It’s a good way for your and your developers to brush up on some of the latest trends on topics such as serverless, cloud computing, AWS, microservices and more. Use the “Contents” menu to go straight to the “All Software Architecture Articles” section.
What is software architecture? The definition of software architecture in 2021
The current way of thinking about software architecture, that is how to structure a software system, has been influenced by a series of new trends in architectural style brought by the last decade.
The biggest drawback of physical servers was always scalability. We had very limited resources and so we had to do the most we could with them. That’s why the most popular architectural style back then was monolith – because we could put everything into a single server.
The big change started with Docker getting more and more traction. We started to split our apps into smaller pieces and think about scaling them separately. And so the software system known as cloud started to evolve.
In 2006 AWS had only EC2 – instances that still required a lot of manual work. Then with the rise of Docker, it started to bring new services such as ECS or EKS, that were built for containerized apps, making it easier to bring microservices into the cloud. With that, we could really build all kinds of non-monolithic distributed software architectures and scale their various components independently.
Software architecture patterns
There are two most common approaches when it comes to high-level software architecture and then a few common architectures for implementing services.
Monolith software architecture
The first and most common high-level architecture of a system is the monolith. I think it is safe to say everyone has dealt with architectural styles that fall under the concept of a monolith. The main idea is that we have a single application that does everything. It sounds simple, but at the same time, it’s probably the most universally hated architecture because of how easy it is to break it. When we talk about monolith we should also mention the modular monolithic architecture, which is a holy grail of a monolith, the best practice to build such systems.
Distributed software architecture
The second one of the architectural styles is the opposite of monolith-distributed architecture. This time, we are going to split our app into smaller pieces, making it possible to scale independently not only the app itself but also your software engineering team (each team could be responsible for specific services). There are many flavours of this service-oriented approach – microservices, nano services, event-driven architecture etc.
Yet all of those revolve around the same idea of being able to decouple the system, so it is easier to maintain and develop.
At the same time, it has a huge impact on the deployment process and infrastructure management – that’s why we have SRE/DevOps engineers.
I also mentioned services implementations architectures. Those are usually case-specific, however a few worth mentioning are probably CQRS (Command Query Responsibility Segregation), Event Sourcing and Hexagonal Architecture.
Programming languages & software architecture
At this point, any modern language is suitable for any kind of software architecture. Of course, some architectures are more common on specific platforms. For example, nano services (AWS Lambda) are more likely to be coded in Node.js than PHP. It doesn’t mean that PHP is not suitable for such architecture. However, there are more resources available about building Serverless Functions with Go, Node.js, .NET than with PHP.
There is no such thing as “the best ”software architecture for a specific technology since…
…the principal reason behind any software architecture is to solve a specific business problem
Therefore, the process of choosing an architecture should be driven by more than technology.
However, some of the patterns are more likely to be used with specific technologies. If you plan to go serverless (cloud vendor does not matter), there is quite a low chance to see PHP there. For example, It is possible to write lambdas in PHP, but is it really the best choice?
It is safe to assume that the best architecture for most of the projects is either a modular monolith (if you aim for an easier deployment process or you have no clear boundaries in your business domain) or microservices (in some form). Both can be implemented with any modern technology.
If you want to learn more about what kind of technologies we like using, check out TSH’s Technology Radar.
Benefits of choosing the right software architecture – why is it vital to get it right?
Software Architecture is a solution for your business problem. If you want to scale your team fast in order to deliver more features in the upcoming year, your architecture needs to accommodate that. It needs to be designed with team scaling in mind.
That’s why it is important to start the architecture design with defined drivers – the key points that your architecture should follow or solve. Based on those we can then make decisions regarding patterns, technologies, frameworks, cloud providers etc.
If we neglect this in the early stage, we will end up with software architecture that in the worst-case scenario could seriously slow down our business.
Best practices for software architecture
There are a couple of best practices to follow that will greatly improve the chance of getting it right with software architecture.
- Understand the current situation of your business.
- Have a clear vision of what you want to achieve and what the key drivers for that change are (e.g. faster development, easier deployment, faster new markets releases ).
- Gather all constraints you need to follow (e.g. there is a need to use specific technologies, specific cloud providers or perhaps the data needs to be stored in secure storage in your country because of legal issues?).
- Prepare key metrics, important for your business (e.g. handling 100k concurrent users, response time needs to be lower than 200ms).
- Transfer your architecture vision into diagrams and let developers follow them.
Now, let’s check out some practical case studies!
Software architecture case study
Do you want to learn more about how we solve software architecture challenges in practice? There are a couple of case studies in our portfolio that will let you do just that. Let’s take a closer look at a few examples
Backend solution for Arantio
We used the Backend For Frontend design pattern to create a solution that made it possible for Arantio to unite all its applications under one backend solution.
High-level fintech framework
We considered many aspects such as performance, user interface, security or data management when creating software architecture for a framework for the development of fintech applications. Here is the whole process.
As part of our development work for this United Kingdom-based company, we have designed a software architecture with Node to reduce the cost of hosting hundreds of WordPress pages with graduation clips of students.
Software architecture trends
One of the most important trends lately that have to do with software architecture is data-driven software. More and more companies are trying to do that and the systems we built need to solve the many challenges it brings.
That’s the reason why Data Lakes (large repositories of raw unstructured data) are getting more and more popular. So definitely this is one of the hottest topics lately. Read our article which contains a detailed case study of an app that uses Data Lake and a full explanation of this approach.
Interested in microservices trends in particular? Learn more about the current trends in microservices-based architecture by checking out our State of Microservices 2020 report.
What’s in store for the future of software architecture?
It is hard to predict the future of software architecture since it does not change as fast as other branches of IT. For the most part, we’re still using patterns and approaches that were commonly used 20 years ago. The only difference is the technology we use to implement these architectures.
With that in mind, I think in the next few years more and more companies are going to migrate to a serverless architecture. The importance of data will be even greater, with data lakes being the core of business and decision making and not only a way to fill out the dashboards.
All software architecture articles!
Check out all of the software architecture-related articles, which TSH experts have prepared for you. They are full of practical insights that can help you get the most out of your choices in software architecture.
- 5 use cases of message brokers
Message Broker makes it much easier for services and applications to communicate, improving the performance and resource management of your system in the process. But how to implement them? When is it a good idea to go for them? Let’s find out!
- How does serverless help with scalability?
The serverless framework made it much easier to use cloud computing, handling 100% of server management for the user. Your team can focus on the business logic instead. But is serverless-powered cloud computing a cure-all?
- How to speed up your Docker image build?
Docker has become a standard technology for both the development and deployment of modern web applications. But you still need to give a solid try to reap all the benefits. By reducing build time, you can achieve faster deployments, CI and more.
- Measure and optimize your app’s performance with Prometheus
Prometheus is an essential tool if you want to collect data about the performance of your web application. It helps with monitoring the data you collect but it does require some initial setup and integration with your app. An essential read for your DevOps.
- Deploying Node app to AWS with Beanstalk
AWS is the most popular cloud provider, but deploying a full dockerized app on AWS can sometimes be a painful process. Using Amazon Elastic Compute Cloud (Amazon EC2) or Elastic Container Service is quite difficult. Elastic Beanstalk (EB) is a good, yet often forgotten alternative.
- What are the advantages and disadvantages of cloud computing?
We’ve been swarmed by tons of voices and articles advocating for a cloud-first approach to web development. In this article, we dispel some myths about the cloud, clarify what it means in modern development and provide some insight on when (and to what extent) it is a good idea to go for it.
- Using AWS Lambda with serverless – practical examples
This article contains the most important information and Q&A session from the webinar on AWS Lambda – Amazon’s serverless computing platform. It offers practical insights and use cases on using serverless with AWS Lambda.
- Testing microservices – overview, strategies and tools
Microservices-based architecture offers a lot of benefits in terms of performance and scalability. But a failure to maintain control over the project can lead to all kinds of problems. In our State of Microservices 2020 report, we dedicated a lot of time to testing microservices. This is the gist of it.
- 6 key findings from the State of Microservices 2020 report
The testing is just a part of the State of Microservices 2020 report! In this article, we’re providing the essential insights from the report, including the languages most commonly used with microservices, the emergence of micro frontends, the popularity of Continuous Integration and more.
- How to migrate an app from a monolith to microservices?
Many companies make the decision to move from a monolithic architecture to microservices. Once you make sure that it is the way to go, you still need to go through the process as painlessly as possible. Our developers did it many times and in this article, they walk you through the process based on one of their real-life projects.
- Migrating to microservices – part 2
In the second part of the guide on migrating your app from a monolith to microservices, our devs talk about issues such as data flow, system architecture, service extraction, proxy microservices and more.
- What is serverless computing? Answers from a Q&A session
The idea of running your app without having to worry about services is what gave the name serverless. We’ve made a webinar for those new to the idea of serverless. This article has a QA session from this webinar as well as links to the whole recorded webinar presentation.
- How to find microservices experts?
It’s one thing to decide to go for microservices-based architecture. It’s another to find skilled and experienced specialists that will make it possible. This time, we’re sharing tips on how to find, verify and keep microservices experts.
- Developing a serverless application with Node
With serverless, we can deploy code without having to manage the server infrastructure, which has many benefits for both development and business. In this article, we’re creating a serverless app in Node and taking a closer look at the advantages and disadvantages of serverless in the process.
- How did we move a Node app to serverless?
Want some more Node.js and serverless combo? Let’s migrate an app to serverless! This time, we’re analyzing our own translation management system called Babelsheet.
- Design patterns for microservices
In the Design Patterns for Microservices webinar, we analyzed the most popular design patterns such as the Direct type, API Gateway or Backend for Frontend. We pointed out their strengths and weaknesses and the best ways to use them in order to create powerful scalable software architecture.
- Q&A from the Design Patterns for Microservices webinar
This Q&A has some additional information on design patterns in microservices that as well as an URL to the whole recorded webinar. Topics covered in the Q&A include log management, container orchestration, Domain-Driven Design and many others.
- Pros and cons of microservices – is it really for you?
Yet another practical thorough overview of the biggest advantages and disadvantages of using microservices. You can find out if the kind of applications that work best with microservices-based architecture is similar to what you’re going for.
- Integration tests in a microservices-based architecture
Testing and maintenance are among the most neglected aspects of microservices development, as evidenced by our State of Microservices 2020 report. This article makes it quite clear and goes on to explain how you can leverage integration tests in this environment.
- Node.js and serverless for beginners
Various cloud computing service models, different serverless providers, the case for using Node.js with serverless and a simple practical overview of the concept of serverless itself – all of that and more in this simple yet thorough serverless in Node.js for beginners guide.