Techlife

What Is Software Architecture?

April 08, 2020

The concept of software architecture is still vague for most of us. So, this blog post brought to you by people from Designveloper will help you to know how it works and how necessary it is built.

In recent years, the world has increased its dependence on software for most of its activities. However, to fulfill the demands of individuals or organizations, software needs to provide the required qualities, functions and even be developed at an affordable cost.

Normally, those characteristics are more obviously affected by software architecture. It plays an important role in building the desired software. Without it, a whole process of writing software can be slowed, or even ruined. Keep reading and find out more about it!

1. Definition of Software Architecture

People in the software industry have different definitions of architecture. Yet some of which do not suffice to define it completely and exactly. According to Roy Fielding, the creator of the REST architectural style and also co-author of the HTTP spec, software architecture is:

… an abstraction of the run-time elements of a software system during some phase of its operation.

software architecture
Different software architecture styles (Source: Weave.works)

Also, the architecture in the software itself is not only a fundamental structure to describe how systems work, but also more than that. As fully defined by IEEE 1471-2000, software architecture is “the fundamental organization of a system, embodied in its components, their relationships to each other and the environment, and the principles governing its design and evolution.” This definition reveals what software architecture truly includes. 

Architecting a system is the first step of any software’s lifecycle. It lays a solid foundation for software systems to be built on, by converting a series of attributes (e.g. performance, manageability and security) to a successful application that meets technical or business expectations.

2. Benefits of Software Architecture

To many stakeholders, software architecture seems tricky for them to perceive. Yet if no or poor architecture is built, many resulting problems will be caused, because:

It provides a solid foundation for a whole software project.  

A poor architecture produces more crufts which hinder developers from completely understanding systems and even stakeholders’ needs. So architecting software can help impose an overall vision for developers to better perceive the system, then know exactly how scalable the platform should be, and which quality attributes and functions users want in IT structure. Therefore, it can improve performance, enable risk management and cost mitigation, and avoid code deception. 

A good architecture free of cruft (Source: Martin Flower)

It gives a basis to reuse elements and decisions.

Many stakeholders often give the same requests for the desired software. Instead of building a completely new application, the reuse of elements and decisions can save design time and cost, and reduce the risk of failures and defects.

It helps communicate well with stakeholders to better meet their demands.

Sometimes, expectations of stakeholders can go beyond the capability of software systems. The architecting ensures that software will be clearly understood and well discussed by all parties before reaching a consensus. Accordingly, it helps stakeholders to know what they get after the software is implemented. So, to avoid unexpected products, software architecture will be used. 

Improve communication with stakeholders (Source: Bits and Pieces)

It makes code maintenance and improvement be better. 

Completing software is not the final step of its lifecycle. There is more than that: maintenance and improvement. Good architecture enables developers to find bugs and anomalies more easily or promotes faster changes in IT systems. Thereby, it can fulfill the higher demands of users over time and avoid being out-up-date.

3. Characteristics of Software Architecture

To identify the properties of architecture, we need to answer two following questions:

a. What is Software Architecture made of?

Normally, software architecture includes such basic elements as components, connectors and data (Roy Fielding, 2000). Of which:

  • Data are which contains information used and transformed.
  • Components (or known as processing elements) perform those transformations of data through interfaces.
  • Connectors (or known as connecting elements) allow communication between components by delivering data from one interface to another. 
software architecture
Software architecture configuration (Source: Research Gate)

Also, we should consider its configurations. Particularly, configurations are “the structure of architectural relationships among components, connectors, and data during a period of system run-time” (Roy Fielding 2000). However, a configuration can be thought of as a series of certain constraints for component relationships.

b. Which considerations are taken when architecting software?

Some factors affecting software architecture include:

  • Stakeholders: The software is designed to serve stakeholders who have different requirements. Balancing those concerns is of the top priority of software architecture.
  • Separation of concerns: this concept shows the necessity to separate concerns of all stakeholders by seeing architecture from different points of view.
  • Quality attributes: different software will require a distinct set of properties (e.g. reliability, fault-tolerance, scalability or security). Depending on demands, its quality attributes can vary.
Quality attributes of architecture (Source: Loginext)
  • Architectural style: architects will use different architectural styles to address recurring problems.
  • Conceptual integrity: this term is coined to show an overall vision of what software should do and how to do it. It helps all members understand the system and make it user-friendly.
  • Cognitive constraints: are imposed to limit which software can do, and the lack of those constraints may ruin the architecture.

4. Common software architecture patterns

Software solutions have become more complex owing to higher expectations of users. This complicates not only software development but also its maintenance and improvement activities afterward. Therefore, software architecture patterns appear to alleviate those problems. 

Particularly, software architecture pattern is defined as a general, reusable solution to address existing and common problems and choose desirable qualities in software architecture. As described by Mark Richards, an experienced software architect, there are five ubiquitous patterns:

Layered (n-tier) architecture

It may be the most popular approach. Many of the largest software frameworks (e.g. Drupal, Java EE or Express) were developed on this pattern, so various applications built on them were also developed in the layered structure. 

software architecture
Layered architecture pattern (Source: Oreilly)

It mostly includes four fundamental layers: presentation, business, persistence and database. One of its benefits is the separation of concerns. Accordingly, requests will move from the top layer down to the bottom. For instance, data often originate from the presentation layer, after the layer is closed, such data will go through the business layer, then the persistence layer and finally the database layer.

Event-driven architecture

This structure aims at managing all activities (e.g. production, detection, consumption and reaction) related to events. It works by using a central unit to get all data and then assign them to different modules. For example, we can see “car for sale” advertisement as a message presented by the retailer; after being transmitted on media channels, this ad can reach to potential customers. This advertisement can stimulate the “purchase” of those buyers. The change from “for sale” to “purchase” is seen as an event.

Event-driven architecture mediator topology (Source: Oreilly)

Microkernel architecture

This structure is often applied to execute product-based applications. It allows developers to download application packages, add extra essential features that fit their requests. Those additional features can be seen as plug-ins to the core set of application operations, allow extensibility and feature isolation.

software architecture
Microkernel architecture pattern (Source: Oreilly)

Microservices architecture

Just imagine: You are a headmaster of a school. A decade ago, your school just had around some hundreds of students, which but then has increased to hundreds of thousands. It was much easy to manage a small number of students and staff but is now more challenging to handle a larger one. Then you decide you divide your school into smaller single-function areas for better management and quality of education. This is also how Microservices architecture works.

Microservices architecture style (Source: Microsoft Azure)

It includes many small, independent services; each of which is self-contained and executes a separate business task.

Space-based architecture

After receiving requests from users, the database will process them. Yet if the load rapidly increases, the database server can hardly keep up with such load, and finally a whole website collapse. To avoid this problem, the space-based architecture is applied. Accordingly, it includes two key components as a processing unit and virtualized middleware. 

software architecture
Space-based architecture pattern (Source: Oreilly)

In short, despite the first stage of software’s lifecycle, software architecture significantly affects all activities, from deployment, development to maintenance.

Also published on

Share post on

Get in touch

Simply register below to receive our weekly newsletters with the newest blog posts