Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
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
240
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
59
Como Gerenciar Trocas de Contexto em tempo de Pandemia
labcodes
0
100
Débito Técnico: Porque isso vai estragar teu Software
labcodes
1
440
80 tiros não são disparados por engano
labcodes
0
99
Recompose - O lodash para React
labcodes
2
150
Usando recursos avançados da ORM do Django para consultas mais eficientes
labcodes
2
360
Making smarter queries with advanced ORM resources
labcodes
2
270
Explorando QuerySets do Django
labcodes
2
240
O que desenvolvedores deveriam aprender sobre design
labcodes
0
320
Other Decks in Programming
See All in Programming
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
360
ローカルLLMでどこまでコードが書けるか -縮小版 / How much code can be written on a local LLM Shortened
kishida
2
190
The Bowling Game- From Imperative to Functional Programming - Part 1
philipschwarz
PRO
0
330
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
150
信頼性について考えてみる(SRE NEXT 2026 miniLT)
hayama17
0
200
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
150
AI がコードを書く時代における新卒エンジニアの仕事風景 (2026) / New Graduate Engineers in the Era of AI Coding (2026)
sushichan044
0
220
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
3
1.5k
なぜ関数型プログラミングで「型」と「証明」が語られるのか #fp_matsuri
kajitack
3
960
Claude Opus 4.6以後の受託開発エンジニアの変化(Claude Code開発ノウハウ大公開スペシャルbyクラスメソッド)
iidatakuma
1
790
作るコストが小さくなった時代 幸せに働くために改めて考えたいこと 〜エンジニアとして価値を出し続けるために注視している二分野〜
yuppeeng
0
110
吝嗇家のためのAI活用 / AI development for miser - ChatGPT + Issue Driven Development
tooppoo
0
190
Featured
See All Featured
Raft: Consensus for Rubyists
vanstee
141
7.6k
Side Projects
sachag
455
43k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
Speed Design
sergeychernyshev
33
1.9k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
190
Writing Fast Ruby
sferik
630
63k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
350
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
460
The Cost Of JavaScript in 2023
addyosmani
55
10k
Believing is Seeing
oripsolob
1
170
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