Software architecture explained: Key concepts for developers

software architecture
Can anyone explain what software architecture is? Whether you are an experienced programmer or just starting your adventure with application development, this article is for you. I will show you the concepts that form the foundation of every successful software project. Thanks to this, you will gain the confidence and knowledge necessary for designing and creating applications that will work according to expectations and meet the requirements of both users and businesses.

Robert C. Martin mentions in his book “Clean Architecture” about such division that architecture is a high-level matter, and the project is about details and lower-level matters. An architect does the architecture, and programmers do the project. Going further, one can risk saying that an architect is a nobleman above programmers.

Reality is more moderate. Architecture and projects are the same. An architect is also a programmer, often the best, who leads the team in the intended direction. The architect still writes code, certainly less than before, but must continue to do so to stay in the game and be able to talk technically with programmers.

Every system consists of high-level decisions and low-level details. This is inseparable. It is very important that the system is created in cooperation between architects and programmers, not in isolation.

Think of designing a house where the architect designs almost every element from the shape, appearance, and layout of rooms to where the sockets should be located. These are high-level decisions.

When the architect is no longer there at the construction stage of such a house, the investor can decide exactly what these sockets should be or what color the walls are. These are low-level details.

So what is this architecture then?

Let’s analyze another well-known division. The division of the system into values:

  • how the system should work, what it should do (behavior)
  • how easily this system can be changed (architecture)

From the above division, it can be inferred that architecture describes how easily a given system can be changed. This boils down to architecture defining the cost of change, the cost of the entire system, and the amount of work needed to implement it.

Therefore, architecture describes a system aimed at minimizing the work required to implement and maintain the system.

software architecture

Architecture Goal

The goal of the architecture is to preserve open possibilities for as long as possible. Architecture focuses on high-level decisions, not frameworks, databases, communication protocols, and tools. The architecture aims to establish rules allowing for the implementation of business requirements. Architecture focuses on rules, not details. The objective of good architecture is to facilitate:

  • implementation of use cases
  • system deployment
  • system maintenance and upkeep
  • further development of the system
  • easy change of previously made decisions

Components of architecture

Architecture can be divided into several components:

  • Architecture characteristics (also known as quality attributes) are the criteria for the system’s success, e.g., scalability, observability, performance, and availability.
  • Architectural decisions – decisions that determine how the system should operate.
  • Design principles – differ from architectural decisions in that they are guidelines for how something should be implemented. They are not hard rules like architectural decisions.

Summary

If you were to remember one sentence from this text, remember this:

Architecture is a description of a system, and architecture aims to minimize the effort needed to deploy and maintain that system. Good architecture makes working on software easier and keeps options open for as long as possible.

If you want to delve deeper into the issues described in this article, please read the books linked to the sources below. Buying through these links will also support my blog/newsletter.

Sources

  • Clean Architecture: A Craftsman’s Guide to Software Structure and Design – Robert C. Martin
  • Fundamentals of Software Architecture: An Engineering Approach. A Comprehensive Guide to Patterns, Characteristics, and Best Practices – Neal Ford , Mark Richards
Share the Post:

You might also like

A career in technology: How to develop your skills

Are you a programmer and would like to grow? The Internet is full of materials on how to do this. Despite this, don’t run away – I have something that will interest you. Did you know that Adam Malysz, the legendary Polish ski jumper, was a roofer before he became a flying champion? I dare not compare myself with Mr. Adam, while there are two things we have in common.

I was also a roofer and also managed to re-brand myself. Maybe not in such a spectacular way, but still. In this article, I’ll share my personal experience on my journey from roofer to programmer to tech lead and give you tips you can apply to grow and advance and maybe even dramatically change your career.

Read More
AHA! Let's bring back the simplicity of the Frontend

AHA! Let’s bring back the simplicity of Frontend

Have you wondered why, in this day and age, when we have access to the latest technologies and solutions, IT projects still fail? Don’t you think that we complicate our lives and work in many cases instead of simplifying it? Sometimes less is more, especially in the world of frontend! Read on to learn what an AHA stack is and how to do frontend more simply.

Read More