Slide 1

Slide 1 text

developer_productivity == developer_joy // (really!) Holly Cummins Senior Principal Software Engineer Red Hat

Slide 2

Slide 2 text

@holly_cummins #RedHat

Slide 3

Slide 3 text

@holly_cummins #RedHat why are you smiling?

Slide 4

Slide 4 text

@holly_cummins #RedHat why are you smiling? work is not a place to be happy!

Slide 5

Slide 5 text

#RedHat @holly_cummins ΑΡΙΣΤΟΤΈΛΗΣ

Slide 6

Slide 6 text

#RedHat @holly_cummins «τελειοῖ δὲ τὴν ἐνέργειαν ἡἡδονή» ΑΡΙΣΤΟΤΈΛΗΣ

Slide 7

Slide 7 text

#RedHat @holly_cummins «Η ευχαρίστηση στην δουλειά βάζει την τελειότητα στην εργασία» ΑΡΙΣΤΟΤΈΛΗΣ

Slide 8

Slide 8 text

#RedHat @holly_cummins “Pleasure in the job puts perfection in the work.” Aristotle

Slide 9

Slide 9 text

#RedHat @holly_cummins joy has business value.

Slide 10

Slide 10 text

#RedHat @holly_cummins the science bit

Slide 11

Slide 11 text

#RedHat @holly_cummins piglet litters grow faster if they play more https://www.flickr.com/photos/tambako/8746156155

Slide 12

Slide 12 text

#RedHat @holly_cummins job satisfaction is the no. 1 predictor of organizational performance

Slide 13

Slide 13 text

@holly_cummins #RedHat research shows: fun is good for business.

Slide 14

Slide 14 text

@holly_cummins #RedHat research shows: fun is good for business.

Slide 15

Slide 15 text

#RedHat @holly_cummins https:/ /hbr.org/2012/01/positive-intelligence

Slide 16

Slide 16 text

#RedHat @holly_cummins “Your brain at positive is 31% more productive than your brain at negative, neutral or stressed. " https:/ /hbr.org/2012/01/positive-intelligence

Slide 17

Slide 17 text

#RedHat @holly_cummins

Slide 18

Slide 18 text

#RedHat @holly_cummins https:/ /www2.warwick.ac.uk/fac/soc/economics/staff/eproto/workingpapers/happinessproductivity.pdf

Slide 19

Slide 19 text

#RedHat @holly_cummins "Individuals [who just watched a comedy video] have approximately 12% greater productivity." https:/ /www2.warwick.ac.uk/fac/soc/economics/staff/eproto/workingpapers/happinessproductivity.pdf

Slide 20

Slide 20 text

@holly_cummins #RedHat so how do developers become productive?

Slide 21

Slide 21 text

@holly_cummins #RedHat so how do developers become productive? joyful?

Slide 22

Slide 22 text

@holly_cummins #RedHat lack of joy creeps up on us productivity

Slide 23

Slide 23 text

@holly_cummins #RedHat lack of joy creeps up on us

Slide 24

Slide 24 text

@holly_cummins #RedHat → productivity tip for the lazy, happy, developer get rid of boring stuff

Slide 25

Slide 25 text

@holly_cummins #RedHat → productivity tip for the lazy, happy, developer it’s probably waste get rid of boring stuff

Slide 26

Slide 26 text

@holly_cummins #RedHat

Slide 27

Slide 27 text

@holly_cummins #RedHat repetitive

Slide 28

Slide 28 text

@holly_cummins #RedHat meaningless repetitive

Slide 29

Slide 29 text

@holly_cummins #RedHat meaningless repetitive

Slide 30

Slide 30 text

@holly_cummins #RedHat low-value meaningless repetitive

Slide 31

Slide 31 text

@holly_cummins #RedHat low-value meaningless repetitive repetitive

Slide 32

Slide 32 text

@holly_cummins #RedHat low-value meaningless repetitive repetitive repetitive

Slide 33

Slide 33 text

@holly_cummins #RedHat low-value meaningless repetitive repetitive repetitive

Slide 34

Slide 34 text

@holly_cummins #RedHat low-value meaningless repetitive repetitive repetitive redundant

Slide 35

Slide 35 text

@holly_cummins #RedHat low-value meaningless repetitive repetitive repetitive repetitive redundant

Slide 36

Slide 36 text

