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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Matt Robenolt
September 28, 2017
Technology
230
0
Share
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
220
Everything is broken, and I don't know why. Python edition.
mattrobenolt
2
620
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が変える SaaS の競争原理と弁護士ドットコムのプロダクト戦略
bengo4com
1
2.8k
UIライブラリに依存しすぎないReact Native設計を目指して
grandbig
0
160
Class.new is all you need
riseshia
1
210
AgentCore Managed Harness を使ってみよう
yakumo
2
270
Good Enough Types: Heuristic Type Inference for Ruby
riseshia
1
350
バイブコーディングで3倍早く⚪⚪を作ってみた
samakada
0
200
国内外の生成AIセキュリティの最新動向 & AIガードレール製品「chakoshi」のご紹介 / Latest Trends in Generative AI Security (Domestic & International) & Introduction to AI Guardrail Product "chakoshi"
nttcom
4
1.6k
AWS Agent Registry の基礎・概要を理解する/aws-agent-registry-intro
ren8k
3
420
データを"持てない"環境でのアノテーション基盤設計
sansantech
PRO
1
160
「責任あるAIエージェント」こそ自社で開発しよう!
minorun365
10
2.5k
Microsoft 365 / Microsoft 365 Copilot : 自分の状態を確認する「ラベル」について
taichinakamura
0
410
Do Ruby::Box dream of Modular Monolith?
joker1007
1
370
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
Evolving SEO for Evolving Search Engines
ryanjones
0
180
Scaling GitHub
holman
464
140k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
380
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
110
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.2k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
360
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
520
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
23k
Marketing to machines
jonoalderson
1
5.2k
The Invisible Side of Design
smashingmag
303
52k
My Coaching Mixtape
mlcsv
0
110
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