When it comes to the discipline of architecture in software development, we come across several types of architecture. Each one, with its characteristics and specificities. In this article we will address three types of architecture, they are: Software Architecture, Solution Architecture and Corporate Architecture. Despite being different architectures and having specific functions, at some point during development they end up interfacing with each other. Software Architecture This architecture is the closest to the code and the developer. It focuses on the internal organization of a system and addresses the division of the system into components, such as: classes, modules or services. It also defines what the interaction between them will be, being responsible for aspects such as modularity, scalability, security and code reuse. Some of the definitions of this architecture: • Which programming language will be adopted; For example: Java or .NET C#. • Which frameworks and libraries to use in the solution; For example, if you choose the Java programming language, use the Spring Boot Framework to facilitate and speed up the development of web applications and microservices. • How to access the data layer, and how persistence will occur, whether through an Object-Relational Mapping framework or manually. If you choose an ORM, define which tool will be used; For example: Hibernate or EclipseLink. • Which architectural model will be used in the implementation and the appropriate architectural patterns that meet the system requirements. For example: MVC, Layered Architecture, Client-Server, Hexagonal or Service Oriented. • What is the form of communication between the system components; For example: HTTP, REST or Asynchronous Messaging. • How scalability will take place and how the system will scale to handle increases in load and demand; For example: Load Balancing, Horizontal/Vertical Scaling or Data Striping. Which to follow?
These topics listed some examples of architectural decisions that can be made during the process of defining a software architecture. There is no right or wrong answer to these definitions. Only the one that best fits to meet a need within a business context. These decisions are very important and must be made with great care and caution, as changing them later will affect the entire structure of the system, causing unwanted costs and delays in the project. Therefore, it is recommended to carry out Proofs of Concepts (POCs) so that the decisions made are as assertive as possible and guarantee a robust, scalable and high-quality system. It is important that the software architect has good technical knowledge and, based on his experiences, makes the best decision so that development is fluid and rhythmic. Furthermore, the architect must be prepared to act in times of crisis. Often, it may be required to identify specific and highly complex problems, such as debugging a library or framework to make an important decision and correct a problem in production, making the operation work normally again. Solution Architecture Solution Architecture is at a higher layer in relation to Software Architecture, and is responsible for transforming the business requirement into engineering components that will work together to solve the problem and meet the business needs. It covers the definition of the systems involved, the integration between them, the communication interfaces and the strategies to ensure that the solution as a whole works effectively and achieves its objectives. This type of architecture is ideal for identifying areas within an organization where there can be cost reduction, improving performance and automating processes to become more efficient, optimized and standardized. The main difference between Software Architecture and Solution Architecture is that the first only deals with engineering-related issues, while the second is responsible for ensuring that a software product solves a specific business problem within a company's strategy.
Atividades que estão associadas a esta disciplina:
• Compreender e analisar os requisitos do negócio e do sistema para identificar as necessidades e os objetivos da solução; Por exemplo: Entrevistas/workshops, estudos de viabilidade e criação de diagramas de contexto.
• Criar e liderar os processos de integração entre sistemas para atender os requisitos de negócio; Por exemplo: Definição de interfaces, serviços web (API's REST) e Middleware de integração (Kafka).
• Identificar e definir as medidas de segurança necessárias para proteger a solução contra ameaças; Por exemplo: Autenticação, Autorização, Criptografia e proteção de dados sensíveis.
• Colaborar com stakeholders (desenvolvedores, analistas de negócios e gerentes de projeto), para garantir a compreensão e a adoção da arquitetura de soluções; Por exemplo: Comunicação clara das decisões arquiteturais, realização de revisões técnicas e a obtenção de feedback dos envolvidos.
• Identificar os riscos associados à solução e desenvolver estratégia para mitigá-los; Por exemplo: Análise de riscos técnicos, operacionais e segurança.
• Considerar os requisitos de desempenho, como tempo de resposta e capacidade de processamento, e também a capacidade de escalar a aplicação para lidar com picos de aumento de carga; Por exemplo: Uso de caches, escalonamento horizontal, arquitetura de microsserviços ou serviços de mensageria.
Vínculo forte
Podemos concluir que a arquitetura de soluções está na divisão entre o técnico e o negócio, e que há um vínculo forte entre essas duas vertentes, considerando a importância de que a solução técnica está sendo definida para resolver um problema de negócio. As habilidades de comunicação na arquitetura de soluções são imprescindíveis, pois há frequentemente um contato direto com a área de negócio, que normalmente tem o conhecimento técnico muito pequeno ou inexistente, com isso, cabe ao papel do arquiteto de soluções ser capaz de explicar e traduzir de forma simples toda a solução técnica que será construída, de uma forma abstrata o suficiente para que todos entendam. Algo importante a se considerar é o conhecimento necessário para representar a arquitetura através de diagramas, como por exemplo o C4, e que ele possa representar de forma clara os componentes do software, a interface com outros sistemas, o fluxo de dados e demais informações que forem pertinentes tanto para a engenharia quanto para o negócio.
Arquitetura Corporativa
Define-se arquitetura corporativa como uma série de conhecimentos técnicos e habilidades de gestão que integram a tecnologia aos objetivos do negócio, é uma visão mais ampla que abrange a arquitetura de todo o ambiente de tecnologia da informação da organização. Determina os princípios, políticas e os padrões de governança que orientam a estruturação dos sistemas de software e infraestrutura de uma empresa, se concentrando em como os diferentes sistemas e soluções se encaixam dentro do contexto organizacional, garantindo a consistência, a integração e a eficiência dos recursos de TI.A arquitetura corporativa também considera fatores estratégicos e de negócios, alinhando a tecnologia da informação com os objetivos e necessidades da organização. It may include the definition of business process models, management of the systems portfolio, IT governance and the definition of information security policies. Decisions made within this type of architecture: • Standardization of programming language and frameworks used in solutions within the company, defining which technologies will be able to be used; For example: Using the Java stack with Spring Boot Framework in API solutions. • Standardization of databases; For example: SQLServer and Oracle. • Change control processes for auditing publications in a production environment; For example: Access control and permissions, review and approval of changes.
• Define and document an architectural model that the organization will work with; For example: Create a diagram that illustrates the main layers of the architecture, covering the presentation, business and data layers. • Evaluate the implementation of new technologies; For example: Carrying out Proofs of Concept (POC's) and market research. • Implement corporate DevOps solutions; For example: Compilation and packaging automation using Jenkins as a CI/CD mat. Importance of corporate architecture Having a corporate architecture is very important, as it defines standards that the entire company must adopt and follow, and helps to align the organization's strategic objectives with its operational activities, helping to identify redundancies, inefficiencies and optimization opportunities, allowing the simplification, consolidation and rationalization of resources resulting in greater operational efficiency and cost reduction. Corporate architecture assists in managing the life cycle of IT systems, from strategic planning, establishing quality, governance and compliance standards for the development, implementation, operation and maintenance of systems, ensuring effective and sustainable management of IT assets. Conclusion In this article, we covered the three main types of architecture that exist in software development, the details of each type and how they relate to each other. This division is important so that each architecture focuses on a specific area so that the three together can cover the entire software development cycle. As we have seen, software architecture is closer to the code and the developer, solution architecture is more focused on the business that the solution intends to solve and corporate architecture is used to define the technological standards that the organization must adopt for the implemented software solutions. The application of these types of architecture varies according to the size of the organization, the larger, the more separated and specific the types of architecture, and the smaller, the less separation between the types of architecture, and often merging into just one type. It is important to highlight that, for each type of architecture, the architect can play a different role, and each one has their own specific skills for each area, but communication skills, critical sense, proactivity and resilience are common to all types of architecture.