@holly_cummins #RedHat repetitive low-value meaningless repetitive repetitive repetitive repetitive redundant

Slide 37

Slide 37 text

@holly_cummins #RedHat repetitive low-value meaningless repetitive repetitive repetitive repetitive redundant

Slide 38

Slide 38 text

@holly_cummins #RedHat manual handoffs

Slide 39

Slide 39 text

@holly_cummins #RedHat boilerplate code

Slide 40

Slide 40 text

@holly_cummins #RedHat manual status updates

Slide 41

Slide 41 text

@holly_cummins #RedHat meetings

Slide 42

Slide 42 text

#RedHat @holly_cummins “toil” SRE is a discipline dedicated to eliminating toil from ops because toil isn’t worth it.

Slide 43

Slide 43 text

@holly_cummins #RedHat → productivity tip for the lazy, happy, developer make computers do the hard work

Slide 44

Slide 44 text

@holly_cummins #RedHat → productivity tip for the lazy, happy, developer make computers do the boring stuff

Slide 45

Slide 45 text

@holly_cummins #RedHat (yet) computers don’t expect to have fun

Slide 46

Slide 46 text

@holly_cummins #RedHat automation revenge! (yet) computers don’t expect to have fun happy, lazy developer

Slide 47

Slide 47 text

@holly_cummins #RedHat bonus: making computers do stuff is really fun

Slide 48

Slide 48 text

@holly_cummins #RedHat → productivity tip for the lazy, happy, developer automate all the things

Slide 49

Slide 49 text

@holly_cummins #RedHat what should be automated? - tasks that are error-prone - tasks that people can do half-asleep

Slide 50

Slide 50 text

@holly_cummins #RedHat

Slide 51

Slide 51 text

@holly_cummins #RedHat you can do better than bash

Slide 52

Slide 52 text

@holly_cummins #RedHat there are lots of ways you can do better than bash

Slide 53

Slide 53 text

@holly_cummins #RedHat you can do a lot better

Slide 54

Slide 54 text

@holly_cummins #RedHat → productivity tip for the lazy, happy, developer make stuff easy to find

Slide 55

Slide 55 text

@holly_cummins #RedHat adding developer experience improvements here is easy

Slide 56

Slide 56 text

@holly_cummins #RedHat

Slide 57

Slide 57 text

@holly_cummins #RedHat bonus: templates automate all the bits needed to start a new project (CI, build, boilerplate code …)

Slide 58

Slide 58 text

@holly_cummins #RedHat → productivity tip for the lazy, happy, developer go beyond infrastructure automation automate knowledge

Slide 59

Slide 59 text

#RedHat @holly_cummins

Slide 60

Slide 60 text

#RedHat @holly_cummins Guillaume, my CI was red. Is there a known failure in the vertx suite?

Slide 61

Slide 61 text

#RedHat @holly_cummins Guillaume, my CI was red. Is there a known failure in the vertx suite? Guillaume, my CI was red. Is there a known failure in the gRPC suite?

Slide 62

Slide 62 text

#RedHat @holly_cummins Guillaume, my CI was red. Is there a known failure in the vertx suite? Guillaume, my CI was red. Is there a known failure in the kafka suite? Guillaume, my CI was red. Is there a known failure in the gRPC suite?

Slide 63

Slide 63 text

#RedHat @holly_cummins Guillaume, my CI was red. Is there a known failure in the vertx suite? Guillaume, my CI was red. Is there a known failure in the kafka suite? Guillaume, my CI was red. Is there a known failure in the gRPC suite? Guillaume

Slide 64

Slide 64 text

#RedHat @holly_cummins Guillaume, my CI was red. Is there a known failure in the vertx suite? Guillaume, my CI was red. Is there a known failure in the kafka suite? Guillaume, my CI was red. Is there a known failure in the gRPC suite? the solution? “auto-Guillaume” Guillaume

Slide 65

Slide 65 text

#RedHat @holly_cummins the solution? “auto-Guillaume” with develocity

Slide 66

Slide 66 text

#RedHat @holly_cummins the solution? “auto-Guillaume” with develocity

Slide 67

Slide 67 text

#RedHat @holly_cummins the solution? “auto-Guillaume” with develocity

Slide 68

Slide 68 text

#RedHat @holly_cummins the solution? “auto-Guillaume” with develocity

Slide 69

Slide 69 text

