What Is Software Architecture?
We have Architecture all wrong.
The article today is the first in a series on Architecture. Architecture as it applies to software systems—Software Architecture.
So, what is Software Architecture?
I like the first two sentences from the Wikipedia entry on Software Architecture:
“Software architecture refers to the fundamental structures of a software system and the discipline of creating such structures and systems. Each structure comprises software elements, relations among them, and properties of both elements and relations.”
That is an interesting term—”fundamental structures“. Software Architecture is about the basic, fundamental structure of our software systems.
What does that mean?
Let’s start by looking at examples of what is not Software Architecture. Some of the concepts we frequently think of as examples of or related to Software Architecture have little to do with it:
Microservices Architecture: It’s got the word ‘Architecture’ in it. It must be architecture. No, it’s not architecture at all. It’s a Deployment Model. When we need high throughput and scalability, i.e. many millions of requests per day, we may deploy our system in the form of Microservices.
Monolith: Another Deployment Model that has fallen out of favour (unreasonably so, IMHO) is the ‘Monolith’—an executable file and possibly a collection of extension libraries. Once again, this is not a software architecture.
Lambda: Deploying as a lambda, or other Serverless option, is another Deployment Model, not an Architecture.
The Database: Frequently, the database is understood to be the central aspect of a software system so as to be synonymous with the system’s architecture. That is not the case. A database, or another data store, is a Persistence Mechanism, a tool to store data while our software system is not executing.
The Web: Surely, ‘The Web’ must be an Architecture—it’s central to so many of our systems. Sorry, but ‘The Web’ is not an Architecture—it’s a Delivery Mechanism.
What about Azure, AWS or Google Cloud? Also, not architecture. These things are Cloud Infrastructure Platforms.
OK, so then, what is Software Architecture?
Software Architecture is all about how the software, i.e. the code, is structured—how we design our functions, classes, and deployable components. How these parts are composed internally and how we build them to interact with one another.
A software system that has lost all discernable system structure—its architecture—will be challenging to work with and modify. On the other hand, a system that has retained a clear, easy-to-understand and easy-to-change architecture will be easy to maintain.
Maintaining Software Architecture is up to us, the software engineers and programmers. Architecture is not the exclusive domain of ‘The Architect’. It’s primarily software developers who make daily decisions that help—or harm—Software Architecture.
We’ll continue our journey into Software Architecture tomorrow.