Em qualquer cenário, quanto maior a complexidade, maiores são os custos envolvidos. Por isso, tanto na elaboração quanto na avaliação de designs arquiteturais, onde geralmente se busca otimizar o custo – que é um atributo de qualidade – é natural  a busca pelo “mais simples”. Infelizmente, a complexidade emerge com a necessidade de entregar mais valor para o negócio e suportar melhor a escala, preservando a confiabilidade.

A complexidade tem quatro origens genéricas distintas que devem ser combatidas ou, pelo menos, controladas. São elas: dimensionalidade, interdependência, influência do ambiente e irreversibilidade. \

Dimensionalidade

Quanto maior o número de variáveis envolvidas, maior será a dimensionalidade. Por isso, por exemplo, qualquer software com mais features se torna mais complexo. A cada novo processo na organização, menor a simplicidade. Toda exceção suportada aumenta o custo.

Em uma arquitetura monolítica, mais código significa mais complexidade para desenvolvedores. Em uma arquitetura baseada em microsserviços, mais artefatos para distribuir, independentemente, significa mais complexidade para a operação. É parte das práticas de arquitetura determinar onde dimensionalidade maior representa mais problemas. Entretanto, dimensionalidade é uma fonte impossível de evitar em definitivo.

Interdependência e relações

Na medida em que as expectativas relacionadas a software aumentam, crescem também as demandas por adotar soluções “prontas” que possibilitem atender as demandas do negócio.

Quanto mais componentes externos em um sistema, maiores os desafios para controlar a evolução das versões e balancear a atualização tecnológica com a necessidade de implementar features.

Influência do ambiente

Operações interdependentes demandam mais esforço de comunicação e sincronização. Não raro, a indisponibilidade de um recurso impossibilita o uso de outro, aparentemente não relacionado. É bastante comum que uma performance mais pobre de uma parte de um sistema deixe ele todo “lento”.

A influência do ambiente é “afrouxada” pela utilização de técnicas resilientes e adoção de abstrações. Entretanto, “nenhum sistema é uma ilha” e, em geral, a influência do ambiente pode ser minimizada, mas não evitada.

Irreversibilidade

Decisões irreversíveis implicam em mais planejamento, cuidado na implementação, testes e, consequentemente, complexidade.

A adoção de metodologias ágeis substituíram longos ciclos de desenvolvimento por abordagens iterativas, mais fáceis de verificar e validar. Da mesma forma, servidores imutáveis tornaram mais fáceis executar o deploy e, principalmente, rollbacks.

Toda decisão arquitetural que não pode ser desfeita implica em complexidade.

 

Referências bibliográficas

ZANINOTTO, Enrico. From X programming to the X organisation. Trento, Itália: 3Rd Intl Conference Of Xp, 2002. Color. Disponível em: https://martinfowler.com/articles/zaninotto.pdf. Acesso em: 3 jul. 2021.

Compartilhe este capítulo:

Compartilhe:

Comentários

Participe da construção deste capítulo deixando seu comentário:

Inscrever-se
Notify of
guest
0 Comentários
Feedbacks interativos
Ver todos os comentários

Fundador e CEO da EximiaCo, atua como tech trusted advisor ajudando diversas empresas a gerar mais resultados através da tecnologia.

Mentorias

para arquitetos de software

Imersão, em grupo, supervisionada por Elemar Júnior, onde serão discutidos tópicos avançados de arquitetura de software, extraídos de cenários reais.

Consultoria e Assessoria em

Arquitetura de Software

EximiaCo oferece a alocação de um Arquiteto de Software em sua empresa para orientar seu time no uso das melhores práticas de arquitetura para projetar a evolução consistente de suas aplicações.

ElemarJúnior

Fundador e CEO da EximiaCo, atua como tech trusted advisor ajudando diversas empresas a gerar mais resultados através da tecnologia.

Podcast

Arquitetura de Software Online

55 51 9 9942 0609  |  me@elemarjr.com

+55 51 99942-0609 |  contato@eximia.co

+55 51 99942-0609  contato@eximia.co

0
Quero saber a sua opinião, deixe seu comentáriox
()
x