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
I am bad at my job.
Search
Matt Robenolt
September 28, 2017
Technology
240
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
I am bad at my job.
App Academy - September 28th 2017
Matt Robenolt
September 28, 2017
More Decks by Matt Robenolt
See All by Matt Robenolt
Everything is broken and I don't know why.
mattrobenolt
0
44
Everything is broken, and I don't know why. Python edition.
mattrobenolt
1
240
Everything is broken, and I don't know why. Python edition.
mattrobenolt
2
640
Varnish: How We Do It
mattrobenolt
1
240
Everything is broken, and I don't know why.
mattrobenolt
7
1.6k
Cheating Your Way to Webscale
mattrobenolt
13
1.4k
HTTP for Great Good
mattrobenolt
85
200k
Caching is Hard: Varnish @ Disqus
mattrobenolt
52
2.1M
Developing & Deploying "Large" Scale Web Applications
mattrobenolt
25
1.3k
Other Decks in Technology
See All in Technology
AIをフル活用してオンコール機能のプロトタイプを2日で作った話 / Building an AI-Powered On-Call Prototype in Just Two Days
nari_ex
0
160
5分でわかるDuckDB Quack
chanyou0311
4
280
勉強会企画をアプリで構造化してみた 〜そこで見えた、AIとの付き合い方〜 / I've structured a study group plan using an app.
pauli
0
200
背中から、背中へ /paying forward to community
naitosatoshi
0
190
小さいから、全部わかる。— 常駐AI "xangi" のすすめ
sugupoko
0
200
Agile and AI Redmine Japan 2026
hiranabe
4
550
Agentic AI 時代のテスト手法: Kiro とはじめるプロパティベーステスト (AWS Summit Japan 2026 | DEV212)
ymhiroki
0
140
技術・能力を向上する原理原則 #きのこセッションa #きのこ2026
bash0c7
0
190
サイバーエージェントにおけるAI推進戦略と変革への取り組み
shotatsuge
0
640
AIに障害切り分けを全部やってもらった。 。 。 。
estie
0
300
AWS Summit 2026で見えたSIerにとっての Amazon Quickの位置づけ
maf_0521
0
140
“ID沼入口” - 基本とセキュリティから始める、考え続けるためのID管理技術勉強会 告知&イントロ
ritou
0
330
Featured
See All Featured
Designing for Performance
lara
611
70k
Designing for Timeless Needs
cassininazir
1
260
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
180
Docker and Python
trallard
47
3.9k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
380
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
290
Prompt Engineering for Job Search
mfonobong
0
360
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Transcript
I am bad at my job. App Academy September 28th
2017 Matt Robenolt Matt
hello @mattrobenolt
Principal Software Engineer
This computer stuff is really hard.
None
#include <stdio.h> int main() { int i = 0; int
things[] = {10, 20}; for (; i < 3; i++) { printf("%d\n", things[i]); } return 0; }
#include <stdio.h> int main() { int i = 0; int
things[] = {10, 20}; for (; i < 3; i++) { printf("%d\n", things[i]); } return 0; } $ ./program
#include <stdio.h> int main() { int i = 0; int
things[] = {10, 20}; for (; i < 3; i++) { printf("%d\n", things[i]); } return 0; } $ ./program 10 20 619512036
#include <stdio.h> int main() { int i = 0; int
things[] = {10, 20}; for (; i < 3; i++) { printf("%d\n", things[i]); } return 0; } $ ./program 10 20 619512036 $ ./program 10 20 369033241
#include <stdio.h> int main() { int i = 0; int
things[] = {10, 20}; for (; i < 3; i++) { printf("%d\n", things[i]); } return 0; } Physical Memory Chip 0x0000 0x0004 4 bytes 0x0008 0x000C 0xFFFF
#include <stdio.h> int main() { int i = 0; int
things[] = {10, 20}; for (; i < 3; i++) { printf("%d\n", things[i]); } return 0; } Physical Memory Chip 0x0000 0x0004 4 bytes 0x0008 0x000C 0xFFFF 0x0000 (0)
#include <stdio.h> int main() { int i = 0; int
things[] = {10, 20}; for (; i < 3; i++) { printf("%d\n", things[i]); } return 0; } Physical Memory Chip 0x0000 0x0004 4 bytes 0x0008 0x000C 0xFFFF 0x000A (10) 0x0014 (20) 0x0000 (0)
#include <stdio.h> int main() { int i = 0; int
things[] = {10, 20}; for (; i < 3; i++) { printf("%d\n", things[i]); } return 0; } Physical Memory Chip 0x0000 4 bytes 0x0008 0x000C 0xFFFF 0x000A (10) 0x0014 (20) 0x0000 (0) 0x0004
#include <stdio.h> int main() { int i = 0; int
things[] = {10, 20}; for (; i < 3; i++) { printf("%d\n", things[i]); } return 0; } Physical Memory Chip 0x0000 4 bytes 0x0008 0x000C 0xFFFF 0x000A (10) 0x0014 (20) 0x0000 (0) 0x0004 “address of things” + (i * sizeof(int))
#include <stdio.h> int main() { int i = 0; int
things[] = {10, 20}; for (; i < 3; i++) { printf("%d\n", things[i]); } return 0; } Physical Memory Chip 0x0000 4 bytes 0x0008 0x000C 0xFFFF 0x000A (10) 0x0014 (20) 0x0000 (0) 0x0004 0x0004 + (0 * 4) == 0x0004 &0x0004 == 0x000A (10)
#include <stdio.h> int main() { int i = 0; int
things[] = {10, 20}; for (; i < 3; i++) { printf("%d\n", things[i]); } return 0; } Physical Memory Chip 0x0000 4 bytes 0x0008 0x000C 0xFFFF 0x000A (10) 0x0014 (20) 0x0001 (1) 0x0004
#include <stdio.h> int main() { int i = 0; int
things[] = {10, 20}; for (; i < 3; i++) { printf("%d\n", things[i]); } return 0; } Physical Memory Chip 0x0000 4 bytes 0x0008 0x000C 0xFFFF 0x000A (10) 0x0014 (20) 0x0001 (1) 0x0004 0x0004 + (1 * 4) == 0x0008 &0x0008 == 0x0014 (20)
#include <stdio.h> int main() { int i = 0; int
things[] = {10, 20}; for (; i < 3; i++) { printf("%d\n", things[i]); } return 0; } Physical Memory Chip 0x0000 4 bytes 0x0008 0x000C 0xFFFF 0x000A (10) 0x0014 (20) 0x0002 (2) 0x0004
#include <stdio.h> int main() { int i = 0; int
things[] = {10, 20}; for (; i < 3; i++) { printf("%d\n", things[i]); } return 0; } Physical Memory Chip 0x0000 4 bytes 0x0008 0x000C 0xFFFF 0x000A (10) 0x0014 (20) 0x0002 (2) 0x0004 0x0004 + (2 * 4) == 0x000C &0x000C == ???? ????
JavaScript is especially hard.
sentry $ find node_modules -type f | wc -l 36882
sentry $ du -hs node_modules 308M node_modules
function multiply() { var rv = 1; for (var i
= 0; i < arguments.length; i++) rv += arguments[i]; return rv; } > multiply(2, 2) <- 4
test('multiply 2 * 2 to equal 4', () => {
expect(multiply(2, 2)).toBe(4); }); 100% test coverage btw
> multiply(2, 2) <- 4
> multiply(2, 2) <- 4 > multiply() <- 1
> multiply(2, 2) <- 4 > multiply() <- 1 >
multiply(1, 1) <- 3
> multiply(2, 2) <- 4 > multiply() <- 1 >
multiply(1, 1) <- 3 > multiply(1, {}) <- "2[object Object]"
Shipping code is the worst.
window.Notification.requestPermission().then(function() { new Notification("I see you."); });
Yas, I did it!
I think my computer is broken.
Step 1:
Step 1: Acceptance
This is hard. But that’s ok.
Step 2:
Step 2: Self-awareness
You won’t know everything. You will make mistakes. But that’s
OK.
Step 3:
Step 3: Do your best
Learn from mistakes. assume the worst.
How to deal with production.
Bug-free code is very rare.
Respond quickly when things are broken.
Monitoring is good.
Meet Sentry.
Error reporting
window.Notification.requestPermission().then(function() { new Notification("I see you."); });
None
None
Context is good.
Questions? I may or may not have answers. @mattrobenolt github.com/mattrobenolt
sentry.io github.com/getsentry/sentry