Robert Martin foi feliz em destacar que a arquitetura de software ingênua costuma dar ênfase a prática de desenvolvimento e de manutenção e ignorar o deployment e a operação. Por outro lado, a boa arquitetura de software da enfoque a essas quatro atividades.
Desenvolvimento
Se desenvolver um software for uma atividade difícil, então, dificilmente esse software terá “vida longa”.Uma das preocupações da boa arquitetura de software deve ser tornar o processo de desenvolvimento mais simples. Efetivamente, o bom arquiteto reconhece que a estrutura de comunicação da organização determina a estrutura do software que ela desenvolve. Logo, o bom arquiteto deve conceber a arquitetura respeitando a estrutura da organização. A outra alternativa étentar iniciar um movimento para mudar a estrutura da organização (o que costuma ser bem difícil).
Deployment
O software não tem valor se não for colocado em produção. Software difícil de fazer deploy acaba represando valor (features ficam paradas por mais tempo do que necessário).
A boa arquitetura, invariavelmente, considera o custo do deploy. É por causa do deploy, por exemplo, que costumamos a ser enfáticos na moderação de recursos do banco de dados. Afinal, versionar e atualizar stored procedures é mais difícil do que versionar e atualizar um servidor de aplicação.
Usar centenas de microsserviços também pode ser um pesadelo, se não for algo bem planejado.
Manutenção
O custo total de um software pode ser analisado sob a perspectiva do custo para desenvolver e do custo para manter. O segundo custo, geralmente, é muito mais expressivo.
A boa arquitetura de software invariavelmente enfatiza a redução do esforço para acelerar a entrega.
Em nossa visão, desenvolvimento de software com microsserviços é justificado em cenários onde simplifica e permite a introdução de features com maior frequência sem comprometer a estabilidade.
A separação adequada de um software em componentes, isolando esses componentes com protocolos claros de relacionamento, ajuda a mitigar as “dores da manutenção”.
Operação (manter rodando)
Na operação, a boa arquitetura tratará de preparar o sistema para se recuperar mais facilmente de falhas, suportar escalabilidade horizontal e vertical, e prover boa instrumentação. Aliás, uma das “falhas” mais comuns das implementações baseadas em microsserviços é não tratar monitoramento, logging e tracing de forma apropriada.
Fechando…
Arquitetura de software precisa ser planejada e implementada com, pelo menos, quatro perspectivas: desenvolvimento, manutenção, operação e deploy. Infelizmente, entretanto, geralmente a ênfase de arquitetos mais ingênuos fica apenas nas duas primeiras.
Em cenários envolvendo microsserviços, operação e deploy crescem consideravelmente em relevância.