Slide 1

Slide 1 text

ceej's how to solve it

Slide 2

Slide 2 text

ceej's how to solve it, or engineering at npm

Slide 3

Slide 3 text

a series of maxims & their application to problem-solving of diverse kinds

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

dedicated to David Zink with whom I have spent 20 happy years arguing about all this

Slide 6

Slide 6 text

it takes decades to get good at writing software

Slide 7

Slide 7 text

most human beings learn complex skills through mentorship

Slide 8

Slide 8 text

most programmers learn by working with more experienced programmers

Slide 9

Slide 9 text

our industry's booms have caused shortages of experienced mentors

Slide 10

Slide 10 text

exacerbated by a modern contempt for anybody over 40

Slide 11

Slide 11 text

too often programmers come of age without experienced people around them

Slide 12

Slide 12 text

we keep re-inventing core tenets of our profession

Slide 13

Slide 13 text

npm's engineering staff meeting me attempting to share what I know and let you share what you know

Slide 14

Slide 14 text

lift each other up

Slide 15

Slide 15 text

therefore... this talk

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

systems are how things work together

Slide 18

Slide 18 text

the npm's registry is a system

Slide 19

Slide 19 text

npm itself is a system!

Slide 20

Slide 20 text

systems analyst once the title for people who do what programmers do now

Slide 21

Slide 21 text

systems exist in a constant state of failure The Systems Bible by John Gall

Slide 22

Slide 22 text

"Every complex working system can be shown to have evolved from a simple working system"

Slide 23

Slide 23 text

from this we extract a maxim...

Slide 24

Slide 24 text

write the simplest thing you can, every time

Slide 25

Slide 25 text

evolve your simple systems to do more keep them working the whole time

Slide 26

Slide 26 text

this is true for people systems as well as for computers & code

Slide 27

Slide 27 text

Simplicity is prerequisite for reliability. —Edsger W. Dijkstra

Slide 28

Slide 28 text

simple is not the same as easy Rich Hickey: Simple Made Easy

Slide 29

Slide 29 text

Do the simplest thing that moves you toward your goal while preserving your flexibility. —ceej

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

modularity

Slide 32

Slide 32 text

modularity is one of the big secrets

Slide 33

Slide 33 text

modularity is hiding the details of an implementation

Slide 34

Slide 34 text

if you hide the details you can change it later

Slide 35

Slide 35 text

the other secret is that change is guaranteed so prepare for it

Slide 36

Slide 36 text

the easy connection is with what npm does: we manage a javascript modules

Slide 37

Slide 37 text

modularity's more important applications are at a systems level

Slide 38

Slide 38 text

we hide our data storage implementations behind microservices

Slide 39

Slide 39 text

nobody knows if we're using mysql, postgres, or mongodb we can change it without other services caring

Slide 40

Slide 40 text

just did this to the downloads API mysql ➜ redis

Slide 41

Slide 41 text

No content

Slide 42

Slide 42 text

always pronounce the names of things in the funniest possible way

Slide 43

Slide 43 text

don't let the perfect be the enemy of the better than what we have now

Slide 44

Slide 44 text

continuous improvement our products, our processes, our systems

Slide 45

Slide 45 text

iterate toward victory!

Slide 46

Slide 46 text

don't be clever

Slide 47

Slide 47 text

don't be clever “Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it. ” —Brian Kernighan

Slide 48

Slide 48 text

No content

Slide 49

Slide 49 text

think

Slide 50

Slide 50 text

the RFC process is about stopping to think

Slide 51

Slide 51 text

what problem are you solving?

Slide 52

Slide 52 text

Defining the problem clearly helps you understand what a solution looks like.

Slide 53

Slide 53 text

RFC stands for request for comment

Slide 54

Slide 54 text

seek feedback

Slide 55

Slide 55 text

No content

Slide 56

Slide 56 text

people make the best decisions they can given their information & abilities

Slide 57

Slide 57 text

improving the quality of your information will improve your decisions

Slide 58

Slide 58 text

give good feedback in return

Slide 59

Slide 59 text

your colleagues rely on you just as you rely on them

Slide 60

Slide 60 text

tie your ego to being right in the end not to being right from the start

Slide 61

Slide 61 text

No content

Slide 62

Slide 62 text

you can't fool me, young man. it's tradeoffs all the way down

Slide 63

Slide 63 text

what's a tradeoff?

Slide 64

Slide 64 text

you accept something that's meh in one way but that's great in a way that matters more

Slide 65

Slide 65 text

every solution to a problem requires tradeoffs

Slide 66

Slide 66 text

make tradeoffs with your eyes open

Slide 67

Slide 67 text

No content

Slide 68

Slide 68 text

I'll phrase that more positively

Slide 69

Slide 69 text

be kind be courageous

Slide 70

Slide 70 text

be kind to each other

Slide 71

Slide 71 text

kindness doesn't mean never saying hard things

Slide 72

Slide 72 text

kindness shapes how you say them

Slide 73

Slide 73 text

what does courage have to do with problem-solving?

Slide 74

Slide 74 text

be bold about tackling hard problems

Slide 75

Slide 75 text

be bold about re-examining what we do now

Slide 76

Slide 76 text

sometimes you need to blow everything up

Slide 77

Slide 77 text

No content

Slide 78

Slide 78 text

the companies that survive are phoenixes

Slide 79

Slide 79 text

all code has a lifespan

Slide 80

Slide 80 text

code is originally written to solve a specific problem

Slide 81

Slide 81 text

our understanding of the problem changes the context around it changes the code itself changes

Slide 82

Slide 82 text

plan to replace all solutions to problems

Slide 83

Slide 83 text

feel good about how long your solution lasted!

Slide 84

Slide 84 text

No content

Slide 85

Slide 85 text

how we deal with mistakes is important

Slide 86

Slide 86 text

because mistakes are inevitable

Slide 87

Slide 87 text

we try for blameless postmortems

Slide 88

Slide 88 text

we redesign processes when things go wrong

Slide 89

Slide 89 text

the right thing to do should be the easiest thing to do

Slide 90

Slide 90 text

work hard to make the right thing easy

Slide 91

Slide 91 text

do small things daily to tidy up

Slide 92

Slide 92 text

No content

Slide 93

Slide 93 text

No content

Slide 94

Slide 94 text

all code is communication

Slide 95

Slide 95 text

all of our work requires communication

Slide 96

Slide 96 text

learning our professions requires communication

Slide 97

Slide 97 text

how much time in each day do you spend talking to your colleagues?

Slide 98

Slide 98 text

do the work to get better at communicating

Slide 99

Slide 99 text

find where you can get better & do it! writing? chatting in slack? listening to feedback? giving feedback?

Slide 100

Slide 100 text

communication skills always pay off

Slide 101

Slide 101 text

No content

Slide 102

Slide 102 text

never be cruel or cowardly if you are always make amends -- The Twelfth Doctor

Slide 103

Slide 103 text

No content