Gabriel S. Kohlrausch
Consultor/Technical Advisor at EximiaCo
gabriel@eximia.co
Arquiteturas que
Evoluem
PÁGINA ⠀2⠀
SOFTWARE MUDA
‘‘Há muito tempo acreditamos que, quando a taxa de mudança dentro de uma instituição se torna mais lenta do que a taxa de mudança externa, o fim está à vista. A única questão é quando.’’
Jack Welch
PÁGINA ⠀3⠀
A primeira diz que, ao longo do tempo, um sistema de software precisa ser continuamente adaptado, recebendo novas “adaptações”, para se manter relevante e satisfatório.
LEIS DE LEHMAN
PÁGINA ⠀4⠀
A segunda aponta que, enquanto essas “adaptações” são feitas, o software se torna mais complexo, exceto quando existam esforços explicitamente direcionados para mitigar essa complexidade.
LEIS DE LEHMAN
PÁGINA ⠀5⠀
Percebemos valor de um software através de suas funcionalidades e pela sua arquitetura.
QUAL O VALOR DE SOFTWARE ?
PÁGINA ⠀6⠀
O ritmo das mudanças, tecnológicas e de negócios, está acelerado e está ficando cada vez mais acelerado. Aliás, essa é a característica que melhor justifica as atividades de arquitetura.
BOAS ARQUITETURAS SUPORTAM MUDANÇA
PÁGINA ⠀7⠀
ARQUITETURA DE SOFTWARE
COMPONENTES
RESPONSABILIDADES
RELACIONAMENTOS
+
ESTRATÉGIA
(Objetivos de negócio, restrições e atributos de qualidade)
BUSCANDO O MENOR RISCO/CUSTO
PERFORMANCE
PÁGINA ⠀8⠀
TRADE-OFFS
SECURITY
AVAILABILITY
DATA
SCALABILITY
FUNCIONALIDADES
TEMPO
PERFORMANCE
PÁGINA ⠀9⠀
EVOLVABILITY COMO ATRIBUTO DE QUALIDADE
SECURITY
AVAILABILITY
DATA
SCALABILITY
FUNCIONALIDADES
TEMPO
EVOLVABILITY
PÁGINA ⠀10⠀
Atributo de qualidade relacionado à capacidade de um sistema “evoluir”, tanto para atender demandas de negócio como para “acomodar” novidades tecnológicas, sem comprometer objetivos do negócio, desrespeitar restrições ou romper os demais atributos, minimizando custo ou risco.
EVOLVABILITY
PÁGINA ⠀11⠀
Capacidade de suportar mudanças incrementais, preservando a eficiência no decorrer do tempo, sendo guiada por fitness functions, que comprovam continuamente adequação a parâmetros de qualidade bem-definidos em múltiplas dimensões.
ARQUITETURA EVOLUCIONÁRIA
PÁGINA ⠀12⠀
O “represamento” das iniciativas para modernização tecnológica é uma das maiores causas para a “morte” dos sistemas de software. Mesmo quando tecnologias não agregam “algo novo”, o afastamento da trajetória evolutiva das ferramentas, técnicas e práticas por um tempo prolongado aumenta de maneira exponencial o custo e risco para a mudança, apesar dos custos de oportunidade.
MUDANÇAS INCREMENTAIS
PÁGINA ⠀13⠀
MUDANÇAS TECNOLÓGICAS
Não conseguimos predizer quando mudanças impactantes do contexto de desenvolvimento irão ocorrer. Nem mesmo conseguimos antecipar quais serão “persistentes” (se é que essa palavra é aplicável), entretanto, sabemos que mudanças acontecem e o ritmo parece ser cada vez mais acelerado.
PÁGINA ⠀14⠀
SOFTWARE LEGADO
‘‘Um sistema se torna legado quando nossa capacidade de pagar dívidas técnicas é menor que a necessidade de contrair novas.’’
Fernando�Paiva
PÁGINA ⠀15⠀
MUDANÇAS INCREMENTAIS
PÁGINA ⠀16⠀
Architecture fitness functions são um tipo de função objetivo que é usada para resumir o quão perto uma determinada solução de arquitetura de software está de atingir os objetivos definidos.
GUIADA POR FITNESS FUNCTIONS
PÁGINA ⠀17⠀
FITNESS FUNCTION DEPENDENCY CYCLES
DETERMINANDO O VOLUME
“IDEAL” DE ABSTRAÇÕES
PÁGINA ⠀18⠀
COMPONENTES MUITO ABSTRATOS E INSTÁVEIS
COMPONENTES CONCRETOS E ESTÁVEIS
Domain.Core�A = 0.13�I = 0.48
Projeto: Application.Schedule�A = 0.08�I = 0.93
Project: Application.Authentication�A = 0.5�I = 0.84
https://dateo-software.de/blog/get-started-with-ndepend
PÁGINA ⠀19⠀
FITNESS FUNCTION PARA ACOPLAMENTO
PERFORMANCE
PÁGINA ⠀20⠀
MÚLTIPLAS DIMENSÕES
SECURITY
AVAILABILITY
DATA
SCALABILITY
FUNCIONALIDADES
TEMPO
FITNESS FUNCTIONS
Load Testing
LOAD TESTING COMO FITNESS FUNCTIONS
PÁGINA ⠀21⠀
PÁGINA ⠀22⠀
O estabelecimento de governança arquitetural passa pela definição de guidelines e guard rails que determinam um “jeito” de fazer as coisas e limites claros dentro dos quais há autonomia de atuação.
EVOLVABILITY DEMANDA “GOVERNANÇA ARQUITETURAL”
PÁGINA ⠀23⠀
GUIDELINES E GUARDRAILS
https://github.com/TNG/ArchUnitNET
PÁGINA ⠀24⠀
GUIDELINES E GUARDRAILS
https://github.blog/2016-02-03-scientist/
https://github.com/github/scientist
https://github.com/MisterSpex/misterspex-scientist
PÁGINA ⠀25⠀
GUIDELINES E GUARDRAILS
https://github.blog/2016-02-03-scientist/
https://github.com/github/scientist
https://github.com/MisterSpex/misterspex-scientist
PÁGINA ⠀26⠀
‘‘Entretanto, não ignoramos o fato que toda escolha implica em uma renúncia. Sempre haverão trade-offs. Nada é bom para tudo!’’
Elemar Jr.
TRADE-OFFS
O QUE FAZER AMANHÃ?
PÁGINA ⠀27⠀
OBJETIVOS DE NEGÓCIO, RESTRIÇÕES E ATRIBUTOS DE QUALIDADE ESTÃO EVIDENTES?
No início dos projetos, a principal preocupação dos arquitetos é explicitar a estratégia – padrões coerentes para tomada de decisão – que deve ser observada nas decisões arquiteturais.
CONSEGUIMOS EXPRESSAR NOSSA ESTRATÉGIA ATRAVÉS DE FITNESS FUNCTIONS?
“Estratégia” precisa ser objetiva e observável, expressa em architectural fitness functions. A arquitetura evolucionária não é emergente, nem baseada em palpites.
QUAL A OBSOLESCÊNCIA TECNOLÓGICA MÁXIMA ADMITIDA?
O “represamento” das iniciativas para modernização tecnológica é uma das maiores causas para a “morte” dos sistemas de software. Mesmo quando tecnologias não agregam “algo novo”, o afastamento da trajetória evolutiva das ferramentas, técnicas e práticas por um tempo prolongado aumenta de maneira exponencial o custo e risco para a mudança, apesar dos custos de oportunidade.
QUAIS ARTEFATOS ESTÃO NA “ZONA DE DOR”? E NA “ZONA DE DESUSO”?
Como já foi dito, transferir acoplamento aferente de algumas implementações concretas para abstrações pode simplificar a manutenabilidade dos sistemas, aprimorando o evolvability. Entretanto, abstrações em demasia, ou para artefatos errados, tornam sistemas mais difíceis de entender e caros para manter.
MANUAL DO ARQUITETO
PÁGINA ⠀28⠀
FEITO COM 🤍 POR EXIMIACO