Guide for Beginner Software Architects: Discover the Characteristics of Architecture

Have you ever wondered how complex software applications and systems are built in a way that ensures their reliability, scalability, and ease of expansion? A particular secret lies at the heart of these achievements - software architecture. This article will explore the fascinating world of architectural characteristics and learn about the key aspects forming every successful project's foundation.

From a business perspective, functional requirements define the software to be developed but do functional requirements alone suffice to create software? Well, no, because non-functional requirements also describe systems. This is a well-known term, but reading it can trigger negative emotions (how can something be NON-functional?).

This is where architecture characteristics come in, i.e., non-functional requirements that sound better! So, in addition to system requirements, the architect, during system design, must consider other aspects and factors that affect the software, such as:

  • Availability - how long the system is to be available (e.g., 24/7) and how it should behave in case of a failure.

  • Performance - how fast the system should operate.

  • Scalability - how it should scale in case the number of users increases.

  • Extensibility - how important it is to extend the system with new features.

  • Configurability - how important it is for users to be able to configure the system.

  • Upgradeability - how easy it will be to upgrade to a new version.

  • Authentication - how the system recognizes users.

  • Legal - everything related to the law.

  • Security - requirements regarding security.

Note: each system may have different characteristics, as described below.


Definition of architecture characteristics

Architecture characteristics must meet three criteria.

  1. Describes a software feature not directly related to requirements. Functional requirements describe what the system should do, while architecture characteristics describe how it should do it.

  2. Affects the construction aspects of the project. Suppose security is one of the characteristics that describe the system. In that case, it will affect the system design because providing adequate security during the design phase will be necessary.

  3. It is critical to the success of the project. During the design stage, the architect must usually discover the characteristics that describe the system and negotiate them with the client. Each characteristic increases the system’s complexity, and some characteristics are mutually exclusive. For example, achieving good usability won’t be easy if you focus on performance.


Architecture Characteristics in Practice

Software architects use characteristics of architecture in practice in various ways. At the beginning of a project, architects must understand the business and functional requirements of the system and then determine which characteristics are necessary to meet those requirements. For example, if an application needs to operate 24/7, then the availability characteristic should be key.

After selecting the characteristics, architects must integrate them into the system project. A good approach is to use design patterns that help to apply the characteristics consistently and understandably for the entire team. For example, the Model-View-Controller (MVC) design pattern separates business logic from presentation logic, facilitating system scaling and increasing flexibility.

During system design, architects must constantly monitor and test whether architecture characteristics are met. For example, if performance is a key characteristic of the system, then architects must regularly monitor the system’s performance and implement fixes if necessary.

Finally, architects need to remember that architectural characteristics are flexible and may change during the project. For example, if business requirements change, architects may need to adjust the characteristics to meet new requirements. Therefore, architectural characteristics must be treated as a dynamic element of the project, not as a rigid list of requirements.


Tools, Methods, and Techniques Used for Discovering Architecture Characteristics

Software architects often use various tools, methods, and techniques when designing systems considering architecture characteristics. Here are a few examples:

  • Conceptual modeling - a method based on diagrams that helps understand the system’s business requirements and determine which architecture characteristics are needed.

  • Architecture modeling - a method based on diagrams that helps understand the structure of the system and the relationships between its elements. Often used for designing systems with consideration for architecture characteristics.

  • Design patterns - proven solutions for frequently occurring design problems that help apply architecture characteristics consistently and understandably for the entire team.

  • Performance testing evaluates system performance in terms of specific characteristics, such as response time, throughput, resource usage, etc.

  • Code review - the process of reviewing the system’s source code, which helps identify potential issues related to architecture characteristics, such as security, performance, etc.

  • Risk analysis assesses the risks associated with architecture characteristics and their impact on the system project. It helps identify potential threats and take preventive actions.

In addition to these specific tools, methods, and techniques, software architects often also use other sources of knowledge, such as books, industry articles, conferences, and training. It is important for you as an architect to expand your knowledge and skills in designing systems with consideration for architecture characteristics to create increasingly better and more innovative solutions.


Impact of Architecture Characteristics on System Design

Architecture characteristics have an impact on various aspects of system design. Some of these aspects are presented below:

Technology selection

Architecture characteristics influence the selection of technologies that will be used to build the system. For example, if performance is a key system characteristic, architects may choose technologies known for their speed or that provide performance optimization tools.

Functional requirements

Architecture characteristics also influence the functional requirements of the system. For example, if performance is a key system characteristic, functional requirements such as response time or throughput must include performance-related requirements.

Project costs

Architecture characteristics have an impact on project costs. For example, if security is a key characteristic of the system, architects must invest in tools and technologies that allow for an appropriate level of security. This may increase project costs but can also help avoid costly external attacks.

System maintenance

Architecture characteristics also have an impact on system maintenance. For example, if ease of expansion is a key characteristic of the system, architects must design the system in a way that is easy to modify and expand in the future. This can help maintain the system long-term and avoid costly modernizations.


Summary

Architecture characteristics define the system’s workings “under the hood” and impact the entire solution, providing a framework for the system. They describe how the system should operate, while functional requirements describe what it should do.

Architecture characteristics are non-functional requirements that describe software features not directly related to functional requirements. They affect the design aspects of the project and are crucial to the project’s success. The most important architecture characteristics are availability, performance, scalability, extensibility, configurability, authentication, and security.

Software architects use different tools, methods, and techniques to design systems with architecture characteristics in mind. Architecture characteristics affect technology choices, functional requirements, project costs, and system maintenance. Architecture characteristics must be treated as a dynamic project element rather than a rigid list of requirements.

Sources

  • Fundamentals of Software Architecture: An Engineering Approach. A Comprehensive Guide to Patterns, Characteristics, and Best Practices – Neal Ford (Autor), Mark Richards (Autor

  • Software Architecture in Practice - Len Bass, Paul Clements, Rick Kazman

👉 Do you want to receive more tips and advice on designing systems and software architecture? Sign up for our newsletter and stay up to date!

Subscribe my blog