Is Software Architecture important?
By: Diego Hernández Delgado
Tags: Software Architecture, Software, Software Development, Software Architect, Develop

We may assume coding is the most important thing when we want to create software, but –sometimes– we forget about the structure behind or before the code that support the communication and the software itself.

When we talk about Software Architecture, we’re using a clear analogue to the architecture of a building. It functions as a design of the structure with the necessary elements, protocols, relationships, units and so on… in order to work.

Software architecture is about making fundamental structural choices that are costly to change once implemented. It’s the process of defining the system structure in order to achieve the technical and operational requirements.

Without Software Architecture, Software Developing would be a mess!!

So… if Software Architecture is one of the most important things in Software Developing… how do we design it? Which are the better architectures? Should we follow some patterns?

And here is where architectural style/patterns take place, because they’re specific methods of construction, characterized by the features that make it notable and we can you use as templates.

There are many recognized architectural patterns and styles, such as: Blackboard, Client-Server, Component-Based, Data-Centric, Event-Driven, Layered, Microservices, Monolithic, Model-view-controller, MVC, Peer-to-peer, Pipes and filters, Plug-ins, Reactive architectures, Representational state transfer (REST), Rule based, Service-oriented, Shared nothing, Space-based, etc.

Some treat architectural patterns and styles as the same, other as specializations; some of them are completely different, others are similar; some of them are used alone most of the times, other are a complement to the main software.

However, I gonna share with you 5 descriptions and examples of the most common Software Architecture Patterns:

1.- Layered Software Architecture

Maybe the most used and classical pattern. The idea is to split up your code into layers, where each layer has a certain responsibility and provides a service to a higher layer. There isn’t a predefined number of layers, but these are the more commons:

Presentation layer: Frontend/UI/UX

Business layer: business logic, rules, actions (Backend)

Persistence or data access layer: CRUD DB

Database layer: definition, creation, migration of DB

Layered Software Architecture Diagram, Google Images.

A clear example are the CRM Systems where the user watch the tables and charts (Presentation Layer); when they click any button, the business logical code take action to either make a change in the Presentation layer or ask something to the Persistence layer such as buy something; finally the Database layer make the changes in the DB tables.

2.- Event Driven Software Architecture

Event Driven Software Architecture Diagram, Google Images.

The idea is to think everything and I mean “everything” as “a significant change in state”. For example, when you receive an email, the notifications section changes. The email is marked as not opened state, but when you open it, the state change to opened state, and if you mark it as spam, the state change to spam. So every time the state of the email change, this change travels through an “Event channel” (like FTP protocol) and queue into the “Event queue” waiting to the “Event Mediator” to choose the most important changes in the queue and to send the changes to the appropriated “Event Processor” through another “Event Channel”. This is a great option for scalability.

3.- Microkernel Software Architecture

The idea is to organize your code and application as a core that functions perfect itself and has the ability to connect to other (plug-in) components in order to make it more powerful. This architecture is sometimes referred to as the plug-in architecture pattern.

Microkernel Software Architecture Diagram, Google Images.

Great examples are Wordpress, Sharepoint and Shopify. Let’s thing about Wordpress: the core system is installed in a cPanel on your Hosting provider or your own Server, and then you add plug-ins like Stripe or Google Adds, etc.

4.- Microservices Software Architecture

The idea is to do a specific task for other systems. It has its own internal components and architecture but it’s super specialized. That’s why we usually referred to it as API (Application Program Interface) Software Architecture, and –most of the times– we use it through the internet with HTTP protocol, so REST API applications are the best examples for this pattern.

Microservices Software Architecture Diagram, Google Images.

Think about the Yahoo Finance API: you make a request about some information of some companies, the microservice does whatever it has to do and gives you back an answer (in JSON or XML format if it’s an REST API) that you could use in your own application.

5.- Space Based Software Architecture

It’s a distributed-computing architecture for achieving linear scalability. Applications are built out of a set of self-sufficient units, known as processing -units. These units are independent of each other, so that the application can scale adding more units and managing them with the middleware controller.

Space Based Software Architecture Diagram, Google Images.

The way to use this architecture is by choosing different services/products and specifications of the Cloud Providers such as AWS, Azure and GPC.

Remember that the different Software Architecture Patterns could be combined to make the perfect application, but it’s important to design it before the implementation.

I hope the answer to the title question could be answered now by yourself!