#RedHat @holly_cummins

Slide 70

Slide 70 text

@holly_cummins #RedHat → productivity tip for the lazy, happy, developer go beyond infrastructure automation make coding better

Slide 71

Slide 71 text

@holly_cummins #RedHat let’s talk about quarkus

Slide 72

Slide 72 text

@holly_cummins #RedHat

Slide 73

Slide 73 text

@holly_cummins #RedHat Java dynamism

Slide 74

Slide 74 text

@holly_cummins #RedHat build time Java dynamism

Slide 75

Slide 75 text

@holly_cummins #RedHat build time runtime Java dynamism

Slide 76

Slide 76 text

@holly_cummins #RedHat build time runtime Java dynamism

Slide 77

Slide 77 text

@holly_cummins #RedHat packaging (maven, gradle…) build time runtime Java dynamism

Slide 78

Slide 78 text

@holly_cummins #RedHat build time runtime Java dynamism

Slide 79

Slide 79 text

@holly_cummins #RedHat build time runtime Java dynamism

Slide 80

Slide 80 text

@holly_cummins #RedHat > build time runtime load and parse • config files • properties • yaml • xml • etc. Java dynamism

Slide 81

Slide 81 text

@holly_cummins #RedHat > build time runtime Java dynamism

Slide 82

Slide 82 text

@holly_cummins #RedHat @ @ > build time runtime • classpath scanning and annotation discovery • attempt to load class to enable/disable features Java dynamism

Slide 83

Slide 83 text

@holly_cummins #RedHat @ @ > build time runtime Java dynamism

Slide 84

Slide 84 text

@holly_cummins #RedHat @ @ > build time runtime build a metamodel of the world Java dynamism

Slide 85

Slide 85 text

@holly_cummins #RedHat @ @ > build time runtime Java dynamism

Slide 86

Slide 86 text

@holly_cummins #RedHat @ @ > build time runtime start • thread pools • I/O • etc. Java dynamism

Slide 87

Slide 87 text

@holly_cummins #RedHat @ @ > build time runtime ready to do work! Java dynamism

Slide 88

Slide 88 text

@holly_cummins #RedHat what if we start the application more than once? @ @ >

Slide 89

Slide 89 text

@holly_cummins #RedHat what if we start the application more than once? @ @ > @ @ >

Slide 90

Slide 90 text

@holly_cummins #RedHat what if we start the application more than once? @ @ > @ @ > @ @ >

Slide 91

Slide 91 text

@holly_cummins #RedHat what if we start the application more than once? @ @ > @ @ > @ @ > @ @ >

Slide 92

Slide 92 text

@holly_cummins #RedHat what if we start the application more than once? @ @ > @ @ > @ @ > @ @ >

Slide 93

Slide 93 text

@holly_cummins #RedHat what if we start the application more than once? @ @ > @ @ > @ @ > @ @ > so much work gets redone every time

Slide 94

Slide 94 text

@holly_cummins #RedHat what if we initialize at build time? @ @ > build time runtime

Slide 95

Slide 95 text

@holly_cummins #RedHat what if we initialize at build time? @ @ > build time runtime

Slide 96

Slide 96 text

@holly_cummins #RedHat what if we initialize at build time? @ @ > build time runtime start • thread pools • I/O • etc.

Slide 97

Slide 97 text

@holly_cummins #RedHat what if we initialize at build time? @ @ > build time runtime ready to do work! start • thread pools • I/O • etc.

Slide 98

Slide 98 text

@holly_cummins #RedHat repeated starts are now efficient @ @ >

Slide 99

Slide 99 text

@holly_cummins #RedHat repeated starts are now efficient @ @ >

Slide 100

Slide 100 text

@holly_cummins #RedHat repeated starts are now efficient @ @ >

Slide 101

Slide 101 text

@holly_cummins #RedHat repeated starts are now efficient @ @ >

Slide 102

Slide 102 text

@holly_cummins #RedHat repeated starts are now efficient @ @ >

Slide 103

Slide 103 text

@holly_cummins #RedHat repeated starts are now efficient @ @ >

Slide 104

Slide 104 text

@holly_cummins #RedHat repeated starts are now efficient @ @ > less wasted work

Slide 105

Slide 105 text

@holly_cummins #RedHat outcome

Slide 106

Slide 106 text

@holly_cummins #RedHat quarkus applications outcome

