Escolar Documentos
Profissional Documentos
Cultura Documentos
com/LucasGertel
Concentre-se na simplicidade
Os arquitetos ágeis devem se esforçar para criar a solução mais simples que atenda às
necessidades do projeto, mantendo a flexibilidade para o crescimento futuro. Isso
significa evitar excesso de engenharia e complexidade desnecessária, o que pode
retardar o desenvolvimento e tornar o sistema mais difícil de manter.
Equilíbrio de trade-offs
Os arquitetos devem equilibrar as compensações entre preocupações conflitantes,
como desempenho, capacidade de manutenção e flexibilidade. Isso envolve tomar
decisões informadas sobre a arquitetura, levando em conta as implicações de curto e
www.patreon.com/LucasGertel
longo prazo dessas escolhas e garantindo que elas se alinhem com os objetivos do
projeto e as necessidades das partes interessadas.
Arquitetura em camadas
Esse padrão organiza o sistema em uma série de camadas distintas, cada uma
responsável por um aspecto específico da funcionalidade do aplicativo. Camadas
comuns incluem apresentação, lógica de negócios, acesso a dados e armazenamento
de dados. Essa separação de preocupações simplifica o desenvolvimento, teste e
manutenção e permite a evolução independente de diferentes partes do sistema.
www.patreon.com/LucasGertel
Arquitetura Modular
A arquitetura modular divide o sistema em um conjunto de módulos independentes
fracamente acoplados que podem ser desenvolvidos, testados e implantados
separadamente. Isso promove flexibilidade, pois os módulos podem ser adicionados,
removidos ou atualizados sem afetar todo o sistema. A arquitetura modular também
incentiva a reutilização de código e reduz a complexidade ao organizar o sistema em
componentes gerenciáveis.
Arquitetura de microsserviços
Os microsserviços são uma forma específica de arquitetura modular que estrutura um
aplicativo como uma coleção de pequenos serviços autônomos. Cada serviço é
responsável por uma funcionalidade específica e se comunica com outros serviços por
meio de APIs. Essa abordagem permite a entrega contínua, melhora a escalabilidade e
facilita a manutenção, dividindo o sistema em unidades pequenas e implementáveis de
forma independente.
Planejamento colaborativo
Os arquitetos devem participar ativamente das atividades de planejamento ágil, como
refinamento do backlog, planejamento do sprint e reuniões diárias, para garantir que as
preocupações arquitetônicas sejam consideradas e abordadas durante todo o processo
de desenvolvimento. Essa colaboração ajuda a priorizar o trabalho arquitetônico junto
com outras tarefas e garante que a arquitetura permaneça alinhada com os objetivos
do projeto e as necessidades do cliente.
Especificações da interface
As especificações de interface documentam as APIs ou outras interfaces expostas
pelos componentes, fornecendo detalhes sobre suas entradas, saídas e
comportamentos. Esta documentação ajuda a promover consistência e
interoperabilidade entre os componentes e serve como referência para
desenvolvedores que implementam ou consomem as interfaces.
Conscientização e visibilidade
Promova uma cultura de conscientização sobre a dívida técnica dentro da equipe de
desenvolvimento e garanta que ela seja visível para todas as partes interessadas.
Incentive os desenvolvedores a identificar e comunicar dívidas técnicas e usar
ferramentas como análise de código estático e processos de revisão de código para
detectar possíveis dívidas.
Atributos de qualidade
Alguns atributos de qualidade comuns e requisitos não funcionais incluem:
Desempenho
A capacidade de resposta, rendimento e eficiência do sistema sob várias cargas de
trabalho e condições.
Escalabilidade
A capacidade do sistema de lidar com cargas de trabalho maiores ou acomodar mais
usuários sem sacrificar o desempenho ou a funcionalidade.
Disponibilidade
A proporção de tempo em que o sistema está operacional é acessível aos usuários.
Confiabilidade
A capacidade do sistema de operar de forma consistente e precisa e se recuperar de
falhas ou erros.
Segurança
A proteção do sistema e seus dados contra acesso, uso ou modificação não autorizados.
Manutenibilidade
A facilidade com que o sistema pode ser modificado, atualizado ou reparado para
solucionar defeitos, aprimorar a funcionalidade ou adaptar-se a requisitos em
constante mudança.
Usabilidade
A facilidade com que os usuários podem aprender, operar e interagir com o sistema
para atingir seus objetivos.
www.patreon.com/LucasGertel
Portabilidade
A facilidade com que o sistema pode ser transferido para diferentes plataformas,
ambientes ou configurações.
Projeto arquitetônico
Tome decisões arquitetônicas que suportem os atributos de qualidade desejados e
considere as compensações entre atributos conflitantes. Por exemplo, otimizar o
desempenho pode afetar a capacidade de manutenção ou a segurança.
Desenvolvimento iterativo
Refine continuamente o sistema em resposta ao feedback e aos requisitos em
mudança, abordando os atributos de qualidade de forma incremental como parte do
processo de desenvolvimento.
Teste e valide
Desenvolva uma estratégia de teste abrangente que inclua testes de desempenho,
segurança e usabilidade, entre outros, para validar se o sistema atende aos atributos de
qualidade definidos.
www.patreon.com/LucasGertel
Monitore e revise
Monitore regularmente o desempenho do sistema e outros atributos de qualidade,
usando métricas e feedback para informar melhorias e orientar o desenvolvimento
futuro.
Abordagem API-first
Adote uma abordagem API-first, em que as APIs são projetadas e documentadas antes
da implementação. Essa abordagem incentiva o baixo acoplamento entre os
microsserviços, facilitando a alteração ou substituição de serviços individuais sem
afetar todo o sistema.
Monitoramento e observabilidade
Implemente ferramentas de monitoramento e observabilidade para rastrear o
desempenho, integridade e interações de microsserviços. Isso é crucial para identificar
e resolver problemas em sistemas distribuídos, bem como entender o impacto das
mudanças na arquitetura geral.
Escalabilidade
Aproveite as vantagens inerentes de escalabilidade dos microsserviços projetando
serviços que podem ser dimensionados horizontalmente (adicionando mais instâncias)
ou verticalmente (aumentando os recursos). Isso permite que o sistema lide com
maiores cargas de trabalho ou demanda do usuário sem sacrificar o desempenho ou a
funcionalidade.
Segurança
Aborde as questões de segurança em uma arquitetura distribuída implementando
práticas como comunicação segura entre serviços, autenticação e autorização e
criptografia de dados. Isso ajuda a proteger o sistema e seus dados contra acesso não
autorizado e possíveis ataques.
www.patreon.com/LucasGertel
Arquitetura evolutiva
Abrace os princípios da arquitetura evolutiva, que enfatiza a capacidade de se adaptar
e evoluir em resposta a requisitos, tecnologias e ambientes em constante mudança.
Essa abordagem se alinha bem aos processos de desenvolvimento ágil e oferece
suporte à melhoria contínua e à adaptação de sistemas baseados em microsserviços.
Autoridade descentralizada
Delegue autoridade de tomada de decisão arquitetural para equipes de
desenvolvimento individuais sempre que possível, capacitando-as a tomar decisões
com base em seu conhecimento e experiência no domínio. Esta abordagem suporta os
princípios ágeis de auto-organização e promove uma tomada de decisão mais rápida.
www.patreon.com/LucasGertel
Documentação leve
Documente decisões arquitetônicas usando formatos leves e fáceis de entender, como
registros de decisão de arquitetura (ADRs) ou logs de decisão. Essa abordagem mantém
um registro das decisões tomadas, sua justificativa e suas consequências sem adicionar
sobrecarga ou complexidade desnecessária.
Desafios
Melhores Práticas
Banco ING
A ING, uma instituição financeira global, transformou com sucesso seu processo de
desenvolvimento de software adotando arquitetura ágil e práticas de desenvolvimento.
Essa transformação permitiu que respondessem rapidamente às necessidades dos
clientes, reduzissem o tempo de colocação no mercado e melhorassem a qualidade
geral de seus sistemas de software.
Arquiteturas Serverless
A computação sem servidor permite que os desenvolvedores se concentrem em
escrever código sem se preocupar com o gerenciamento da infraestrutura. Essa
tendência permite escalabilidade mais granular, melhor eficiência de custo e ciclos de
desenvolvimento mais rápidos. As arquiteturas ágeis precisarão se adaptar para
oferecer suporte a componentes sem servidor e garantir a integração perfeita com
outros elementos arquitetônicos.
Computação de borda
À medida que a Internet das Coisas (IoT) continua a se expandir, a computação de
borda está ganhando destaque. A computação de borda aproxima a computação e o
armazenamento de dados da fonte de dados, reduzindo a latência e melhorando o
www.patreon.com/LucasGertel
desempenho. As arquiteturas ágeis precisarão considerar os recursos de computação
de borda e oferecer suporte a sistemas distribuídos que abrangem ambientes de
nuvem, borda e locais.
DevSecOps
As preocupações com a segurança estão sendo cada vez mais integradas ao processo
de desenvolvimento de software por meio da adoção de práticas de DevSecOps. As
arquiteturas ágeis precisarão incorporar considerações de segurança desde o início,
como comunicação segura, autenticação e proteção de dados, para garantir sistemas
robustos e seguros.
Gêmeos Digitais
O conceito de "Digital Twins," onde uma representação digital de um sistema físico é
usada para simulação e análise, está ganhando força em vários setores. As arquiteturas
ágeis precisam acomodar a tecnologia de gêmeos digitais, que pode envolver
processamento de dados em tempo real, simulações complexas e forte integração com
sistemas físicos.
Economia de APIs
À medida que as organizações dependem cada vez mais de APIs para integrar serviços
e compartilhar dados, a economia de APIs está se tornando mais importante. As
arquiteturas ágeis precisarão enfatizar o design e o gerenciamento de APIs, garantindo
que sejam escaláveis, seguras e fáceis de usar para consumidores internos e externos.
www.patreon.com/LucasGertel