How to approach software architecture in software development?

How to approach software architecture in software development?

Any company, whether they like it or not, has 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, 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?for CTOs and other decision-makers?(e.g. CEOs, CIOs, Lead Developers, senior developers, and 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

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 the cloud started to evolve.?The approach to software design and system design changed significantly as a result.

In 2006 AWS had only EC2 – instances that still required a lot of manual software 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-oriented architecture 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 in software development

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 architectural style 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 flavors 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 for building Serverless Functions with Go, Node.js, Python, and .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 software development 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 market 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 trends

One of the most important trends lately that have to do with architecture software 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 this?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?this article 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.

Reference

要查看或添加评论,请登录

社区洞察

其他会员也浏览了