Hacking the Human Perception

A presentation at Angular Denver in August 2019 in Denver, CO, USA by Christopher A DeMars

Slide 1

Slide 1

Hacking the Human Perception Chris DeMars ● @saltnburnem https://pixabay.com/en/brain-icon-human-background-idea-1710293/ Chris DeMars ● @saltnburnem 1 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 2

Slide 2

Chris DeMars Front-End Developer Chris DeMars ● @saltnburnem 2 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 3

Slide 3

That’s me! Google Developer Expert Microsoft MVP Oracle Groundbreaker Ambassador Internatonal Speaker Founder of Vuetroit Host of Tales From the Script πŸ’š Tattoos & Horror Chris DeMars ● @saltnburnem 3 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 4

Slide 4

Why Are We Here Chris? Chris DeMars ● @saltnburnem 4 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 5

Slide 5

Let’s Talk! Chris DeMars ● @saltnburnem 5 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 6

Slide 6

Let’s Talk! 1.) Auditing & Testing Chris DeMars ● @saltnburnem 5 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 7

Slide 7

Let’s Talk! 1.) Auditing & Testing 2.) Time to First Paint Chris DeMars ● @saltnburnem 5 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 8

Slide 8

Let’s Talk! 1.) Auditing & Testing 2.) Time to First Paint 3.) Time to First Byte Chris DeMars ● @saltnburnem 5 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 9

Slide 9

Let’s Talk! 1.) 2.) 3.) 4.) Auditing & Testing Time to First Paint Time to First Byte Time to First Interactive Chris DeMars ● @saltnburnem 5 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 10

Slide 10

Let’s Talk! 1.) 2.) 3.) 4.) 5.) Auditing & Testing Time to First Paint Time to First Byte Time to First Interactive Perceived Performance Chris DeMars ● @saltnburnem 5 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 11

Slide 11

Let’s Talk! 1.) Auditing & Testing 2.) Time to First Paint 3.) Time to First Byte 4.) Time to First Interactive 5.) Perceived Performance a.) Critical CSS Chris DeMars ● @saltnburnem 5 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 12

Slide 12

Let’s Talk! 1.) Auditing & Testing 2.) Time to First Paint 3.) Time to First Byte 4.) Time to First Interactive 5.) Perceived Performance a.) Critical CSS b.) Skeleton Screens Chris DeMars ● @saltnburnem 5 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 13

Slide 13

Let’s Talk! 1.) Auditing & Testing 2.) Time to First Paint 3.) Time to First Byte 4.) Time to First Interactive 5.) Perceived Performance a.) Critical CSS b.) Skeleton Screens c.) Fun Distractions Chris DeMars ● @saltnburnem 5 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 14

Slide 14

Performance? Chris DeMars ● @saltnburnem 6 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 15

Slide 15

Visibility of System Status https://www.nngroup.com/articles/ten-usability-heuristics/ Chris DeMars ● @saltnburnem 7 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 16

Slide 16

Visibility of System Status The system should always keep users informed about what is going on, through appropriate feedback within reasonable time. https://www.nngroup.com/articles/ten-usability-heuristics/ Chris DeMars ● @saltnburnem 7 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 17

Slide 17

Fast? Chris DeMars ● @saltnburnem 8 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 18

Slide 18

Fast? Chris DeMars ● @saltnburnem ! Quick Desktop Load 8 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 19

Slide 19

Fast? Chris DeMars ● @saltnburnem ! Quick Desktop Load ! Quick Mobile Load 8 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 20

Slide 20

Fast? Chris DeMars ● @saltnburnem ! Quick Desktop Load ! Quick Mobile Load ! Time 8 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 21

Slide 21

Chris DeMars ● @saltnburnem 9 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 22

Slide 22

Chris DeMars ● @saltnburnem 9 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 23

Slide 23

Chris DeMars ● @saltnburnem 10 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 24

Slide 24

Chris DeMars ● @saltnburnem 10 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 25

Slide 25

Minimal Requests? Chris DeMars ● @saltnburnem 11 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 26

Slide 26

Minimal Requests? Chris DeMars ● @saltnburnem ! How many? 11 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 27

Slide 27

Minimal Requests? Chris DeMars ● @saltnburnem ! How many? ! What does that mean? 11 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 28

Slide 28

Load Time? Chris DeMars ● @saltnburnem 12 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 29

Slide 29

Load Time? Chris DeMars ● @saltnburnem ! Desktop 12 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 30

