Slide 1

Slide 1 text

I am bad at my job. App Academy September 28th 2017 Matt Robenolt Matt

Slide 2

Slide 2 text

hello @mattrobenolt

Slide 3

Slide 3 text

Principal Software Engineer

Slide 4

Slide 4 text

This computer stuff is really hard.

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

#include int main() { int i = 0; int things[] = {10, 20}; for (; i < 3; i++) { printf("%d\n", things[i]); } return 0; }

Slide 7

Slide 7 text

#include int main() { int i = 0; int things[] = {10, 20}; for (; i < 3; i++) { printf("%d\n", things[i]); } return 0; } $ ./program

Slide 8

Slide 8 text

#include int main() { int i = 0; int things[] = {10, 20}; for (; i < 3; i++) { printf("%d\n", things[i]); } return 0; } $ ./program 10 20 619512036

Slide 9

Slide 9 text

#include 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

Slide 10

Slide 10 text

#include 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

Slide 11

Slide 11 text

#include 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)

Slide 12

Slide 12 text

#include 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)

Slide 13

Slide 13 text

#include 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

Slide 14

Slide 14 text

#include 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))

Slide 15

Slide 15 text

#include 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)

Slide 16

Slide 16 text

#include 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

Slide 17

Slide 17 text

#include 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)

Slide 18

Slide 18 text

#include 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

Slide 19

Slide 19 text

#include 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 == ???? ????

Slide 20

Slide 20 text

JavaScript is especially hard.

Slide 21

Slide 21 text

sentry $ find node_modules -type f | wc -l 36882 sentry $ du -hs node_modules 308M node_modules

Slide 22

Slide 22 text

function multiply() { var rv = 1; for (var i = 0; i < arguments.length; i++) rv += arguments[i]; return rv; } > multiply(2, 2) <- 4

Slide 23

Slide 23 text

test('multiply 2 * 2 to equal 4', () => { expect(multiply(2, 2)).toBe(4); }); 100% test coverage btw

Slide 24

Slide 24 text

> multiply(2, 2) <- 4

Slide 25

Slide 25 text

> multiply(2, 2) <- 4 > multiply() <- 1

Slide 26

Slide 26 text

> multiply(2, 2) <- 4 > multiply() <- 1 > multiply(1, 1) <- 3

Slide 27

Slide 27 text

> multiply(2, 2) <- 4 > multiply() <- 1 > multiply(1, 1) <- 3 > multiply(1, {}) <- "2[object Object]"

Slide 28

Slide 28 text

Shipping code is the worst.

Slide 29

Slide 29 text

window.Notification.requestPermission().then(function() { new Notification("I see you."); });

Slide 30

Slide 30 text

Yas, I did it!

Slide 31

Slide 31 text

I think my computer is broken.

Slide 32

Slide 32 text

Step 1:

Slide 33

Slide 33 text

Step 1: Acceptance

Slide 34

Slide 34 text

This is hard. But that’s ok.

Slide 35

Slide 35 text

Step 2:

Slide 36

Slide 36 text

Step 2: Self-awareness

Slide 37

Slide 37 text

You won’t know everything. You will make mistakes. But that’s OK.

Slide 38

Slide 38 text

Step 3:

Slide 39

Slide 39 text

Step 3: Do your best

Slide 40

Slide 40 text

Learn from mistakes. assume the worst.

Slide 41

Slide 41 text

How to deal with production.

Slide 42

Slide 42 text

Bug-free code is very rare.

Slide 43

Slide 43 text

Respond quickly when things are broken.

Slide 44

Slide 44 text

Monitoring is good.

Slide 45

Slide 45 text

Meet Sentry.

Slide 46

Slide 46 text

Error reporting

Slide 47

Slide 47 text

window.Notification.requestPermission().then(function() { new Notification("I see you."); });

Slide 48

Slide 48 text

No content

Slide 49

Slide 49 text

No content

Slide 50

Slide 50 text

Context is good.

Slide 51

Slide 51 text

Questions? I may or may not have answers. @mattrobenolt github.com/mattrobenolt sentry.io github.com/getsentry/sentry