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
0
180
I am bad at my job.
App Academy - September 28th 2017
Matt Robenolt
September 28, 2017
Tweet
Share
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
180
Everything is broken, and I don't know why. Python edition.
mattrobenolt
2
550
Varnish: How We Do It
mattrobenolt
1
210
Everything is broken, and I don't know why.
mattrobenolt
7
1.5k
Cheating Your Way to Webscale
mattrobenolt
13
1.3k
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.2k
Other Decks in Technology
See All in Technology
クラウドサービス事業者におけるOSS
tagomoris
3
960
N=1から解き明かすAWS ソリューションアーキテクトの魅力
kiiwami
0
140
2/18/25: Java meets AI: Build LLM-Powered Apps with LangChain4j
edeandrea
PRO
0
150
EDRの検知の仕組みと検知回避について
chayakonanaika
4
1.7k
SA Night #2 FinatextのSA思想/SA Night #2 Finatext session
satoshiimai
1
150
データマネジメントのトレードオフに立ち向かう
ikkimiyazaki
6
1.2k
Share my, our lessons from the road to re:Invent
naospon
0
110
Reading Code Is Harder Than Writing It
trishagee
2
110
Autonomous Database Serverless 技術詳細 / adb-s_technical_detail_jp
oracle4engineer
PRO
17
45k
現場で役立つAPIデザイン
nagix
35
13k
「海外登壇」という 選択肢を与えるために 〜Gophers EX
logica0419
0
920
Goで作って学ぶWebSocket
ryuichi1208
3
2.3k
Featured
See All Featured
A Philosophy of Restraint
colly
203
16k
Into the Great Unknown - MozCon
thekraken
35
1.6k
The World Runs on Bad Software
bkeepers
PRO
67
11k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
27
1.6k
Building Applications with DynamoDB
mza
93
6.2k
Designing for humans not robots
tammielis
250
25k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
21
2.5k
Side Projects
sachag
452
42k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.3k
GraphQLとの向き合い方2022年版
quramy
44
13k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Fontdeck: Realign not Redesign
paulrobertlloyd
83
5.4k
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