Slide 107

Slide 107 text

@holly_cummins #RedHat quarkus applications - start faster outcome

Slide 108

Slide 108 text

@holly_cummins #RedHat quarkus applications - start faster - use less memory outcome

Slide 109

Slide 109 text

@holly_cummins #RedHat quarkus applications - start faster - use less memory - have higher throughput outcome

Slide 110

Slide 110 text

@holly_cummins #RedHat

Slide 111

Slide 111 text

@holly_cummins #RedHat adding developer experience improvements here is expensive

Slide 112

Slide 112 text

@holly_cummins #RedHat adding developer experience improvements here is expensive adding developer experience improvements here is cheap

Slide 113

Slide 113 text

@holly_cummins #RedHat the dream

Slide 114

Slide 114 text

@holly_cummins #RedHat don’t make humans tell the computer what the computer already knows the dream

Slide 115

Slide 115 text

@holly_cummins #RedHat don’t make humans tell the computer what the computer already knows the dream is now achievable

Slide 116

Slide 116 text

@holly_cummins #RedHat package com.example; import org.jboss.logging.Logger; public class Thing { private static final Logger log = Logger.getLogger(Thing.class); public void doSomething() { log.info("It works!"); } }

Slide 117

Slide 117 text

@holly_cummins #RedHat package com.example; import org.jboss.logging.Logger; public class Thing { private static final Logger log = Logger.getLogger(Thing.class); public void doSomething() { log.info("It works!"); } } import io.quarkus.logging.Log; Log

Slide 118

Slide 118 text

@holly_cummins #RedHat public String hello(@QueryParam("name") String name) {

Slide 119

Slide 119 text

@holly_cummins #RedHat public String hello(@RestQuery String name) {

Slide 120

Slide 120 text

#RedHat @holly_cummins testcontainers integration … without quarkus @TestConfiguration(proxyBeanMethods = false) public class ContainersConfig { @Bean @ServiceConnection public PostgreSQLContainer> postgres() { return new PostgreSQLContainer<>(DockerImageName.parse("postgres:14")); } } public class TestApplication { public static void main(String[] args) { SpringApplication .from(MySpringDataApplication::main) .with(ContainersConfig.class) .run(args); } } @Import(ContainersConfig.class)

Slide 121

Slide 121 text

#RedHat @holly_cummins testcontainers integration … without quarkus quarkus

Slide 122

Slide 122 text

@holly_cummins #RedHat what if… you could inherit boilerplate Hibernate queries from a superclass, instead of having to write them all? example: hibernate

Slide 123

Slide 123 text

@holly_cummins #RedHat @ApplicationScoped public class GreetingRepository { public Entity findByName(int name) { return find("name", name).firstResult(); } void persist(Entity entity) {} void delete(Entity entity) {} Entity findById(Id id) {} List list(String query, Sort sort, Object... params) { return null; } Stream stream(String query, Object... params) { return null; } long count() { return 0; } long count(String query, Object... params) { return 0; } } example: hibernate with panache

Slide 124

Slide 124 text

@holly_cummins #RedHat DAO @ApplicationScoped public class GreetingRepository implements PanacheRepository { public Entity findByName(int name) { return find("name", name).firstResult(); } } example: hibernate with panache

Slide 125

Slide 125 text

@holly_cummins #RedHat machine efficiency unlocked human efficiency

Slide 126

Slide 126 text

@holly_cummins #RedHat machine efficiency unlocked human efficiency and human joy

Slide 127

Slide 127 text

@holly_cummins #RedHat this isn’t using gen AI to automate code generation this is making the need for the code go away

Slide 128

Slide 128 text

@holly_cummins #RedHat

Slide 129

Slide 129 text

@holly_cummins #RedHat

Slide 130

Slide 130 text

@holly_cummins #RedHat

Slide 131

Slide 131 text

@holly_cummins #RedHat

Slide 132

Slide 132 text

@holly_cummins #RedHat

Slide 133

Slide 133 text

@holly_cummins #RedHat

Slide 134

Slide 134 text

@holly_cummins #RedHat

Slide 135

Slide 135 text

@holly_cummins #RedHat

Slide 136

Slide 136 text

@holly_cummins #RedHat 70% unnecessary code

Slide 137

Slide 137 text

@holly_cummins #RedHat 70% unnecessary code code isn’t an asset it’s a liability

