Como equipes ágeis podem dar suporte ao gerenciamento de incidentes

Desenvolvedores têm a responsabilidade de ajudar a resolver incidentes. Aqui está o seu guia para um papel de sucesso na sala de guerra

Author Photo
6:00 pm - 06 de março de 2020

Ninguém gosta de ser acordado no meio da noite ou ter um fim de semana interrompido por causa de um incidente grave que atrapalha a confiabilidade ou o desempenho do aplicativo que gerencia. Quando um aplicativo está realmente inoperante e afeta as operações comerciais, poucos desejam a pressão da sala de guerra.

Os desenvolvedores ágeis devem se concentrar na arrancada da sua obrigação e gastar o mínimo de tempo possível investigando as causas dos principais incidentes. No entanto, responder a grandes incidentes, fornecer suporte para resolver problemas e participar da análise de causa raiz do problema é responsabilidade de todos.

Na melhor das circunstâncias, as equipes de operações têm sistemas de monitoramento que detectam, alertam e resolvem problemas. A realidade é que os ambientes operacionais podem ter problemas fora do controle de todos, como violações de segurança, grandes interrupções na nuvem, problemas com serviços terceirizados ou grandes falhas na infraestrutura que interrompem as operações. Mesmo os processos ágeis mais robustos, os ciclos de vida de desenvolvimento de software ou as melhores práticas de devops não podem garantir que os aplicativos sejam isentos de riscos e 100% confiáveis.

Os engenheiros de operações e confiabilidade do site geralmente podem corrigir problemas comuns sem afetar a equipe de desenvolvimento. Problemas comuns podem ser resolvidos com a automação ou com a manutenção de runbooks que prescrevem como resolvê-los. Mas é provável que seja necessária a ajuda dos desenvolvedores para desvendar contratempos mais complexos ou menos frequentes. E há muitas maneiras de ajudar a impedir que problemas operacionais ocorram em primeiro lugar.

O gerenciamento de incidentes é um processo de negócios crítico

Atualmente, muitas organizações desenvolvem aplicativos de software como parte de produtos voltados para o cliente, experiências do cliente para dar suporte a serviços de negócios ou fluxos de trabalho para permitir que os funcionários cumpram suas tarefas. Quando esses aplicativos falham ou têm um desempenho ruim, podem ter implicações comerciais significativas, como perda de receita, custos não orçados, impactos na reputação da marca, atrasos no projeto e empobrecimento da moral dos funcionários.

Quando os aplicativos experimentam interrupções frequentes ou prolongadas, baixo desempenho ou erros inesperados, isso também reflete mal nas equipes de desenvolvimento de software. É improvável que os departamentos de TI que pesquisam funcionários e medem a satisfação do cliente recebam pontuações altas se aplicativos não confiáveis impactarem no trabalho das pessoas. Também é mais difícil para o gerenciamento de TI obter aumento de orçamento, treinamento, remuneração adicional ou outros benefícios se a organização achar que as equipes de desenvolvimento de software não podem liberar novos recursos de maneira confiável.

As equipes de desenvolvimento devem tomar medidas proativas para evitar problemas, fornecer suporte durante incidentes, participar da análise das causas principais e priorizar o trabalho para solucionar defeitos críticos. Vamos analisar essas responsabilidades com mais detalhes.

Priorize a qualidade ao desenvolver e liberar aplicativos

As equipes de desenvolvimento ágil geralmente concentram seus esforços no desenvolvimento e liberação de novos recursos, aprimorando as experiências do usuário e tratando de dívidas técnicas. As equipes que instituem práticas de devops, como os pipelines de CI/CD (integração contínua/entrega contínua), também devem deixar suas práticas de teste e automatizar a maioria dos testes para garantir que o novo código não interrompa a criação de software e que os testes automatizados sejam aprovados.

Os desenvolvedores e testadores da garantia de qualidade devem instituir práticas de codificação para garantir a confiabilidade dos aplicativos. As equipes de desenvolvimento também devem se associar às equipes de operações na configuração, automação e monitoramento da infraestrutura. As práticas recomendadas incluem:

  • Padronize e centralize o log de aplicativos e o tratamento de exceções para garantir que os problemas de aplicativos sejam rastreáveis.
  • Minimize o bloqueio de aplicativos e bancos de dados, o que pode criar gargalos, especialmente sob cargas mais pesadas.
  • Configure aplicativos, serviços e bancos de dados para alta confiabilidade e balanceie-os em várias zonas da nuvem.
  • Centralize o monitoramento e os alertas e procure proativamente variações de desempenho longitudinais.
  • Automatize procedimentos que reiniciam, aumentam e encerram serviços com base na demanda.

