$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Aprendendo com os erros
Search
Labcodes Software Studio
October 20, 2018
Programming
3
210
Aprendendo com os erros
Técnicas de como resolver erros em produção e como evitar que eles aconteçam
Labcodes Software Studio
October 20, 2018
Tweet
Share
More Decks by Labcodes Software Studio
See All by Labcodes Software Studio
Sua aplicação web aguenta o tranco?
labcodes
0
30
Como Gerenciar Trocas de Contexto em tempo de Pandemia
labcodes
0
72
Débito Técnico: Porque isso vai estragar teu Software
labcodes
1
400
80 tiros não são disparados por engano
labcodes
0
80
Recompose - O lodash para React
labcodes
2
120
Usando recursos avançados da ORM do Django para consultas mais eficientes
labcodes
2
310
Making smarter queries with advanced ORM resources
labcodes
2
240
Explorando QuerySets do Django
labcodes
2
210
O que desenvolvedores deveriam aprender sobre design
labcodes
0
280
Other Decks in Programming
See All in Programming
WebRTC、 綺麗に見るか滑らかに見るか
sublimer
1
160
Microservices rules: What good looks like
cer
PRO
0
1.2k
開発に寄りそう自動テストの実現
goyoki
1
840
30分でDoctrineの仕組みと使い方を完全にマスターする / phpconkagawa 2025 Doctrine
ttskch
3
810
20251127_ぼっちのための懇親会対策会議
kokamoto01_metaps
2
430
認証・認可の基本を学ぼう後編
kouyuume
0
180
【Streamlit x Snowflake】データ基盤からアプリ開発・AI活用まで、すべてをSnowflake内で実現
ayumu_yamaguchi
1
120
안드로이드 9년차 개발자, 프론트엔드 주니어로 커리어 리셋하기
maryang
1
110
DSPy Meetup Tokyo #1 - はじめてのDSPy
masahiro_nishimi
1
160
ViewファーストなRailsアプリ開発のたのしさ
sugiwe
0
440
ソフトウェア設計の課題・原則・実践技法
masuda220
PRO
26
22k
ZOZOにおけるAI活用の現在 ~モバイルアプリ開発でのAI活用状況と事例~
zozotech
PRO
8
5.5k
Featured
See All Featured
Rails Girls Zürich Keynote
gr2m
95
14k
Writing Fast Ruby
sferik
630
62k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Producing Creativity
orderedlist
PRO
348
40k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3k
Music & Morning Musume
bryan
46
7k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
1k
Statistics for Hackers
jakevdp
799
230k
The World Runs on Bad Software
bkeepers
PRO
72
12k
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.1k
Transcript
None
Quem sou? Luiz Braga github.com/luizbraga Cientista da Computação pela UFRPE
Desenvolvedor na Labcodes Ex-malabarista Defensor de Azeroth nas horas vagas
Aprendendo com os erros
O que veremos? • Pânico em produção • Testes falhando
• Falta de monitoramento • Uns macacos loucos
Era uma vez...
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
Segunda semana O erro 500 continua Não conseguimos reproduzir o
erro Alguns usuários reclamam que não estão recebendo email
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
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!
None
O que poderia ajudar?
Parando o sangramento
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
Parar o sangramento • Erro 500 ◦ Error tracking •
Não sabemos o que os usuários acessam ◦ Rastreamento de ação
Error Tracking • Sentry ◦ sentry.io ◦ github.com/getsentry/sentry-python https://docs.sentry.io/platforms/python/django/
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
Segunda semana O erro 500 continua Não conseguimos reproduzir o
erro Alguns usuários reclamam que não estão recebendo email
Parar o sangramento • Usuários não recebendo email ◦ Tarefa
atômica ◦ Boas práticas de tarefas assíncronas
Tarefas atômicas
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
Parar o sangramento • Tela demorando para carregar ◦ Melhoria
nas queries do Django ◦ Paginação ◦ Indexação? ◦ Cache
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
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
Indexação • Diminuição utilização de recurso • Melhor tempo de
resposta • Exemplo: ◦ Updates no MongoDB sem index
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!
Parar o sangramento • Todos os dados da tabela foram
deletados ◦ Backup! ◦ Criação de réplicas ◦ EBS • Sem backup ainda tem esperança
Melhorias • Nova funcionalidade criada ◦ Ambiente de QA •
O desenvolvedor mais experiente entrou de férias ◦ Compartilhar experiência
Compartilhar experiência • Independência do time • Revisão de Pull
Request é uma ótima prática • Evolução do processo
Melhorias • Criação de novos logs • Persistência de Log
◦ AWS: CloudWatch ◦ NoSQL Database ◦ Log file • Extração de valores do log
Deve-se sempre buscar a melhoria
E se tudo estiver bem?
Teste! Sistemas são caóticos! Procure sempre chegar no limite Há
sempre uma melhoria para ser feita
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?
Por que fazer isso? • Aprendizado a partir dos erros
• Evolução do projeto ◦ Melhoria do processo ◦ Qualidade! • O erro humano NUNCA é a causa raiz
Como implementar tudo isso?
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
Boilerplate em Django github.com/luizbraga/django-monitoring-boilerplate
Full-stack Developers lab.codes/devpleno Newsletter bit.ly/labcodesnews