Design e Arquitetura de Software: e devs com isso?
Tags: architecture, cleanarchitecture, design, codequality
Published: 2020-06-01 12:42:29

Não basta ler o livro técnico… é parte do exercício tornar o conhecimento acessível, de alguma forma, para as pessoas e para que consiga registrar o que entendi. Talvez por isso eu não vá na melhor velocidade do mundo, mas com certeza é uma das minhas motivações para seguir em frente. Ei, você vem comigo ou vai ficar aí parado? 😂
Estou lendo o Clean Architecture e resolvi compartilhar um pouquinho do que eu estou vendo e quem sabe te incentivar a ler o livro também. 
A melhor forma de começar esse texto é compartilhando a definição do Robert Martin sobre Design e Arquitetura.

"Ambos não possuem nenhuma diferença. Por acaso, no mundo da tecnologia, usamos design para indicar as soluções mais próximas dos detalhes, quando falamos e, “baixo nível”. Já o conceito de arquitetura é aplicado para soluções mais macros, ou seja, aquelas consideradas “alto nível”"

Ele dá um exemplo bem legal baseado na planta da sua própria casa. Achei muito interessante porque me fez lembrar justamente do momento em que eu construía a minha casa. Acreditem: construir uma casa sem arquiteto é mais complicado do que parece! Os desafios são muito maiores do que simplesmente decidir cômodos e dimensões. Cada detalhe interfere, desde as tomadas até o encanamento - que podem afetar diretamente como os aspectos mais macro são construídos ou decisões da organização da sua casa, como onde sua tv vai ficar ou uma mesa.
Quem já leu algum dos meus conteúdos sabe que eu sou a mulher que gosta de exemplos nada técnicos. Então, bora?!

Uma pia e mil possibilidades...

Lembro que o posicionamento da pia interferiu diretamente no encanamento, nas janelas e nas tomadas… e em possíveis mudanças no futuro! Decisões, aparentemente simples como estas, podem fazer com que você tenha que ficar anos e anos com a cozinha de um mesmo jeito e ter disposição para gastar e quebrar muita coisa quando quiser alterar. 

Ou seja, depois de uma escolha mal calculada… qualquer mudança pode ficar em algum lugar entre o “seu imaginário” e um “valor bastante alto”. Isso significa menos flexibilidade e um espaço pequeno para evoluir a estrutura da sua casa.

E alguém muda a casa tanto assim?!

Espere só até você resolver construir a sua do zero! Esse é um exemplo que mostra como pequenas decisões influenciam diretamente em ações mais macros de um projeto, principalmente na questão de evolução e manutenção

E aí, em qual posição vamos colocar a janela? Uma vez decidido, creio que quebrar uma parede para mudá-la de lugar não seja algo tão trivial assim.

A boa arquitetura é feita de decisões complementares...

Então, por que tentamos diferenciar pequenas e grandes decisões o tempo todo? Profissionais de arquitetura deixam claro que não há uma separação entre esses assuntos. Guarda isso na mente, como um mantra!

Pessoalmente, vi na prática que separar as decisões de alto nível e de baixo nível cria projetos complexos, demorados e de difícil execução (e uma manutenção de tirar o sono das pessoas). Fora o esforço investido… ou eu deveria dizer algo mais próximo de desperdiçado. #Falei

Marquem as palavras de Robert C. Martin:

"O objetivo da arquitetura de software é minimizar os recursos humanos necessários para construir e manter determinado sistema"

Quanto melhor o design, menor o esforço para desenvolver e evoluir os recursos solicitados pelo cliente. Algo diferente disso só indica o quanto o sistema ou sua solução está mal projetada. E essas são verdades que podem ferir.

Para entender como projetar com qualidade, precisamos entender o que é uma boa arquitetura de software. Para isso, precisamos conhecer quais pontos são importantes a se avaliar. O fato é:

"A única maneira de seguir rápido é seguir bem"

Se é sobre gerar valor, então...

É necessário que essa entrega seja feita de forma rápida! Só tome muito cuidado: aqui mora uma senhora confusão.
No primeiro momento, gerar valor o mais rápido possível parece ser mais importante do que, talvez, construir baseado em princípios de arquitetura/ design. Porém, são esses itens que vão facilitar e até possibilitar  as mudanças futuras. Essas, sim, garantindo,e o ciclo de melhorias contínuas, que gera valor. 

Abrir mão de alguns pontos em nome de gerar valor relativo no curto prazo, fará com que você não entregue valor no longo prazo. É nesse momento que as tecnologias começam a ficar insustentáveis e que o barato sai caro.

Eu só consigo garantir que...

Deixar a arquitetura/design por último custará caro no final das contas e o time de desenvolvimento precisa ter isso em mente.
E eu tenho uma notícia ruim e uma boa…
A ruim é que esse artigo chegou ao fim.
A boa é que este é só o primeiro de uma série de conteúdos que estão aqui no meu backlog.

Conto com o seu feedback sobre esse conteúdo! 
Nos vemos no próximo artigo!