Slide 30

Load Time? Chris DeMars ● @saltnburnem ! Desktop ! 3G 12 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 31

Slide 31

Load Time? Chris DeMars ● @saltnburnem ! Desktop ! 3G ! 4G 12 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 32

Slide 32

Load Time? Chris DeMars ● @saltnburnem ! Desktop ! 3G ! 4G ! 2G 12 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 33

Slide 33

Chris DeMars ● @saltnburnem 13 https://bit.ly/2Uc47xa πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 34

Slide 34

Performance Chris DeMars ● @saltnburnem 14 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 35

Slide 35

Performance on the front end # # Chris DeMars ● @saltnburnem 14 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 36

Slide 36

Addy Osmani @addyosmani #PerfMatters Chris DeMars ● @saltnburnem 15 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 37

Slide 37

User Centric Metrics Chris DeMars ● @saltnburnem 16 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 38

Slide 38

User Centric Metrics 1.) Is it happening? Chris DeMars ● @saltnburnem 16 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 39

Slide 39

User Centric Metrics 1.) Is it happening? 2.) Is it useful? Chris DeMars ● @saltnburnem 16 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 40

Slide 40

User Centric Metrics 1.) Is it happening? 2.) Is it useful? 3.) Is it useable? Chris DeMars ● @saltnburnem 16 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 41

Slide 41

User Centric Metrics 1.) Is it happening? 2.) Is it useful? 3.) Is it useable? 4.) Is it delightful? Chris DeMars ● @saltnburnem 16 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 42

Slide 42

Testing & Audits Chris DeMars ● @saltnburnem 17 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 43

Slide 43

Lighthouse Chris DeMars ● @saltnburnem 18 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 44

Slide 44

Chris DeMars ● @saltnburnem 19 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 45

Slide 45

Chris DeMars ● @saltnburnem 19 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 46

Slide 46

WebPageTest Chris DeMars ● @saltnburnem 20 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 47

Slide 47

Chris DeMars ● @saltnburnem 21 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 48

Slide 48

Chris DeMars ● @saltnburnem 21 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 49

Slide 49

Chris DeMars ● @saltnburnem 22 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 50

Slide 50

Chris DeMars ● @saltnburnem 23 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 51

Slide 51

Chris DeMars ● @saltnburnem 24 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 52

Slide 52

Chris DeMars ● @saltnburnem 25 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 53

Slide 53

Chrome DevTools Chris DeMars ● @saltnburnem 26 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 54

Slide 54

Chris DeMars ● @saltnburnem 27 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 55

Slide 55

Chris DeMars ● @saltnburnem 27 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 56

Slide 56

Chris DeMars ● @saltnburnem 28 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 57

Slide 57

Chris DeMars ● @saltnburnem 28 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 58

Slide 58

Time to First Paint Chris DeMars ● @saltnburnem 29 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 59

Slide 59

Time to First Paint & Time to First Contentful Paint Chris DeMars ● @saltnburnem 30 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 60

Slide 60

Time to First Paint Chris DeMars ● @saltnburnem 31 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 61

Slide 61

Time to First Paint The point where the browser renders anything to the screen. Chris DeMars ● @saltnburnem 31 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 62

Slide 62

Time to First Contentful Paint Chris DeMars ● @saltnburnem 32 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 63

Slide 63

Time to First Contentful Paint The point where the browser renders the first bit of content from the DOM. Chris DeMars ● @saltnburnem 32 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 64

Slide 64

First Paint 1.4s First Contentful Paint 1.4s Chris DeMars ● @saltnburnem 33 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 65

Slide 65

First Paint 1.4s First Contentful Paint 1.4s Chris DeMars ● @saltnburnem 33 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 66

Slide 66

Chris DeMars ● @saltnburnem 34 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 67

Slide 67

Time to First Meaningful Paint Chris DeMars ● @saltnburnem 35 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 68

Slide 68

https://bit.ly/2HVcwvP Chris DeMars ● @saltnburnem 36 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 69

Slide 69

Time to First Byte Chris DeMars ● @saltnburnem 37 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 70

Slide 70

Chris DeMars ● @saltnburnem 38 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 71

Slide 71

Chris DeMars ● @saltnburnem 38 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 72

Slide 72

https://www.keycdn.com/support/what-is-ttfb/ Chris DeMars ● @saltnburnem 39 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 73

Slide 73

TTFB 230ms Chris DeMars ● @saltnburnem 40 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 74

