Como dominar a dispersão de software
Três sinais de que você sofre de dispersão de software e o que você pode fazer para solucionar
Andrew Boyagi
Evangelista sênior
O monólito está desaparecendo cada vez mais rápido. Inúmeras empresas em todo o mundo agora adotam a arquitetura de acoplamento fraco para o desenvolvimento de software. Equipes distribuídas e autônomas estão dividindo aplicativos monolíticos em coleções de componentes, como microsserviços.
Por quê? A arquitetura de acoplamento fraco facilita a escalabilidade do desempenho e da resiliência do software e, ao mesmo tempo, reduz o risco e o tempo de espera de entrega do fornecimento de novas funções de aplicativos. Os benefícios também não se limitam ao software. A arquitetura de acoplamento fraco permite que as equipes se movam por conta própria e que façam alterações que beneficiam os usuários com frequência. Equipes autônomas que criam software em uma arquitetura de acoplamento fraco têm níveis mais altos de contentamento, engajamento e produtividade.
No entanto, novas formas de trabalhar trazem novos desafios. Ao criar um ambiente dinâmico e escalável em que componentes individuais são construídos separados uns dos outros, a complexidade aumenta, dando origem a um novo tipo de desafio: a dispersão de software.
Teste o Compass grátis
Aprimore a experiência de desenvolvedor, catalogue todos os serviços e melhore a integridade do software.
O que é a dispersão de software?
A dispersão de software ocorre quando o número de aplicativos ou componentes de software em um ambiente cresce e muda com rapidez, aumentando significativamente a complexidade e fazendo com que os métodos tradicionais de gerenciamento de software sejam insuficientes. É o que costuma ocorrer à medida que o ritmo aumenta em uma arquitetura de software distribuída.
A modernização de até mesmo um único aplicativo monolítico pode resultar em centenas de microsserviços gerenciados por várias equipes que, de maneira independente e frequente, lançam novas funções para produção. Expandir essa situação para um portfólio de aplicativos pode levar à introdução de milhares de microsserviços em várias equipes de desenvolvimento. Não é nenhuma surpresa que as formas tradicionais de gerenciar até mesmo um portfólio pequeno de aplicativos não levem ao sucesso a longo prazo. Durante a jornada da Atlassian em direção aos milhares de microsserviços que sustentam nossos produtos no momento, descobrimos que controlar a dispersão de software era fundamental para liberar o poder de uma arquitetura de acoplamento fraco e equipes autônomas.
Material relacionado
Microsserviços versus arquitetura monolítica
VER SOLUÇÃO
Melhore a experiência de desenvolvedor com o Compass
Os sintomas da dispersão de software podem ser difíceis de reconhecer no início. Eles podem começar como pequenos aborrecimentos que são deixados de lado para dar atenção a problemas com nível de prioridade mais alto. No entanto, se não for controlada, a dispersão de software pode prejudicar as equipes de desenvolvimento com carga cognitiva maior, reduzir o engajamento da equipe e reverter os benefícios associados a uma arquitetura pouco integrada. Como diz o provérbio, “o melhor momento para plantar uma árvore foi há 20 anos. O segundo melhor momento é agora”, o sucesso futuro se baseia em domar a dispersão de software antes que ela se torne um problema.
Abaixo estão três sinais da dispersão de software e o que você pode fazer para dominar o caos e, ao mesmo tempo, criar um ambiente inovador e dinâmico que libera o potencial de cada equipe.
As avaliações pós-incidentes identificam as alterações upstream como a causa raiz
Um sintoma precoce da dispersão de software é ter várias avaliações pós-incidentes (PIRs) indicando alterações upstream como a causa raiz de um incidente. Um número crescente de microsserviços e um maior volume de alterações em um ambiente podem sobrecarregar as normas existentes sobre colaboração de desenvolvedores e coordenação de alterações. Mesmo um pequeno aumento, de mensal para semanal, na frequência de alterações de um aplicativo modernizado pode resultar em um aumento de 100 vezes nos lançamentos por mês. Não é nenhuma surpresa que os desenvolvedores precisem adaptar a forma como colaboram. É mais provável que ocorram incidentes na produção quando as normas de colaboração dos desenvolvedores não escalam em um ambiente dinâmico.
Criar uma forma não intrusiva de os desenvolvedores ficarem por dentro das alterações upstream e downstream é uma ótima maneira de controlar o impacto da dispersão de software. Na Atlassian, usamos o Compass — um portal de desenvolvedores que ajuda na orientação das equipes em arquiteturas distribuídas — para enviar uma notificação no app para as equipes de desenvolvimento sobre alterações significativas nos serviços upstream e downstream. O reconhecimento dessa notificação indica ao iniciador da alteração que as equipes responsáveis pelos serviços dependentes estão cientes da alteração. Assim é possível colaborar na alteração caso haja algum problema esperado, reduzindo a probabilidade de impactos não intencionais na produção. Como é muito provável que incidentes aconteçam em um ambiente dinâmico, a colaboração dos desenvolvedores durante um incidente é fundamental para a restauração rápida dos serviços.
Em avaliações pós-incidentes em que as alterações upstream são a causa raiz, é comum que o tempo de restauração dos serviços seja afetado pelo tempo necessário para identificar a alteração upstream problemática, junto com a equipe ou a pessoa proprietária do serviço. Pela lógica, reduzir o tempo necessário para identificar a alteração upstream que causa o problema reduz o tempo médio de restauração (MTTR) ao longo do tempo. Isso se torna mais difícil em uma arquitetura de acoplamento fraco, em que os serviços têm uma hierarquia de dependências rica e a causa raiz de um incidente pode estar em qualquer lugar da pilha. Tradicionalmente, os respondentes de incidentes vasculham logs ou registros de alterações para identificar uma alteração que possa ter causado um incidente. Em um ambiente dinâmico, é como desmontar um formigueiro para encontrar a formiga que mordeu você.
Na Atlassian, usamos o feed de atividades do Compass para reduzir o MTTR. Ele mostra todos os eventos dos sistemas upstream, junto com as informações da equipe responsável. Assim, o tempo de triagem tem uma redução significativa, pois a colaboração dos desenvolvedores ganha suporte durante os incidentes. Incidentes vão acontecer, mas identificar uma alteração upstream como a causa raiz de um incidente em tempo hábil é fundamental para garantir que o impacto seja mínimo e a restauração dos serviços, rápida.
O feed de atividades do Compass mostra todos os eventos dos sistemas upstream, reduzindo o tempo de triagem durante um incidente.
A produção da equipe é alta, mas nada é concluído
A mudança para uma arquitetura de acoplamento fraco é um dos principais ingredientes para a produtividade e a felicidade da equipe: ela traz a capacidade de se mover com independência e altos níveis de autonomia. Se não for controlada, a dispersão de software pode reverter alguns desses benefícios, resultando em uma equipe ocupada, mas improdutiva e infeliz. Uma reclamação comum ao falar com equipes de desenvolvimento é que “tudo funciona bem até precisarmos interagir com outra equipe”. Isso é amplificado quando a dispersão de software se torna um problema. Um ambiente que muda e se expande com rapidez reduz a capacidade dos desenvolvedores de acompanhar quem acionar para lidar com dependências upstream ou downstream, resultando em desaceleração e aumento da frustração para as equipes que estão tentando entregar em ritmo acelerado.
Imagine esta situação: o esquadrão Alpha e o esquadrão Beta movem um número idêntico de itens e pontos da história para “concluído” no Jira a cada semana. O esquadrão Alpha gasta 90% de seu trabalho enviando novas funções para a produção, enquanto o esquadrão Beta gasta 30% em novas funções e 70% tentando descobrir como interagir com os muitos serviços upstream dos quais eles dependem. Ambos os esquadrões têm o mesmo nível de produção, mas é provável que apenas o Alpha seja considerado produtivo. A dispersão de software aumenta a necessidade de colaboração entre as equipes. Identificar formas inteligentes de as equipes autônomas interagirem sob demanda é fundamental para liberar o poder de um ambiente de acoplamento fraco.
Em um ambiente dinâmico e em rápido crescimento, a capacidade de autoatendimento das informações é importante para a produtividade e a felicidade da equipe. Uma maneira de conseguir isso é implementar um catálogo centralizado de componentes de software com gerenciamento descentralizado; é um catálogo centralizado em que cada equipe é responsável por criar e atualizar os serviços de que é proprietária. Os ambientes tradicionais costumam ter um catálogo centralizado que é gerenciado por uma equipe ou função específica. Mas ele não é suficiente para acompanhar a taxa de alteração em um ambiente distribuído, resultando em equipes criando wikis paralelas sobre com quem e como interagir. Na Atlassian, descobrimos que uma abordagem descentralizada reduz o trabalho invisível e o desperdício entre as equipes, melhora os recursos de autoatendimento e cria um ambiente de interação sob demanda. Dominar a dispersão de software ao permitir o autoatendimento de informações sobre dependências upstream e downstream é uma excelente maneira de melhorar a produtividade da equipe com efeitos complementares na felicidade e no engajamento da equipe.
O Compass oferece um local central para informações específicas dos desenvolvedores sobre os componentes de software de que são proprietários e dos quais dependem.
O gerenciamento de alterações se torna o gargalo
Outro sinal importante da dispersão do software é quando as funções de governança, como gerenciamento de alterações e segurança cibernética, se tornam cada vez mais um gargalo para a entrega de alterações nos sistemas de produção. Essas funções desempenham um papel fundamental para garantir que os padrões e expectativas organizacionais sejam atendidos antes que as alterações sejam implementadas na produção. Contudo, elas se tornam menos eficazes à medida que a dispersão do software entra em ação. Em um ambiente que sofre com a dispersão de software, as funções de governança ficam cada vez mais sobrecarregadas à medida que a taxa de alteração aumenta, criando um backlog de alterações e solicitações a serem analisadas, o que atrasa as implementações na produção. O relatório State of DevOps de 2022 constatou que 56% dos entrevistados acham que os processos de segurança de software de sua empresa retardam o processo de desenvolvimento.
O ideal é que as práticas de segurança sejam incorporadas aos processos de desenvolvimento, mas, na realidade, muitas empresas têm pessoas revisando as alterações antes da implementação da produção. Essa situação não é efetiva na escala exigida em um ambiente distribuído. Além de diminuir a capacidade da empresa de entregar alterações, ela pode resultar em atritos entre as equipes de desenvolvimento e as responsáveis por garantir que os padrões organizacionais sejam atendidos.
Em um ambiente que sofre com a dispersão de software, é fundamental permitir alta velocidade e, ao mesmo tempo, atingir os padrões organizacionais desejados em escala. Os indicadores de desempenho automatizados (ou semiautomatizados) são uma ótima maneira de comunicar padrões organizacionais e são uma forma não intrusiva de inspecionar a conformidade em todo o ambiente. Usamos o Compass na Atlassian para definir padrões e expectativas de qualidade organizacional: o indicador de desempenho de cada componente de software dá à empresa transparência na conformidade. Equipes e líderes de engenharia podem adicionar padrões específicos de produtos aos indicadores de desempenho, possibilitando uma visão completa das expectativas e status de qualidade organizacionais para qualquer pessoa na empresa. Essa é uma alteração significativa das verificações de governança e conformidade no final de um ciclo de entrega para a definição de expectativas com antecedência, permitindo as equipes sigam os padrões durante todo o processo de desenvolvimento. As equipes de governança podem definir expectativas em um ambiente dinâmico, enquanto as equipes de entrega têm a oportunidade de entender e atender aos requisitos durante o ciclo de entrega. Como o impacto da dispersão de software pode ser prejudicial tanto para as equipes de entrega de software como para as equipes de governança, os indicadores de desempenho oferecem uma oportunidade de dominar a dispersão.
O indicador de desempenho do Compass é usado para entender a integridade dos componentes de software, de acordo com um conjunto de expectativas definidas.
Conclusão...
Não há solução mágica para controlar a dispersão de software. No entanto, o sucesso a longo prazo tem por base a identificação e a abordagem precoces dos impactos da dispersão de software. Alguns dos primeiros indicadores da dispersão de software incluem diversos incidentes causados por alterações upstream ou downstream, equipes ocupadas que não atingem suas metas e gargalos de governança. A melhor maneira de identificar a dispersão de software é falar com os desenvolvedores e entender os desafios que eles estão enfrentando.
A Atlassian desenvolveu o Compass para ajudar a controlar a dispersão de software por meio do gerenciamento da complexidade das arquiteturas distribuídas conforme elas escalam. É uma plataforma de experiência de desenvolvedor extensível que reúne informações desconectadas sobre todos os resultados de engenharia e colaboração da equipe em local central e pesquisável.
Compartilhar este artigo
Próximo tópico
Leitura recomendada
Marque esses recursos para aprender sobre os tipos de equipes de DevOps ou para obter atualizações contínuas sobre DevOps na Atlassian.