⚙️ Arquitetura de Software: O início
Tags: architecture, softwareengineering, beginners, braziliandevs
Published: 2023-07-31 11:26:59


Olá meus queridos(as) devs!

Sejam bem-vindos ao primeiro artigo de uma série de outros que vou estar começando a publicar, neles vou estar abrangendo diversos assuntos de arquitetura, desde os fundamentos, até os modelos, padrões e etc!

Mas esse aqui será o ponto de partida, nele quero falar alguns tópicos.

Você rapidamente irá aprender:
* Quais são os tipos de arquitetos?;
* O que é a arquitetura de software?;
* Qual é o papel de um arquiteto de software?;

Vamos começar 🔥

---

### Quais são os tipos de arquitetos?

Por incrível que pareça, dentro do mundo de TI, temos vários tipos de arquitetos, alguns próximos dos negócios, enquanto outros mais próximos do código.

Quero abordar os principais:

Quero abordar dos principais:
* **Arquiteto Corporativo**
* **Arquiteto De Soluções**
* **Arquiteto de Software**
* **Arquiteto Tecnológico**

**Arquiteto Corporativo**

Esse arquiteto tem como foco a área de organização e governança da empresa que desenvolverá determinado software. Seus principais papéis são:

* Compreender o mercado e as inovações;
* Organizar as tecnologias que a empresa utilizará na criação do software;
* Definir a cultura que os times de desenvolvimento irão adotar;
* Entender os custos e valores relacionados às equipes e tecnologias;
* Possuir conhecimento técnico, embora seu trabalho esteja mais voltado para o negócio.

**Arquiteto de Soluções**

O arquiteto de soluções atua como intermediário entre os setores de negócio e software, desempenhando as seguintes funções:

* Transformar os requisitos de negócio em uma solução de software;
* Compreender as tecnologias já utilizadas pela empresa e determinar a necessidade de adoção de novas tecnologias para a criação do software;
* Implementar tecnologias de acordo com o problema apresentado;
* Ter visão do negócio e considerar suas particularidades;
* Expressar a solução arquitetural por meio de desenhos e diagramas.

**Arquiteto de Software**

O arquiteto de software trabalha mais diretamente com as equipes de desenvolvimento e desempenha os seguintes papéis:

* Compreender os recursos do time e identificar as tecnologias com as quais o time está familiarizado;
* Projetar o modelo, padrão e boas práticas que o time de desenvolvimento deverá seguir;
* Manter sempre a visão de que o desenho do software deve priorizar a evolução e a escalabilidade;
* Garantir que o código escrito e as decisões tomadas estejam em conformidade com os padrões estabelecidos;
* Auxiliar o time em uma visão macro e micro do projeto de software.

**Arquiteto Tecnológico**

São especialistas em uma ou mais tecnologias específicas, possuindo amplo conhecimento sobre elas e sabendo indicar a melhor escolha para resolver determinados problemas.

Por exemplo, podemos ter um Arquiteto Tecnológico especializado em Microsoft Azure, que deverá possuir amplo conhecimento das ferramentas desse serviço, a fim de orientar seu uso na solução de determinados problemas. Da mesma forma, podem existir Arquitetos Java, Arquitetos de banco de dados, entre outros.

Ilustração resumida dos tipos:

![Ilustração dos tipos de arquitetura](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fniqxi5t876kvihojkjb.png)

---

## O que é arquitetura de software?

> Arquitetura de software são as coisas importantes de um software. O que quer que isso seja. - Ralph Johnson


Gosto de começar a sintetizar o que é arquitetura de software, com essa frase incrível.

A definição concreta, foi estabelecida pela IEEE Standard 1471, que traz um acordo sobre o que é o conceito:

> Arquitetura de software pode ser definida como a organização fundamental de um sistema, seus componentes, as relações entre eles e o ambiente que guia seu design e evolução. 

Resumidamente, a arquitetura não é necessariamente um cargo, é um conhecimento que faz parte da engenharia de software.
 
Com este conhecimento, construímos um software que oferece soluções para o negócio, trabalhando com atributos de qualidade e preparado para a evolução.

Além disso, a arquitetura se preocupa em componentizar o software, atribuindo responsabilidades de forma clara e estabelecendo bons relacionamentos entre eles.

---

## Quais são os papéis da arquitetura de software?


![papeis da arquitetura de software](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0hprpeu27nddzjiykq0h.png)

O papél de uma boa arquietura de software é:

1. Entender o negócio e a motivação por trás da criação de determinado software;
2. Com base nesse entendimento, definir os atributos de qualidade (testes, segurança, UX/UI, custo, servidor etc.);
3. Desenhar uma solução que seja viável para o time, levando em consideração as habilidades e competências da equipe, não se limitando apenas a selecionar o que há de melhor no mercado;
4. Auxiliar o time de desenvolvimento a adotar boas práticas no processo de design (SOLID, Design Patterns, paradigmas etc.);
5. Manter o ciclo de desenvolvimento organizado para garantir a governança e a evolução do software.

O quinto item é, em minha opinião, um dos mais importantes. Não basta criar uma arquitetura bem estruturada, com ótimas práticas para escalabilidade e resiliência, se, ao longo do tempo, tudo se tornar desorganizado e caótico. É essencial governar e defender a arquitetura selecionada.

O responsável por manter a ordem normalmente se baseia em atividades como Code Review, uso de ferramentas de automação no processo de CI/CD, entre outras.

> O arquiteto de software é, idealmente, um orquestrador. Ele garante que todas as partes interessadas sejam ouvidas e suas ponderações sejam levadas em conta na formulação da arquitetura. Para isso, elabora e mantém artefatos abrangentes que facilitam o engajamento. - Elemar Jr.

---

## Conclusão

Normalmente, confundimos arquitetura de software com um cargo, e embora ele possa ser, nunca deixará de ser um conhecimento e um conjunto de práticas. Podemos encontrar diversos cargos, como Tech Leads, desenvolvedores seniores, gerentes técnicos, entre outros, que são responsáveis por desempenhar esses papéis.

Além disso, a arquitetura de software é parte integrante da engenharia de software. Não devemos depender unicamente de uma única pessoa para tomar decisões importantes; esse processo precisa ser executado em equipe, pois é assim que podemos ter ideias melhores e refinar o melhor caminho para a entrega de um bom software.

Nos próximos artigos, vou explorar esses conceitos em detalhes e espero contar com a participação de vocês, meus caros leitores!

---

## Me acompanhe em minhas redes sociais. 

Obrigado pelo seu tempo!

Compartilhem com seus colegas de estudo/trabalho.
Me chama nas redes sociais a baixo para trocarmos uma ideia e tirar dúvidas:
* [GitHub](https://github.com/matskira)
* [LinkedIn](https://www.linkedin.com/in/matheuspoda/)
* [Twitter](https://twitter.com/devmpoda)
* [YouTube](https://www.youtube.com/@devmpoda/videos)

Até a próxima!