Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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
210
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
200
Everything is broken, and I don't know why. Python edition.
mattrobenolt
2
590
Varnish: How We Do It
mattrobenolt
1
220
Everything is broken, and I don't know why.
mattrobenolt
7
1.5k
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
ブロックテーマとこれからの WordPress サイト制作 / Toyama WordPress Meetup Vol.81
torounit
0
220
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
3.3k
AI/MLのマルチテナント基盤を支えるコンテナ技術
pfn
PRO
5
720
翻訳・対話・越境で強いチームワークを作ろう! / Building Strong Teamwork through Interpretation, Dialogue, and Border-Crossing
ar_tama
4
1.6k
freeeにおけるファンクションを超えた一気通貫でのAI活用
jaxx2104
3
600
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.3k
Multimodal AI Driving Solutions to Societal Challenges
keio_smilab
PRO
1
120
M5UnifiedとPicoRubyで楽しむM5シリーズ
kishima
0
110
Ryzen NPUにおけるAI Engineプログラミング
anjn
0
210
法人支出管理領域におけるソフトウェアアーキテクチャに基づいたテスト戦略の実践
ogugu9
1
100
Oracle Cloud Infrastructure:2025年11月度サービス・アップデート
oracle4engineer
PRO
1
110
Design System Documentation Tooling 2025
takanorip
1
920
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Six Lessons from altMBA
skipperchong
29
4.1k
Build The Right Thing And Hit Your Dates
maggiecrowley
38
3k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.4k
Fireside Chat
paigeccino
41
3.7k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.3k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.3k
How to train your dragon (web standard)
notwaldorf
97
6.4k
Embracing the Ebb and Flow
colly
88
4.9k
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