Por fim, é extremamente importante documentar a arquitetura e o código do aplicativo, pois é altamente provável que as pessoas que não estiveram envolvidas no desenvolvimento do aplicativo tenham responsabilidades para apoiá-lo. Mesmo quando o código é modular ou se usa microsserviços é vital deixar a documentação para desenvolvedores e engenheiros do site resolverem os problemas e melhorararem os aplicativos.

Esteja preparado para apoiar as equipes de resposta a incidentes

Antes que os incidentes ocorram, as equipes de desenvolvimento de software devem estabelecer protocolos e processos para oferecer melhor suporte às equipes de resposta a incidentes e aos engenheiros competentes do local:

  • Certifique-se de que os desenvolvedores de software entendam que fornecer suporte fora do horário das equipes de resposta faz parte de seu trabalho. Desenvolva políticas com recursos humanos, especialmente se houver regulamentos sobre o horário de folga ou se forem necessárias horas extras.
  • Publique agendas de plantão e forneça as ferramentas e dispositivos adequados para que os desenvolvedores estejam acessíveis quando necessário.
  • Identifique e documente quem são os especialistas no assunto, por aplicativo, serviço, banco de dados e outros componentes de software.
  • Prescreva o que os desenvolvedores devem ou não fazer para resolver grandes incidentes. Por exemplo, a maioria das organizações deseja que os desenvolvedores ajudem a diagnosticar, sugerir soluções alternativas e resolver incidentes, mas a correção e implantação de código geralmente não são recomendadas ou permitidas como parte da resposta a incidentes.
  • Esclareça e padronize o que, onde e como os desenvolvedores devem se comunicar durante e após um incidente.
  • Resolva incidentes e participe de salas de guerra.

Durante um incidente, os desenvolvedores de software devem ajudar a corrigir o problema e restaurar o serviço em um tempo mínimo. Depois que os desenvolvedores são chamados, deve-se supor que os engenheiros operacionais já tenham revisado e possivelmente descartado as preocupações relacionadas à infraestrutura e que os engenheiros de confiabilidade do site já tenham explorado uma lista de problemas comuns com o aplicativo.

Quando há um incidente grave, os gerentes de incidentes geralmente montam chamadas de ponte, sessões de bate-papo e salas de guerra físicas para montar uma equipe multidisciplinar para trabalhar em conjunto com o problema.

Os desenvolvedores chamados devem conhecer e seguir os protocolos de resposta e comunicação a incidentes estabelecidos para essas salas de guerra. Na sala de guerra, os desenvolvedores devem ser especialistas em aplicativos. Depois de revisar monitores, arquivos de log e outros alertas, eles devem fazer recomendações sobre os cursos de ação.

É essencial usar linguagem específica e separar fato e especulação. Tente evitar curvas erradas e atrasos adicionais que ocorrem quando as equipes de resposta buscam excessivamente sintomas que acabam sendo becos sem saída. Os desenvolvedores devem participar dessa colaboração até o gerente do incidente encerrar o problema ou descartar a necessidade de sua participação e os liberarem.

Identifique as causas principais e resolva os defeitos do aplicativo

Os incidentes graves são encerrados quando o aplicativo ou serviço volta às condições operacionais normais. Nesse ponto, na ITIL (Biblioteca de infraestrutura de tecnologia da informação), eles recebem problemas para que as equipes possam identificar as principais causas. O objetivo é realizar um diagnóstico completo de todos os problemas e circunstâncias subjacentes. O que causou o incidente? Quais fatores definiram a gravidade e magnitude do impacto nos negócios? Quais condições, considerando a duração e a despesa, foram necessárias para resolver o problema?

Depois que a causa raiz é determinada, as equipes ágeis devem atribuir um ou mais defeitos que podem tratar das principais causas, reduzir riscos ou diminuir os impactos nos negócios. As equipes de desenvolvimento podem ter diferentes definições e processos em relação aos defeitos em seus processos ágeis e no ciclo de vida de desenvolvimento de software. O mais crítico é que, quando problemas conhecidos criam problemas recorrentes ou causam grandes interrupções nos negócios, as equipes de desenvolvimento ágil e seus proprietários de produtos recebem esse feedback e priorizam melhorias.

Afinal, fornecer novos recursos por meio de software é apenas parte das responsabilidades de um desenvolvedor. Garantir que os aplicativos sejam confiáveis, seguros, tenham bom desempenho e tenham experiências positivas do usuário é onde as equipes realmente atendem às necessidades dos negócios.

Newsletter de tecnologia para você

Os melhores conteúdos do IT Forum na sua caixa de entrada.