Arquitetura Evolutiva: a chave para o sucesso da Agilidade
Published: 2021-09-29 18:45:52

Como tratar atividades de arquitetura em projetos Ágeis? Tradicionalmente, em metodologias Waterfall, conforme imagem abaixo, as atividades de arquitetura se concentram até a fase de design. É o que é tradicionalmente chamado de BDUF (Big Design Up Front).

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4g78qocbcb7hymz2m02t.png)
Metodologia Waterfall - fonte: [Martin Fowler - Waterfall process](https://martinfowler.com/bliki/WaterfallProcess.html)

Nesse tipo de metodologia, temos todo o desenho funcional e de arquitetura sendo feito antes de se iniciar o desenvolvimento e é fácil ver como as atividades de arquitetura se encaixam no projeto.

Contudo, hoje a maior parte das organizações já está adotando metodologias ágeis, em grande parte pois perceberam que as metodologias em cascatas demoram muito para entregar valor às organizações, gasta-se um grande tempo em desenho de uma solução, que quando fica pronta, normalmente não atende às novas demandas do mercado, que evolui muito rápido.

Isso nos deixa com a pergunta que abre esse artigo: como tratar as atividades de arquitetura em metodologias ágeis? 

E complemento: Como tratar as atividades de arquitetura em metodologias ágeis se o foco é na entrega de valor e o backlog é determinado por um product owner com uma visão excelente de negócio, mas com pouca visão técnica?

Abordagens
==========

O mercado tem adotado duas abordagens principais quando fala de arquitetura em projetos Ágeis:

A primeira abordagem, vinda da metodologia SAFE (Scaled Agile Framework que é voltada para iniciativas de maior porte e com múltiplos times colaborando), ela é chamada de [Architecture Runway](https://www.scaledagileframework.com/architectural-runway/), que pode ser traduzida como "Pista de arquitetura" ou "Passarela de Arquitetura". 

Nesta abordagem, é montada uma equipe de arquitetura com um Arquiteto como Product Owner. Este time trabalha em funcionalidades que habilitam os outros times a entregarem valor para o negócio.

A segunda abordagem mais utilizada é dar autonomia completa às equipes para tomada de decisão, e deixar as atividades de arquitetura como parte das sprints. Para essa abordagem ser bem sucedida é necessário um time com maior senioridade e um PO que consiga ver valor em atividades mais técnicas, visto que em geral essa abordagem tente a gerar necessidades mais frequentes de refatoração.

Ambas as abordagens tem benefícios e desafios, e irei no futuro fazer um artigo sobre elas, mas como bom Arquiteto, não poderia deixar de falar da parte técnica. Qual a chave para fazer uma arquitetura evolutiva?

A chave da Arquitetura Evolutiva
================================

Independente da abordagem, a chave para obter uma arquitetura evolutiva é diminuir o acoplamento nos sistemas. Pensando em um cenário padrão de aplicações, como visto abaixo, o desacoplamento deve ser feito em vários níveis. 

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d9lfbdxeqaxoif1fygcf.png)
 
Tipos de desacoplamento
 - Desacoplamento dentro de um módulo: Desacoplar as funcionalidades dentro de um módulo do sistema
 - Desacoplamento dentro de um sistema: Desacoplar os diversos módulos dos sistemas
 - Desacoplamento entre sistemas: Desacoplar os diversos sistemas dentro da empresa
 - Desacoplamento com entes externos: Desacoplar sistemas externos á nossa empresa

Para cada um desses níveis, existem técnicas para obter o desacoplamento, irei criar uma série de artigos abordando individualmente esses tipos de desacoplamento, então fique de olho!