Todos os artigos
Carreira · 5 min de leitura

Arquiteto de software: um papel que muitos desenvolvedores desempenham!

Reflexão sobre o papel de arquitetura de software e como ele aparece no dia a dia de quem desenvolve.

Arquiteto de software: um papel que muitos desenvolvedores desempenham!
Neste artigo7 seções
  1. Habilidades Arquitetônicas
  2. Atributos de Qualidade
  3. Visão Holística
  4. Arquitetura como uma Atividade Contínua
  5. A Importância da Experiência
  6. Conclusões
  7. Bônus

A arquitetura de software de forma simplificada, pode ser vista como a organização das diferentes camadas e componentes dentro de um sistema. A definição mais comum remete à decisão sobre o como construir o software e quais são os melhores caminhos para atender aos requisitos.

A arquitetura envolve diversas áreas, como:

  • Design: Como será feita a renderização, no servidor ou no cliente? Qual banco de dados escolher: relacional ou não relacional?
  • Tecnologias: Optar por REST ou GraphQL? E no backend, .NET ou Node?
  • Sistema Design: O sistema será monolítico ou em micros-serviços?
  • Infraestrutura: Onde o software será hospedado?

No entanto, o título “Arquiteto de Software” muitas vezes transmite a ideia equivocada sobre a natureza do trabalho, a realidade é que muitos desenvolvedores ao tomarem decisões sobre os atributos de qualidade do sistema, estão efetivamente desempenhando o papel de arquiteto, mesmo sem reconhecer isso como tal. Toda vez que optam por como lidar com requisitos não funcionais, como escalabilidade, desempenho e segurança, estão moldando a arquitetura do sistema.

Habilidades Arquitetônicas

Existem habilidades cruciais que ajudam os profissionais a melhorar a qualidade do seu trabalho arquitetônico:

Atributos de Qualidade

Embora os requisitos funcionais sejam frequentemente o centro das atenções, coisas como escalabilidade, desempenho e segurança são os elementos essenciais para garantir que um sistema se mantenha viável a longo prazo. Esses atributos moldam a arquitetura, garantindo que o sistema consiga evoluir sem se tornar obsoleto.

Visão Holística

Uma boa arquitetura requer a capacidade de abordar o sistema como um todo, considerando como diferentes partes interagem e afetam uns aos outros. A separação de preocupações e a modularidade são essenciais, mas também exigem uma visão ampla do que está acontecendo em todo o sistema.

  • Compreensão do Ciclo de Vida do Sistema: Um arquiteto precisa entender não apenas a construção do sistema, mas também sua implantação, manutenção e evolução ao longo do tempo. Isso inclui o conhecimento sobre os desafios de longo prazo, como a gestão de débitos técnicos e como o sistema responde a mudanças.
  • Equilíbrio de Preocupações e Compromissos: A arquitetura de software raramente envolve soluções definitivas. Muitas vezes, é necessário fazer trade-offs entre requisitos conflitantes, como desempenho e segurança ou entre escalabilidade e custos. Essas escolhas exigem uma análise profunda das implicações de cada decisão.
  • Aprendizado com a Experiência: A arquitetura não deve ser vista como um conjunto de normas rígidas. Ela precisa evoluir com base na experiência e nas lições tiradas ao longo do tempo. Arquitetos devem ser capazes de testar e revisar os padrões, adaptando conforme as novas necessidades da equipe e do sistema.
  • Capacidade de Liderança: A boa arquitetura não é só técnica, mas também envolve o gerenciamento da comunicação entre a equipe. Levantar questões, promover discussões e facilitar a busca por consenso são habilidades que ajudam a superar os obstáculos técnicos e a garantir uma arquitetura sólida.

Arquitetura como uma Atividade Contínua

A arquitetura de software é um processo exploratório por natureza. Todos enfrentam desafios técnicos novos e frequentemente imprevisíveis. Em vez de definir toda a arquitetura de forma antecipada, o processo deve ser contínuo, testando hipóteses sobre como melhor atender aos atributos de qualidade.

Cada decisão arquitetural é um experimento, todos constroem soluções parciais para testar suas suposições, documentam os resultados e avaliam se o caminho escolhido atende aos requisitos desejados. Esses aprendizados moldam a arquitetura ao longo do tempo.

Importante: a documentação e os diagramas são importantes, mas não são a arquitetura em si, o “porquê” por trás das escolhas feitas é que realmente importa.

Ao tomar decisões, é crucial documentar:

  • O custo de reverter uma decisão: Se uma escolha arquitetural precisar ser alterada no futuro, é importante avaliar o impacto dessa mudança, seja substituindo um serviço ou reescrevendo partes do código.
  • Restrições e suposições: Entender e documentar as limitações que influenciam as decisões ajuda a equipe a evitar surpresas no futuro. Por exemplo, uma hipótese sobre a quantidade de usuários simultâneos pode afetar decisões sobre concorrência e escalabilidade.
  • Atributos de Qualidade: Para cada atributo de qualidade (QAR), é necessário descrever como ele foi abordado e quais testes foram feitos para garantir que o sistema atenda a esses requisitos.
  • Justificativas para as decisões: É fundamental documentar não apenas as escolhas feitas, mas também as alternativas descartadas. Isso não apenas mostra o raciocínio por trás da arquitetura, mas também oferece insights sobre limitações que podem ser removidas no futuro.

A Importância da Experiência

A experiência é fundamental para entender as nuances das diversas decisões. O simples conhecimento teórico, como o que se aprende em tutoriais ou livros, é valioso, mas apenas a experiência prática nos permite construir hipóteses fundamentadas sobre o que funciona e o que não funciona.

Portanto, o ideal é experimentar novas tecnologias e ferramentas, só assim você será capaz de formar hipóteses sólidas sobre o que é bom ou ruim para um determinado cenário.

Embora seja impossível explorar tudo, plataformas como o ThoughtWorks Radar ajudam na escolha de tecnologias recomendadas e alertam sobre aquelas que ainda não são maduras ou precisam de cuidado.

Conclusões

Pessoalmente acredito que a arquitetura de software precisa ser repensada, sua visão ainda carrega muitos conceitos antigos sobre os problemas que precisa resolver e sobre como abordá-los.

Adotar a arquitetura de software como um processo contínuo e empírico, focado em testar hipóteses e usar o aprendizado para validar decisões, é essencial para a construção de sistemas resilientes e sustentáveis.

Talvez a arquitetura de software melhoras possam ocorrer quando essa prática for trazida para dentro do desenvolvimento e quando os próprios desenvolvedores assumirem o papel de arquitetos, aplicando seus conhecimentos para resolver problemas concretos.

Bônus

Se você deseja se aprofundar mais em arquitetura de software deixo aqui alguns roadmap para te ajudar na sua jornada:

Leia também