Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Aprendendo com os erros
Search
Labcodes Software Studio
October 20, 2018
Programming
250
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
More Decks by Labcodes Software Studio
See All by Labcodes Software Studio
Sua aplicação web aguenta o tranco?
labcodes
0
63
Como Gerenciar Trocas de Contexto em tempo de Pandemia
labcodes
0
110
Débito Técnico: Porque isso vai estragar teu Software
labcodes
1
450
80 tiros não são disparados por engano
labcodes
0
100
Recompose - O lodash para React
labcodes
2
160
Usando recursos avançados da ORM do Django para consultas mais eficientes
labcodes
2
370
Making smarter queries with advanced ORM resources
labcodes
2
280
Explorando QuerySets do Django
labcodes
2
250
O que desenvolvedores deveriam aprender sobre design
labcodes
0
330
Other Decks in Programming
See All in Programming
新卒PdEのリアル
ryu1013
1
500
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
0
200
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
1
560
AWS DevOps Agentで インシデント対応をAIに任せたい
honmarkhunt
7
3k
モデルのリファクタリングが難しいと思ったら、そもそも複雑だったのはビジネス仕様だった ? / is-the-business-domain-the-real-complexity
hatsu38
0
290
AHC070解法紹介
eijirou
0
120
thread_parallel_with_free-threaded_Python_and_NumPy.pdf
riku_sakamoto
0
340
Snowflakeで業務アプリを作ろう。 Snowflakeのアプリ機能解説&実践ガイド
ayumu_yamaguchi
1
280
AIエージェント時代のコードレビューを設計する
nogu66
6
2.7k
世界の中心で、AI(App Intents)をさけぶ ー App Intents中心設計の実践ガイド
touyou
0
590
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
220
Heart of Swift Concurrency
koher
0
880
Featured
See All Featured
First, design no harm
axbom
PRO
2
1.3k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.1k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
350
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
520
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
500
What does AI have to do with Human Rights?
axbom
PRO
1
2.4k
Docker and Python
trallard
47
4.2k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
610
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
330
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