Slide 138

Slide 138 text

@holly_cummins #RedHat but if you do have to write boring code … gen AI can help a lot.

Slide 139

Slide 139 text

@holly_cummins #RedHat but if you do have to write boring code … gen AI can help a lot. gen AI can (sometimes) help a lot.

Slide 140

Slide 140 text

#RedHat @holly_cummins measurement

Slide 141

Slide 141 text

#RedHat @holly_cummins don’t just shift work from the measured pile to the unmeasured pile

Slide 142

Slide 142 text

#RedHat @holly_cummins don’t just measure what is easiest to measure

Slide 143

Slide 143 text

#RedHat @holly_cummins we can measure “time at the computer!”

Slide 144

Slide 144 text

#RedHat @holly_cummins we can measure “time at the computer!” desks are not the only place value is created

Slide 145

Slide 145 text

#RedHat @holly_cummins we can measure “time at the computer!” desks are not the only place value is created

Slide 146

Slide 146 text

#RedHat @holly_cummins

Slide 147

Slide 147 text

#RedHat @holly_cummins 14% took showers specifically for the purpose of coming up with ideas

Slide 148

Slide 148 text

#RedHat @holly_cummins I am most productive while - showering - running

Slide 149

Slide 149 text

#RedHat @holly_cummins I am most productive while - showering - running this slide was written while running

Slide 150

Slide 150 text

@holly_cummins #RedHat → productivity tip for the lazy, happy, developer use voice memo to capture all the work you do while running * the text on this slide was originally a voice memo

Slide 151

Slide 151 text

@holly_cummins #RedHat

Slide 152

Slide 152 text

@holly_cummins #RedHat but what if you’re not debugging- in-your-head while running?

Slide 153

Slide 153 text

@holly_cummins #RedHat but what if you’re not debugging- in-your-head while running? what if you’re feeding chocolate

Slide 154

Slide 154 text

@holly_cummins #RedHat but what if you’re not debugging- in-your-head while running? what if you’re feeding chocolate into the office fan, to see what happens?

Slide 155

Slide 155 text

@holly_cummins #RedHat

Slide 156

Slide 156 text

@holly_cummins #RedHat we work in a creative industry

Slide 157

Slide 157 text

@holly_cummins #RedHat we work in a creative industry play helps creativity

Slide 158

Slide 158 text

#RedHat @holly_cummins creativity brings us joy

Slide 159

Slide 159 text

@holly_cummins #RedHat productivity happiness

Slide 160

Slide 160 text

@holly_cummins #RedHat it’s not a trade-off. productivity happiness

Slide 161

Slide 161 text

@holly_cummins #RedHat it’s not a trade-off. productivity happiness it’s a double-win.

Slide 162

Slide 162 text

@holly_cummins #RedHat ours is the only profession where “lazy” is a compliment

Slide 163

Slide 163 text

@holly_cummins #RedHat we need to make it a profession where “happy” is also a compliment

Slide 164

Slide 164 text

#RedHat @holly_cummins

Slide 165

Slide 165 text

#RedHat @holly_cummins takeaways

Slide 166

Slide 166 text

#RedHat @holly_cummins takeaways - joy has business value

Slide 167

Slide 167 text

#RedHat @holly_cummins takeaways - joy has business value - get rid of dumb work

Slide 168

Slide 168 text

#RedHat @holly_cummins takeaways - joy has business value - get rid of dumb work - if you can’t get rid of the work, make computers do the work

Slide 169

Slide 169 text

#RedHat @holly_cummins takeaways - joy has business value - get rid of dumb work - if you can’t get rid of the work, make computers do the work - don’t make humans tell the computer things the computer already knows

Slide 170

Slide 170 text

#RedHat @holly_cummins takeaways - joy has business value - get rid of dumb work - if you can’t get rid of the work, make computers do the work - don’t make humans tell the computer things the computer already knows - get rid of flab from the programming model (like quarkus does!)

Slide 171

Slide 171 text

#RedHat @holly_cummins takeaways - joy has business value - get rid of dumb work - if you can’t get rid of the work, make computers do the work - don’t make humans tell the computer things the computer already knows - get rid of flab from the programming model (like quarkus does!) - measure the important metric, not the one that’s easy to measure

Slide 172

Slide 172 text

@holly_cummins #RedHat thank you @[email protected] slides