Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Aprendendo com os erros

Aprendendo com os erros

Técnicas de como resolver erros em produção e como evitar que eles aconteçam

Avatar for Labcodes Software Studio

Labcodes Software Studio

October 20, 2018
Tweet

More Decks by Labcodes Software Studio

Other Decks in Programming

Transcript

  1. Quem sou? Luiz Braga github.com/luizbraga Cientista da Computação pela UFRPE

    Desenvolvedor na Labcodes Ex-malabarista Defensor de Azeroth nas horas vagas
  2. O que veremos? • Pânico em produção • Testes falhando

    • Falta de monitoramento • Uns macacos loucos
  3. Primeira semana Usuários recebendo Erro 500 em ação específica Planejamento

    de nova funcionalidade Não sabemos o que os usuários acessam
  4. Segunda semana O erro 500 continua Não conseguimos reproduzir o

    erro Alguns usuários reclamam que não estão recebendo email
  5. Terceira semana O erro 500 continua Usuários continuam sem receber

    email Tela de detalhes demorando para carregar Final de sprint, nova funcionalidade foi criada
  6. Quarta semana O erro 500 continua, junto com o erro

    de email Tela demorando para carregar O desenvolvedor mais experiente entrou de férias De repente, todos os dados da tabela sumiram!
  7. Primeira semana Usuários recebendo Erro 500 em ação específica Planejamento

    de nova funcionalidade Não sabemos o que os usuários acessam
  8. Parar o sangramento • Erro 500 ◦ Error tracking •

    Não sabemos o que os usuários acessam ◦ Rastreamento de ação
  9. Django Log Request ID Rastreamento de requests do usuário Criação

    de ID por sessão de usuário github.com/dabapps/django-log-request-id
  10. Segunda semana O erro 500 continua Não conseguimos reproduzir o

    erro Alguns usuários reclamam que não estão recebendo email
  11. Parar o sangramento • Usuários não recebendo email ◦ Tarefa

    atômica ◦ Boas práticas de tarefas assíncronas
  12. Terceira semana O erro 500 continua Usuários continuam sem receber

    email Tela de detalhes demorando para carregar Final de sprint, nova funcionalidade foi criada
  13. Parar o sangramento • Tela demorando para carregar ◦ Melhoria

    nas queries do Django ◦ Paginação ◦ Indexação? ◦ Cache
  14. Django select_related Fetch em um único batch todos os dados

    de relacionamento Utilizado para 1-N e 1-1 Não precisa consultar no banco toda vez que precisar de dados do relacional https://docs.djangoproject.com/pt-br/2.1/ref/models/querysets/#select-related
  15. Django prefetch_related Similar ao select_related Utilizado para N-N e N-1

    Diminuição da quantidade de consultas feitas no banco https://docs.djangoproject.com/pt-br/2.1/ref/models/querysets/#prefetch-related
  16. Indexação • Diminuição utilização de recurso • Melhor tempo de

    resposta • Exemplo: ◦ Updates no MongoDB sem index
  17. Quarta semana O erro 500 continua, junto com o erro

    de email Tela demorando para carregar O desenvolvedor mais experiente entrou de férias De repente, todos os dados da tabela sumiram!
  18. Parar o sangramento • Todos os dados da tabela foram

    deletados ◦ Backup! ◦ Criação de réplicas ◦ EBS • Sem backup ainda tem esperança
  19. Melhorias • Nova funcionalidade criada ◦ Ambiente de QA •

    O desenvolvedor mais experiente entrou de férias ◦ Compartilhar experiência
  20. Compartilhar experiência • Independência do time • Revisão de Pull

    Request é uma ótima prática • Evolução do processo
  21. Melhorias • Criação de novos logs • Persistência de Log

    ◦ AWS: CloudWatch ◦ NoSQL Database ◦ Log file • Extração de valores do log
  22. Simule! • Simulação falhas no sistema • Crazy Monkey ◦

    E se o banco for deletado? ◦ E se o deploy automático não funcionar? ◦ E se o github parar?
  23. Por que fazer isso? • Aprendizado a partir dos erros

    • Evolução do projeto ◦ Melhoria do processo ◦ Qualidade! • O erro humano NUNCA é a causa raiz
  24. Comece pelo começo • Mudança de cultura é difícil •

    Pequenos passos ◦ Entenda sua dor ◦ Criação de log mais detalhado já é um início • Vinta Software Dev Checklist ◦ devchecklists.com