Promova a confiabilidade no início do ciclo de vida do desenvolvimento
As equipes geralmente não pensam em confiabilidade até o final do ciclo de vida de desenvolvimento de software (CVDS). Com a complexidade e o rápido desenvolvimento dos aplicativos modernos, esse processo não é mais escalável ou totalmente eficaz. Ele não apenas cria um obstáculo para a produção e diminui os ciclos de lançamento, mas também não consegue encontrar falhas inesperados presentes nos sistemas modernos.
A solução é fazer o shift left para que o teste de confiabilidade seja feito em todo o CVDS pelo time de controle de qualidade, não apenas no final. Ao planejar um novo recurso ou serviço, começamos a planejar a experiência do cliente que queremos fornecer já na fase de levantamento de requisitos. Os gerentes de produto definem as expectativas para a qualidade do serviço antes do início do desenvolvimento, os engenheiros de disponibilidade, testadores e os desenvolvedores de software definem métricas para medir e rastrear a conformidade com esses requisitos e, em seguida, testamos continuamente nossa capacidade de atender a esses requisitos durante todo o desenvolvimento.
Ao priorizar a confiabilidade desde o início, o foco em melhorar a confiabilidade naturalmente se estende a cada equipe envolvida no processo de desenvolvimento. Isso nos dá um início antecipado para encontrar e resolver defeitos, incentiva boas práticas de desenvolvimento e reduz o risco de problemas chegarem à produção. Isso também traz benefícios financeiros, pois os bugs são mais caros para serem corrigidos posteriormente no CVDS.
Adote práticas que apoiem a cultura de confiabilidade
A cultura é um passo importante, mas também precisamos de ferramentas que nos ajudem a colocar a cultura em prática. Precisamos de uma maneira de garantir que nossas equipes de resposta estejam preparadas para lidar com incidentes, nossos sistemas sejam resilientes a falhas técnicas e nosso foco em práticas de confiabilidade tenham um claro retorno sobre o investimento (ROI) para o negócio. A forma como fazemos isso é com a Engenharia do Caos.
A Engenharia do Caos é a prática de injetar deliberadamente falhas em um sistema, observando como o sistema responde, usando essas observações para melhorar sua confiabilidade e validando que nossos mecanismos de resiliência funcionam. Podemos usar a Engenharia do Caos para validar sistemas e processos organizacionais. Isso inclui gerenciamento e resposta a incidentes, recuperação de desastres e processos de solução de problemas.
A Engenharia do Caos ajuda as equipes a testar proativamente as ameaças à confiabilidade e abordá-las no início do processo de desenvolvimento, reduzindo o risco de incidentes ou interrupções. Isso inclui testar planos de resposta a incidentes, validar se os sistemas são tolerantes a falhas para um redundância ou de backup e muitos outros cenários.
Pratique
Um dos maiores desafios na adoção de uma cultura de confiabilidade é manter a prática. A confiabilidade não é algo que pode ser alcançado uma vez: ela deve ser mantida e validada regularmente. A melhor maneira de fazer isso é testando sistemas e processos de forma regular e proativa usando a Engenharia do Caos. Na verdade, as equipes que executam consistentemente experimentos de caos têm níveis mais altos de disponibilidade do que as equipes que nunca realizaram um experimento ou que executam experimentos ad hoc.
Como a Engenharia do Caos ajuda a construir uma cultura de confiabilidade? A resposta é ajudar as equipes a testar suas suposições sobre seus sistemas, buscar ativamente maneiras de melhorar a confiabilidade e garantir que os sistemas sejam resilientes às condições de produção. Uma estratégia comum para fazer isso é com os GameDays (recurso da ferramenta Gremlin), que são incidentes deliberadamente planejados em que uma equipe de engenheiros que possui um aplicativo ou serviço (junto com outras partes interessadas, como líderes de equipe e gerentes de produto) se reúne para executar um experimento de caos no serviço. A equipe executa o experimento, observa o serviço para ver como ele responde e usa seus insights para melhorar a sua resiliência. Eles então automatizam o experimento, adicionam-no à sua biblioteca de experimentos e executam esses experimentos continuamente para verificar se seus sistemas permanecem resilientes.
Um GameDay típico dura entre 2 e 4 horas e envolve os seguintes membros da equipe:
- Um membro que lidera o GameDay e decide quando executar ou abortar experimentos (o “Dono”).
- Um membro que executa os experimentos (o “Coordenador”).
- Um membro que planeja os experimentos, define a hipótese (o que o experimento é projetado para testar) e registra os resultados (o “Testador”).
- Um ou mais membros que coletam dados (normalmente de uma ferramenta de monitoramento ou observabilidade) e correlacionam os efeitos do experimento com seus dados (o “Observador”).
Para ajudar a construir uma prática de confiabilidade, execute o GameDays regularmente. Equipes com alta disponibilidade tendem a realizar experimentos semanalmente, mensalmente ou trimestralmente. Em geral, a execução de GameDays mais frequentes pode ajudá-lo a atingir suas metas de confiabilidade mais rapidamente, portanto, considere agendar GameDays semanais ou quinzenais.
Quando suas equipes estiverem confortáveis com a execução de incidentes planejados, considere adicionar incidentes não planejados. Estes são chamados de FireDrills. Como um GameDay, um FireDrill envolve o uso de Engenharia do Caos para simular falhas em um sistema. A diferença é que as equipes que respondem a um FireDrill não sabem que é um exercício. Isso faz com que eles reajam de maneira mais realista, como se fosse um incidente real, mas mantém a capacidade de parar e reverter o incidente, se necessário.
Os FireDrills são eficazes para ajudar as equipes:
- Medir o tempo de resposta e o tempo médio para resolução (TMR).
- Certificar de que os guias operacionais estejam atualizados.
- Pratique procedimentos de resposta a incidentes e sua base de conhecimento.
- Teste painéis de monitoramento, alertas e sistemas de plantão.
Recomendamos executar FireDrills semanalmente ou quinzenalmente, mas somente depois que sua equipe tiver praticado a execução de GameDays. Designe um líder que possa coordenar o FireDrill, de preferência um líder de equipe que entenda os sistemas que estão sendo atacados. Isso garante que alguém esteja sempre disponível para responder rapidamente se algo inesperado acontecer ou se o FireDrill precisar ser cancelado.
Aprenda com os erros
Incidentes vão acontecer, e tudo bem. Nenhum sistema é perfeito. Quando algo der errado, tome medidas corretivas e resolva a causa raiz o mais rápido possível. Então, quando seus sistemas estiverem operacionais, faça uma investigação e avaliação profunda de sua resposta. Investigue a causa raíz do problema, as etapas que a equipe executou para resolvê-lo, as métricas e outros dados de observabilidade que ajudaram a resolver o problema e o que a equipe fez para evitar que o problema se repetisse.