Today it is difficult to establish precisely when the first computer was manufactured or when the concept of “software development” was first utilized. Undoubtedly, some of the initial and most significant advances in this context existed within the presentation of Alan Turing’s Machine that was developed about 90 years ago. Additionally, the appearance of the first programming languages, such as Fortran and Simula, first appeared about 70 years ago, and SQL arrived more than 40 years ago. Although application development has decades of history, programming was initially considered an art and was developed as that viewpoint due to its difficulty. Over time, general guidelines have been defined and established to solve problems. So-called “software architectures”, like the plans of a building, indicate the structure, operation, and interaction between the parts of the software.
Currently, there is a multitude of software architectures available. The most popular are those based on “modular decomposition,” those of the “client-server” types, or those of “three layers.” The choice between one or the other will depend on the type of AI application to be developed and its functional and non-functional requirements. Also, it makes it impossible to establish a single, unequivocal and general criterion.
However, some standards can help us choose a particular type of architecture. These standards include ISO/IEC 9001: 2000 and ISO/IEC 12207: 1995, which seek to establish a process-based approach to improve the effectiveness of a quality management system and define the software life cycle processes. Another option is more modern and specific architectures such as ISO/IEC 9126: 2001, which are based on McCall’s model used to establish a guide about the elements that must be considered when evaluating a software product. Based on this, adapting the vision into the field of architectures, and although there is no generalized and accepted consensus as such, it could be considered that an architecture will be suitable for the implementation of a software solution based on its ability to facilitate the following characteristics:
- Functionality: related to the ability of the software to perform the functions for which it is built. To measure its degree of achievement, factors such as the product’s suitability to meet the expected user objectives, precision while generating results, security to protect data and sensitive information, and interoperability to allow interaction with other systems must be evaluated.
- Reliability: the ability of the system to stay up and running. To achieve this, it is crucial to consider and evaluate certain aspects. These aspects include maturity or fault tolerance, in terms of the ability of the software product and its architecture to reduce the number of failures in the event of unforeseen events or to allow the continuation of the service, under a determined level of benefits, in critical situations. These systems are labeled as resilient or fault-tolerant. Additionally, consideration should be given to the system’s ability to recover and restore data and service to the highest level of performance after an unavoidable failure.
- Efficiency: capacity in which the product makes optimal use of system resources considering its time of use and the amount available. In addition, consideration must be given to the software product’s ability to provide appropriate response times, process times, and power under specified conditions, both anticipated and unforeseen.
- Maintainability: the ease with which a modification to the product or architecture can be made. Also, consider the architecture’s ability to facilitate performance, regression, accessibility, and source code inspection testing. These characteristics allow the software product to be scalable, making it possible to make constant improvements without causing problems due to the need to modify or incorporate new components.
- Scalability: the ability of a system to remain reliable in the face of increases in load or demand. This increased demand could be motivated by a greater need for computing or storage capacity. When evaluating the response capacity and performance of a software architecture, it is necessary to measure the number of requests handled per second, the response time to a request, processing time, etc., at different levels of load increases. In order to solve these problems, it is essential to assess the convenience or not of using a flexible architecture, capable of adding or reducing resources when the need varies, considering the complexity and security compared to what could be achieved with manual administration. Likewise, the choice between a persistence system that uses a single machine or a distributed system using multiple nodes must consider whether needs such as high availability or the cost of vertical scaling justify the increased complexity involved in managing it.
- Integrability: the capacity of the product or software architecture to allow its connection and coexistence with other systems. Depending on current or future needs, the architecture may need to be integrated with other systems or specific run-on platforms. Similarly, the architecture should incorporate new components. Therefore, the mechanisms and facilities offered by the software architecture for its deployment on different platforms, the coexistence with other architectures and features, and its interchangeability, that is, its ability to be used instead of another software product for the same, should be valued. Purpose and in the same environment.
These can be deduced by choice of the type of architecture that can be complex and particular for each AI solution. However, a detailed analysis, considering at least the factors described above, is essential to guarantee the quality of the service, its security, and its ability to adapt to new needs. The way of developing software has changed dramatically in recent years thanks to the existence of regulations, the definition of standards, and the popularization of metrics for their control. It’s vital to take advantage of its fullest potential.