Slide 74

Time to Interactive Chris DeMars ● @saltnburnem 41 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 75

Slide 75

Chris DeMars ● @saltnburnem 42 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 76

Slide 76

Chris DeMars ● @saltnburnem 42 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 77

Slide 77

Why measure DOMContentLoaded? Chris DeMars ● @saltnburnem 43 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 78

Slide 78

Critical Rendering Path Chris DeMars ● @saltnburnem 43 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 79

Slide 79

Chris DeMars ● @saltnburnem 44 https://bit.ly/2JazYc6 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 80

Slide 80

Perceived Performance Chris DeMars ● @saltnburnem 45 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 81

Slide 81

Perceived performance is a measure of how quick a user thinks your site is, and that’s often more important than its true speed. - Matt West Chris DeMars ● @saltnburnem 46 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 82

Slide 82

Critical CSS Chris DeMars ● @saltnburnem 47 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 83

Slide 83

https://www.smashingmagazine.com/2015/08/understanding-critical-css/ Chris DeMars ● @saltnburnem 48 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 84

Slide 84

https://www.smashingmagazine.com/2015/08/understanding-critical-css/ Chris DeMars ● @saltnburnem 49 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 85

Slide 85

Chris DeMars ● @saltnburnem 50 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 86

Slide 86

🌟 Penthouse criticalCSS 🌟 Critical 🌟 Chris DeMars ● @saltnburnem 50 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 87

Slide 87

Skeleton Screens Chris DeMars ● @saltnburnem 51 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 88

Slide 88

β€œA skeleton screen is essentially a blank version of a page into which information is gradually loaded.” - Luke Wroblewski Chris DeMars ● @saltnburnem 52 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 89

Slide 89

β€œUsers don’t care about performance stats in terminal, they do care about what they see in front of them.” - Callum Hart Chris DeMars ● @saltnburnem 53 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 90

Slide 90

Chris DeMars ● @saltnburnem 54 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 91

Slide 91

Chris DeMars ● @saltnburnem 55 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 92

Slide 92

Chris DeMars ● @saltnburnem 56 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 93

Slide 93

Chris DeMars ● @saltnburnem 57 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 94

Slide 94

β€œDesign for operational transparency by providing progress-UX that’s robust and meaningful.” - Nick Babich Chris DeMars ● @saltnburnem 58 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 95

Slide 95

Great Info! https://www.mobify.com/insights/ designing-appearance-speed/ Chris DeMars ● @saltnburnem 59 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 96

Slide 96

Fun Distractions Chris DeMars ● @saltnburnem 60 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 97

Slide 97

Offer distractions so users don’t get bored! Chris DeMars ● @saltnburnem 61 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 98

Slide 98

Offer distractions so users don’t get bored! Chris DeMars ● @saltnburnem 61 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 99

Slide 99

What did we learn? Chris DeMars ● @saltnburnem 62 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 100

Slide 100

What did we learn? βœ… Performance matters Chris DeMars ● @saltnburnem 62 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 101

Slide 101

What did we learn? βœ… Performance matters βœ… How to test performance on the front end Chris DeMars ● @saltnburnem 62 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 102

Slide 102

What did we learn? βœ… Performance matters βœ… How to test performance on the front end βœ… Different metrics we can measure Chris DeMars ● @saltnburnem 62 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 103

Slide 103

What did we learn? βœ… Performance matters βœ… How to test performance on the front end βœ… Different metrics we can measure βœ… Perceived performance Chris DeMars ● @saltnburnem 62 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 104

Slide 104

Chris DeMars ● @saltnburnem 63 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 105

Slide 105

Chris DeMars ● @saltnburnem 63 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 106

Slide 106

Resources https://goo.gl/dqxsXi Chris DeMars ● @saltnburnem 64 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 107

Slide 107

Jeremy Wagner @malchata Chris DeMars ● @saltnburnem 65 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 108

Slide 108

Jeremy Wagner @malchata Chris DeMars ● @saltnburnem 65 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 109

Slide 109

Responsible JavaScript: Part 1 https://bit.ly/2uwST7U Part 2 https://bit.ly/2K5zZO2 Chris DeMars ● @saltnburnem 66 πŸ’š #DeveloperCommunity πŸ”#AngularDenver

Slide 110

Slide 110

Thanks! Chris DeMars ● @saltnburnem Chris DeMars ● @saltnburnem πŸ’š #DeveloperCommunity πŸ”#AngularDenver