Software Architecture and Design

It’s the decisions you wish you could get right early in a project

D. Husni Fahri Rizal
The Legend
7 min readAug 16, 2020

--

Software architecture consists of word software and architecture. First, we must understand the definition of these two words, software, and architecture. So, we will have a better understanding of the definition of software architecture.

A computer program or software is a collection of computer instruction or compilation of information that tells the computer how to work and execute errands or activities. The program is the inverse of computer hardware, which portrays a physical view of a computer. A computer program can be translated as nonexclusive terms utilized to allude to an application, script, and program that run on a gadget or machine.

In computer science or software engineering, computer software is all information processed by computer systems, programs, and data. Computer software includes computer programs, libraries, patches, and related non-executable data, such as online documentation or digital media. Computer hardware and software need each other, and they cannot be used separately.

Architecture is a process, product of planning, or designing from the construction of structures. Of course, the architecture will relate to processing software development in the computer world, not to create buildings.

Discussion regarding the definition of software architecture and design has been discussed and debated for a long time by experts who work on software development (solution architect). Some experts say or define software architecture as the most fundamental or fundamental part of the software organization being developed. Some experts define software architecture as a way of how high-level components interact with each other.

Figure 1.1. Sample software architecture with high-level component interaction. Delivery service, orders service, and others are high-level components.

In the explanation above, we underline the word's fundamental and high-level components. Why do we emphasize this? It turns out that until now, there is no most objective way to determine how fundamental and how high the level of the component is. Each software architecture can be defined with different levels of high-level components. A better understanding of architecture is a shared understanding of software developers or solution architects who are experts in designing software in the real world.

Some experts explain software architecture in terms of its function. In terms of its function, software architecture is interpreted as a design decision that we must create before the project started. This is done with the aim that before making the software, we already have a strong and solid foundation for making the software that we will be working on it.

The definition above is one of my favorite explanations about software architecture as defined by Ralph Johnson, who is the author of a book called Design Patterns: Elements of Reusable Object-Oriented Software:

“Software Architecture is the decision you wish you could get right early in a project.”

Software Architecture is also known as a blueprint for a system. It provides an abstraction for managing system complexity, establishing communication and coordination mechanisms between components. Thus, the team will receive clear and correct guidance during the application development process according to the objectives to be achieved.

The following are matters related to the function of software architecture as a blueprint that we must understand.

  • The blueprint will define a structured solution so that it can meet all technical and operational requirements. Besides, the blueprint must be able to optimize general attributes such as performance and security.
  • This blueprint will involve a series of critical decisions about the organization regarding the software development process, and each of these decisions can have a significant impact on the quality, maintenance, performance, and overall success of the final product.

The choice of architecture will determine how we handle the performance, fault tolerance, scalability, and reliability of the software we build.

Figure 1.2. Software architecture as Blueprint

From Figure 1.1 and Figure 1.2, we also can see that the level of high-level components is different. Software architecture in the second illustration is more detailed than the first one. So each software architecture will have its own level of depth that is different from other software architectures.

Have you ever wondered how systems or software at large companies were designed? Generally, in large companies such as Google or Facebook, before the leading module development begins, a software design and software architecture has been decided to be used. This architectural and design of software will offer the attributes of practicality and quality desired. Therefore, we must always understand various architectures before selecting and implementing them in our applications. So, if we are solution architects, we must have an in-depth knowledge of different architectural software types. A better understanding of these will provide us with a fixed decision when designing a system or software.

From all the explanations above, we can conclude that architectural software has essential things that a solution architect must think almost. Thus, the solution architect must determine which parts of our software system are crucial that will have a severe impact on our application in the future. From these essential things that we start to move and explain how these critical things will provide solutions.

Practical Relevance for Business Team and Users

Now we are clear about what software architecture is and know the risks if we do not have it or having it but not good. I think we all agree that software architecture is important. Its existence will determine the success of the application that we will make. But what’s the benefit for you as a software user or paying customer?

From the user point of view, most users don’t care whether the architectural software exists or not. What users tend and worry about is the software’s functionality, performance, and reliability. All three of that have a significant impact on the user experience and can quickly lead to frustration if one is terrible. Good architecture helps ensure that solutions are reliable, work well, and meet all functional requirements.

Meanwhile, from the business side or those who buy our application, it can be explained as follows. When companies decide to buy, build, or license software solutions, they also pay attention to its functionality, performance, and reliability. However, there was much more that they wanted. They also usually consider the new solution should meet:

  • New software must compatible and interoperable with existing IT systems.
  • Data security and protection.
  • Easy to maintain and suitable for changes in the future.
  • The price and cost of the new solution must match the available funds.

The above points are very important to pay attention to, especially when it comes to business-critical solutions. They can jeopardize the whole business, and mistakes can make them bankrupt.

Software Design Pattern

Software design is different from software architecture. Sometimes most software developers are confused and often consider them the same. Software design is responsible for the code-level design, what each model is doing, the class scope, the functions, purposes, structure and class relation, etc. When used strategically, they can make the programming process more efficient, giving the teams a method that others have already defined, so they don’t have to keep reinventing the wheel.

When communicating or discussing code with others or managing and reviewing code, software design can provide a useful common language to conceptualize repeated problems and solutions.

Many designs are commonly used in the real programming world, and we call them software design patterns. Design patterns are used to represent some of the best practices adopted by the experienced object-oriented software developers. A design pattern systematically named, motivates, and explains the general design that addresses a recurring design problem in object-oriented systems. It describes the problem, the solution, when to implement the solution, and the consequences. It also provides guidance and examples of implementation.

Based on the famous design pattern book, Design Patterns — Elements of Reusable Object-Oriented Software, the patterns can be grouped into three categories: creational patterns, structural and behavioral.

Why Software Architecture and Design is Important

In the above explanations, we have mentioned some of the importance of this software architecture and design. In this section, we will try to explain this matter deeper and wider.

The software has two categories of requirements. First, there is a need for a function that defines what the software should do. We usually refer to it as functional requirements and document it as FSD (functional specification document).

The second is the quality that must be provided by the software. We call this the quality of service requirement or quality of attributes. For example, these attributes are scalability, availability, reliability, performance, and security. Some attributes are defined as qualities during the development process, such as maintainability, testability, and deployability.

The decision to choose the architectural software that we choose and the design software we use will significantly impact the quality of the attributes we mentioned earlier.

IT Training

Mau improve skill IT dan pemrograman Anda, Silahkan cek jadwal training berikut.

The Legend Training

Kaos Pemrograman

Membutuhkan kaos dengan tema pemrograman :

Kafka T-shirt

Elastic T-shirt

Dapat menghubungi The Legend

--

--

D. Husni Fahri Rizal
The Legend

Engineering Leader | Start-Up Advisor | Agile Coach | Microservices Expert | Professional Trainer | Investor Pemula