@searls is my real name.
My parents were on-brand.
Slide 5
Slide 5 text
This is my 2011 face!
Slide 6
Slide 6 text
This is my 2011 face!
Stuck with it forever.
Slide 7
Slide 7 text
I co-founded @testdouble.
Slide 8
Slide 8 text
I co-founded @testdouble.
It's like consulting, but good!
Slide 9
Slide 9 text
scratch
an itch
(in 200 repos or less)
how
to
Slide 10
Slide 10 text
Creativity
Slide 11
Slide 11 text
No content
Slide 12
Slide 12 text
OK!
Slide 13
Slide 13 text
So, what's
creativity?
Slide 14
Slide 14 text
No content
Slide 15
Slide 15 text
Is creativity passion?
Slide 16
Slide 16 text
Passion is hot right now!
Slide 17
Slide 17 text
Passion is hot right now!
Slide 18
Slide 18 text
Passion is hot right now!
Slide 19
Slide 19 text
Passion is hot right now!
Slide 20
Slide 20 text
Passion is hot right now!
Slide 21
Slide 21 text
Passion is hot right now!
Slide 22
Slide 22 text
Passion is hot right now!
Slide 23
Slide 23 text
Passion is hot right now!
Slide 24
Slide 24 text
Passion is hot right now!
Slide 25
Slide 25 text
Passion is hot right now!
Slide 26
Slide 26 text
Passion's hot right now!
Slide 27
Slide 27 text
Passion's hot right now!
Slide 28
Slide 28 text
Nope, not passion!
Slide 29
Slide 29 text
Is creativity art?
Slide 30
Slide 30 text
No content
Slide 31
Slide 31 text
No content
Slide 32
Slide 32 text
Ehh…
Slide 33
Slide 33 text
Is creativity vision?
Slide 34
Slide 34 text
No content
Slide 35
Slide 35 text
☁
Slide 36
Slide 36 text
No content
Slide 37
Slide 37 text
Vision's not enough.
Slide 38
Slide 38 text
No content
Slide 39
Slide 39 text
No content
Slide 40
Slide 40 text
No content
Slide 41
Slide 41 text
Are YOU creative?
Slide 42
Slide 42 text
Are YOU creative?
Incredibly passionate
Slide 43
Slide 43 text
Are YOU creative?
Incredibly passionate
Create beautiful things
Slide 44
Slide 44 text
Are YOU creative?
Incredibly passionate
Create beautiful things
Can see into the future
Slide 45
Slide 45 text
Are YOU creative?
Incredibly passionate
Create beautiful things
Can see into the future
❌
Slide 46
Slide 46 text
Are YOU creative?
Incredibly passionate
Create beautiful things
Can see into the future
❌
❌
Slide 47
Slide 47 text
Are YOU creative?
Incredibly passionate
Create beautiful things
Can see into the future
❌
❌
❌
Slide 48
Slide 48 text
No content
Slide 49
Slide 49 text
No content
Slide 50
Slide 50 text
Creative Spark
Slide 51
Slide 51 text
No content
Slide 52
Slide 52 text
✨
Slide 53
Slide 53 text
✨
Slide 54
Slide 54 text
✨
Slide 55
Slide 55 text
✨
Slide 56
Slide 56 text
✨
Slide 57
Slide 57 text
✨
Slide 58
Slide 58 text
✨
Slide 59
Slide 59 text
✨
Slide 60
Slide 60 text
No content
Slide 61
Slide 61 text
☝
Slide 62
Slide 62 text
☝
Slide 63
Slide 63 text
☝
Slide 64
Slide 64 text
☝
Creativity is a
chronic illness.
Slide 65
Slide 65 text
☝
Creativity is a
chronic illness.
Slide 66
Slide 66 text
No content
Slide 67
Slide 67 text
No content
Slide 68
Slide 68 text
No content
Slide 69
Slide 69 text
No content
Slide 70
Slide 70 text
No content
Slide 71
Slide 71 text
Negative emotions
Slide 72
Slide 72 text
Negative emotions
Positive outcomes
Slide 73
Slide 73 text
No content
Slide 74
Slide 74 text
No content
Slide 75
Slide 75 text
No content
Slide 76
Slide 76 text
At the beginning
of my career…
Slide 77
Slide 77 text
No content
Slide 78
Slide 78 text
No content
Slide 79
Slide 79 text
☹
Slide 80
Slide 80 text
☹
Slide 81
Slide 81 text
☹
Slide 82
Slide 82 text
It took me years
to realize this:
Slide 83
Slide 83 text
I needed an outlet
Slide 84
Slide 84 text
Production wasn't a
great creative outlet
Slide 85
Slide 85 text
No content
Slide 86
Slide 86 text
No content
Slide 87
Slide 87 text
No content
Slide 88
Slide 88 text
No content
Slide 89
Slide 89 text
No content
Slide 90
Slide 90 text
No content
Slide 91
Slide 91 text
No content
Slide 92
Slide 92 text
We create it, but it's not our own
Slide 93
Slide 93 text
No content
Slide 94
Slide 94 text
Me
Slide 95
Slide 95 text
Me My
team
Slide 96
Slide 96 text
No content
Slide 97
Slide 97 text
No content
Slide 98
Slide 98 text
No content
Slide 99
Slide 99 text
No content
Slide 100
Slide 100 text
No content
Slide 101
Slide 101 text
No content
Slide 102
Slide 102 text
No content
Slide 103
Slide 103 text
No content
Slide 104
Slide 104 text
No content
Slide 105
Slide 105 text
No content
Slide 106
Slide 106 text
No content
Slide 107
Slide 107 text
No content
Slide 108
Slide 108 text
Dev QA Prod
Slide 109
Slide 109 text
Dev QA Prod
Slide 110
Slide 110 text
Dev QA Prod
Slide 111
Slide 111 text
Dev QA Prod
Slide 112
Slide 112 text
Dev QA Prod
Slide 113
Slide 113 text
Dev QA Prod
Slide 114
Slide 114 text
Dev QA Prod
Slide 115
Slide 115 text
Dev QA Prod
Slide 116
Slide 116 text
Dev QA Prod
☹
Slide 117
Slide 117 text
Dev QA Prod
☹
Slide 118
Slide 118 text
Dev QA Prod
☹
Slide 119
Slide 119 text
Dev QA Prod
☹
Don't cede control of your
happiness to someone else
Slide 120
Slide 120 text
Create space
for creativity
Slide 121
Slide 121 text
One morning…
Slide 122
Slide 122 text
No content
Slide 123
Slide 123 text
No content
Slide 124
Slide 124 text
No content
Slide 125
Slide 125 text
⌨
Slide 126
Slide 126 text
⌨
*hack*
*hack*
*hack*
*hack*
Slide 127
Slide 127 text
⌨
*hack*
*hack*
*hack*
*hack*
Slide 128
Slide 128 text
⌨
*hack*
*hack*
*hack*
*hack*
Slide 129
Slide 129 text
☹
Slide 130
Slide 130 text
☹
Slide 131
Slide 131 text
No content
Slide 132
Slide 132 text
No content
Slide 133
Slide 133 text
No content
Slide 134
Slide 134 text
No content
Slide 135
Slide 135 text
Main Project
Slide 136
Slide 136 text
Main Project
Slide 137
Slide 137 text
Main Project
Side Project
Slide 138
Slide 138 text
Burning the candle at both ends
Slide 139
Slide 139 text
Burning the candle at both ends
Slide 140
Slide 140 text
Why do I do this?
Slide 141
Slide 141 text
Why do I do this?
Slide 142
Slide 142 text
Why do I do this?
Slide 143
Slide 143 text
Why do I do this?
Slide 144
Slide 144 text
Why do I do this?
Slide 145
Slide 145 text
Why do I do this?
Slide 146
Slide 146 text
Why do I do this?
Slide 147
Slide 147 text
Why do I do this?
Slide 148
Slide 148 text
Why do I do this?
Slide 149
Slide 149 text
Why do I do this?
Slide 150
Slide 150 text
Why do I do this?
Slide 151
Slide 151 text
Why do I do this?
Slide 152
Slide 152 text
Why do I do this?
Slide 153
Slide 153 text
⛳
⛪
Slide 154
Slide 154 text
⛳
⛪
Slide 155
Slide 155 text
⛳
Slide 156
Slide 156 text
⛳
Inadequacy
Slide 157
Slide 157 text
⛳
⛪
Slide 158
Slide 158 text
⛳
⛪
Slide 159
Slide 159 text
⛪
Slide 160
Slide 160 text
⛪
Indignation
Slide 161
Slide 161 text
⛳
⛪
Slide 162
Slide 162 text
⛳
⛪
Slide 163
Slide 163 text
No content
Slide 164
Slide 164 text
Incompetence
Slide 165
Slide 165 text
Inadequacy
Indignation
Incompetence
Slide 166
Slide 166 text
Inadequacy
Indignation
Incompetence
people to
imitate
Slide 167
Slide 167 text
Inadequacy
Indignation
Incompetence
people to
imitate
something
to say
Slide 168
Slide 168 text
Inadequacy
Indignation
Incompetence
room to
improve
people to
imitate
something
to say
Slide 169
Slide 169 text
Means
Inadequacy
Indignation
Incompetence
room to
improve
something
to say
Slide 170
Slide 170 text
Means
Inadequacy
Indignation
Incompetence
room to
improve
Motive
Slide 171
Slide 171 text
Means
Inadequacy
Indignation
Incompetence
Motive
Opportunity
Slide 172
Slide 172 text
⛳
⛪
Slide 173
Slide 173 text
⛳
⛪
Privilege!
Slide 174
Slide 174 text
No content
Slide 175
Slide 175 text
join@testdouble.com
Slide 176
Slide 176 text
⛳
⛪
Inadequacy Indignation Incompetence
Slide 177
Slide 177 text
Creative ideas
Slide 178
Slide 178 text
I feel ___________, but I
Slide 179
Slide 179 text
express indignation
I feel ___________, but I
Slide 180
Slide 180 text
express indignation
admit incompetence
I feel ___________, but I
____________
. Maybe if I
Slide 181
Slide 181 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
Slide 182
Slide 182 text
⛳ ⛪
Incompetence
Slide 183
Slide 183 text
Book-learning
Slide 184
Slide 184 text
Book-learning
Slide 185
Slide 185 text
vs.
Book-learning
Slide 186
Slide 186 text
vs.
Capitalism
Book-learning
Slide 187
Slide 187 text
No content
Slide 188
Slide 188 text
We need a new
citation editor.
Slide 189
Slide 189 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
Slide 190
Slide 190 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
I don't need CompSci
Slide 191
Slide 191 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
I don't need CompSci
can't create an app either
Slide 192
Slide 192 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
I don't need CompSci
can't create an app either
survive this profession
Slide 193
Slide 193 text
No content
Slide 194
Slide 194 text
I did it!
☺
Slide 195
Slide 195 text
Accomplishments:
Slide 196
Slide 196 text
Accomplishments:
• All 3 major style guides
Slide 197
Slide 197 text
Accomplishments:
• All 3 major style guides
• Dozens of types of sources
Slide 198
Slide 198 text
Accomplishments:
• All 3 major style guides
• Dozens of types of sources
• Complete account system
Slide 199
Slide 199 text
Accomplishments:
• All 3 major style guides
• Dozens of types of sources
• Complete account system
• Bibliography creation & export
Slide 200
Slide 200 text
Accomplishments:
• All 3 major style guides
• Dozens of types of sources
• Complete account system
• Bibliography creation & export
• Millions of users
Slide 201
Slide 201 text
I made it up as I went!
Slide 202
Slide 202 text
Very minor downsides:
Slide 203
Slide 203 text
Very minor downsides:
• Completely insecure
Slide 204
Slide 204 text
Very minor downsides:
• Completely insecure
• 100% manual testing
Slide 205
Slide 205 text
Very minor downsides:
• Completely insecure
• 100% manual testing
• GB's of daily server warnings
Slide 206
Slide 206 text
Very minor downsides:
• Completely insecure
• 100% manual testing
• GB's of daily server warnings
• A 16,000 line PHP file
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
Slide 247
Slide 247 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
mobile web is a joke
Slide 248
Slide 248 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
mobile web is a joke
keep failing to learn Cocoa
Slide 249
Slide 249 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
mobile web is a joke
keep failing to learn Cocoa
learn how to learn
• 66% faster! Legible!
• Full-featured
• 1st OSS contribution
• 1st user group talk
Slide 264
Slide 264 text
• 66% faster! Legible!
• Full-featured
• 1st OSS contribution
• 1st user group talk
• Rejected by Apple
Slide 265
Slide 265 text
No content
Slide 266
Slide 266 text
No content
Slide 267
Slide 267 text
☺
Slide 268
Slide 268 text
Mission Accomplished
☺
Slide 269
Slide 269 text
Learning simple stuff is easy…
Slide 270
Slide 270 text
Learning simple stuff is easy…
…if you can fit
it inside a day
Slide 271
Slide 271 text
Learning something bigger?
Slide 272
Slide 272 text
Learning something bigger?
Slide 273
Slide 273 text
Learning something bigger?
Slide 274
Slide 274 text
Learning something bigger?
Slide 275
Slide 275 text
Learning something bigger?
Then you need a real purpose.
Slide 276
Slide 276 text
Learning something bigger?
Then you need a real purpose.
Slide 277
Slide 277 text
Learning something bigger?
Then you need a real purpose.
Slide 278
Slide 278 text
Find the smallest thing
you can caremad over
Slide 279
Slide 279 text
⛳ ⛪
Incompetence
Slide 280
Slide 280 text
⛳ ⛪
Incompetence
Slide 281
Slide 281 text
⛳ ⛪
Incompetence
Slide 282
Slide 282 text
Java kids be like
Slide 283
Slide 283 text
Java kids be like
Slide 284
Slide 284 text
Ruby kids be like
Slide 285
Slide 285 text
Ruby kids be like
Slide 286
Slide 286 text
No content
Slide 287
Slide 287 text
Java
Slide 288
Slide 288 text
Java
Slide 289
Slide 289 text
Ruby
Slide 290
Slide 290 text
Ruby
Slide 291
Slide 291 text
Programming
Slide 292
Slide 292 text
Dynamic Programming
Slide 293
Slide 293 text
Meta-programming
Slide 294
Slide 294 text
My first Ruby team
Slide 295
Slide 295 text
My first Ruby team
Slide 296
Slide 296 text
My first Ruby team's tests
Slide 297
Slide 297 text
My first Ruby team's tests
Slide 298
Slide 298 text
dog = double()
Slide 299
Slide 299 text
dog = double()
dog.should_receive(:wag)
Slide 300
Slide 300 text
dog = double()
dog.should_receive(:wag)
.with(:tail)
Slide 301
Slide 301 text
dog = double()
dog.should_receive(:wag)
.with(:tail)
subject.pet(dog)
Slide 302
Slide 302 text
dog = double()
dog.should_receive(:wag)
.with(:tail)
subject.pet(dog)
Slide 303
Slide 303 text
dog = double()
dog.should_receive(:wag)
.with(:tail)
subject.pet(dog)
No type awareness
Slide 304
Slide 304 text
dog = double()
dog.should_receive(:wag)
.with(:tail)
subject.pet(dog)
Out of order
Slide 305
Slide 305 text
dog = double()
dog.should_receive(:wag)
.with(:tail)
subject.pet(dog)
Verbose API
Slide 306
Slide 306 text
No content
Slide 307
Slide 307 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
Slide 308
Slide 308 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
mad at these mocks
Slide 309
Slide 309 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
mad at these mocks
can't metaprogram Ruby
Slide 310
Slide 310 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
mad at these mocks
can't metaprogram Ruby
fit in with Rubyists
Slide 311
Slide 311 text
Java Ruby
Cargo-cult
Slide 312
Slide 312 text
Java Ruby
Slide 313
Slide 313 text
Java Ruby
Slide 314
Slide 314 text
Java Ruby
Slide 315
Slide 315 text
Learned Humility
Slide 316
Slide 316 text
Learned Humility
Slide 317
Slide 317 text
Learned Humility
Slide 318
Slide 318 text
Learned Humility
⏰
Slide 319
Slide 319 text
dog = gimme(Dog)
Slide 320
Slide 320 text
dog = gimme(Dog)
subject.pet(dog)
Slide 321
Slide 321 text
dog = gimme(Dog)
subject.pet(dog)
verify(dog).wag(:tail)
Slide 322
Slide 322 text
gimme
Slide 323
Slide 323 text
• Had type awareness
gimme
Slide 324
Slide 324 text
• Had type awareness
• Preserves test order
gimme
Slide 325
Slide 325 text
• Had type awareness
• Preserves test order
• Clever, terse APIs
gimme
Slide 326
Slide 326 text
• Had type awareness
• Preserves test order
• Clever, terse APIs
• Nobody adopted it
gimme
Slide 327
Slide 327 text
• Had type awareness
• Preserves test order
• Clever, terse APIs
• Nobody adopted it
• Influenced competitors
gimme
Slide 328
Slide 328 text
Getting out of
the line of fire
Slide 329
Slide 329 text
Working code
can sell ideas
Slide 330
Slide 330 text
Working code
can sell ideas
⌨
+
Slide 331
Slide 331 text
Working code
can sell ideas
=
⌨
+
Slide 332
Slide 332 text
Ideas require no
maintenance!
☎
Slide 333
Slide 333 text
⛳ ⛪
Incompetence
Slide 334
Slide 334 text
⛳ ⛪
Incompetence
Slide 335
Slide 335 text
⛳ ⛪
Incompetence
Slide 336
Slide 336 text
⛳ ⛪
Inadequacy
⛳
Slide 337
Slide 337 text
Midwestern
programming
Slide 338
Slide 338 text
No content
Slide 339
Slide 339 text
No content
Slide 340
Slide 340 text
No content
Slide 341
Slide 341 text
No content
Slide 342
Slide 342 text
No content
Slide 343
Slide 343 text
No content
Slide 344
Slide 344 text
No content
Slide 345
Slide 345 text
I'm not great at cocktail parties
Slide 346
Slide 346 text
I had some rockstar envy
Slide 347
Slide 347 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
Slide 348
Slide 348 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
my work isn't exciting
Slide 349
Slide 349 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
my work isn't exciting
only know how to Enterprise
Slide 350
Slide 350 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
my work isn't exciting
only know how to Enterprise
be more appreciated
Slide 351
Slide 351 text
mustachify.me
Slide 352
Slide 352 text
mustachify.me
Slide 353
Slide 353 text
mustachify.me
Slide 354
Slide 354 text
"Let's think bigger"
Slide 355
Slide 355 text
"Let's think bigger"
Slide 356
Slide 356 text
Must Stache
Slide 357
Slide 357 text
Must Stache
Cory
Slide 358
Slide 358 text
Must Stache
Cory
Slide 359
Slide 359 text
Must Stache
Cory
Slide 360
Slide 360 text
• Posted to a forum at 11pm
Slide 361
Slide 361 text
• Posted to a forum at 11pm
•
Slide 362
Slide 362 text
• Posted to a forum at 11pm
•
• 12,000 views (~3,000 installs)
Slide 363
Slide 363 text
• Posted to a forum at 11pm
•
• 12,000 views (~3,000 installs)
• 40 pages per user/hour
Slide 364
Slide 364 text
• Posted to a forum at 11pm
•
• 12,000 views (~3,000 installs)
• 40 pages per user/hour
• 42 images/page
Slide 365
Slide 365 text
• Posted to a forum at 11pm
•
• 12,000 views (~3,000 installs)
• 40 pages per user/hour
• 42 images/page
• 5 million requests per hour
Slide 366
Slide 366 text
No content
Slide 367
Slide 367 text
Serverless!
Slide 368
Slide 368 text
Must Stache
Cory
Slide 369
Slide 369 text
Must Stache
Cory
Slide 370
Slide 370 text
Must Stache
Cory
Cory
Slide 371
Slide 371 text
Must Stache
Cory
Cory
Slide 372
Slide 372 text
Must Stache
Cory
Cory
Slide 373
Slide 373 text
Many months later
Slide 374
Slide 374 text
No content
Slide 375
Slide 375 text
No content
Slide 376
Slide 376 text
No content
Slide 377
Slide 377 text
No content
Slide 378
Slide 378 text
No content
Slide 379
Slide 379 text
No content
Slide 380
Slide 380 text
☺
Slide 381
Slide 381 text
No content
Slide 382
Slide 382 text
✉
Slide 383
Slide 383 text
✉
✉ ✉
✉ ✉
✉ ✉
✉
✉
✉
✉
✉✉
✉
✉ ✉
✉
✉
✉
✉
✉
✉
Slide 384
Slide 384 text
This wasn't fan mail
Slide 385
Slide 385 text
No content
Slide 386
Slide 386 text
• Built a popular thing
Slide 387
Slide 387 text
• Built a popular thing
• Was unaware of that popularity
Slide 388
Slide 388 text
• Built a popular thing
• Was unaware of that popularity
• Made someone else millions
Slide 389
Slide 389 text
• Built a popular thing
• Was unaware of that popularity
• Made someone else millions (?)
Slide 390
Slide 390 text
• Built a popular thing
• Was unaware of that popularity
• Made someone else millions
• Made thousands of users angry
(?)
Slide 391
Slide 391 text
• Built a popular thing
• Was unaware of that popularity
• Made someone else millions
• Made thousands of users angry
• Left with no recourse
(?)
Slide 392
Slide 392 text
Serverless isn't
Slide 393
Slide 393 text
Popularity without
purpose is toxic
☢
Slide 394
Slide 394 text
⛳ ⛪
Inadequacy
⛳
Slide 395
Slide 395 text
⛳ ⛪
Inadequacy
⛳
Slide 396
Slide 396 text
⛳ ⛪
Inadequacy
⛳
Slide 397
Slide 397 text
I was on a legacy
rescue project
Slide 398
Slide 398 text
I was on a legacy
rescue project
I was on a legacy
rescue project
Slide 399
Slide 399 text
I was on a legacy
rescue project
I was on a legacy
rescue project
My kids will inherit it
Slide 400
Slide 400 text
I was on a legacy
rescue project
I was on a legacy
rescue project
Slide 401
Slide 401 text
I was on a legacy
rescue project
I was on a legacy
rescue project
I wanted to be rescued
Slide 402
Slide 402 text
☹
Slide 403
Slide 403 text
☹
Slide 404
Slide 404 text
☹
Slide 405
Slide 405 text
Can I program anything useful
in under 2 months anymore?
Slide 406
Slide 406 text
to-do apps
✅
Slide 407
Slide 407 text
Project:
Plaintext to-dos
Slide 408
Slide 408 text
Project:
- Task A
Plaintext to-dos
Slide 409
Slide 409 text
Project:
- Task A
- Task B
Plaintext to-dos
Slide 410
Slide 410 text
Project:
- Task A
- Task B
- Task C
Plaintext to-dos
Slide 411
Slide 411 text
Project:
/ Task A
- Task B
- Task C
Plaintext to-dos
Slide 412
Slide 412 text
Project:
/ Task A
# Task B
- Task C
Plaintext to-dos
Slide 413
Slide 413 text
Project:
/ Task A
# Task B
- Task C {6/10/2011}
Plaintext to-dos
Slide 414
Slide 414 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
Slide 415
Slide 415 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
I hate all to-do apps
Slide 416
Slide 416 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
I hate all to-do apps
forgot how to code
Slide 417
Slide 417 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
I hate all to-do apps
forgot how to code
restore my pride
Slide 418
Slide 418 text
A quest!
Slide 419
Slide 419 text
Build a great to-do app…
✅
Slide 420
Slide 420 text
…in under 24 hours
⏲
Slide 421
Slide 421 text
doing-it:
doing-it app
Slide 422
Slide 422 text
doing-it:
- make a div contenteditable
doing-it app
Slide 423
Slide 423 text
doing-it:
- make a div contenteditable
- dump it in localStorage
doing-it app
Slide 424
Slide 424 text
doing-it:
- make a div contenteditable
- dump it in localStorage
- read from localStorage
doing-it app
Slide 425
Slide 425 text
doing-it:
- make a div contenteditable
- dump it in localStorage
- read from localStorage
- use it to track the rest
doing-it app
Slide 426
Slide 426 text
I did it!
Slide 427
Slide 427 text
No content
Slide 428
Slide 428 text
No content
Slide 429
Slide 429 text
✅
doing-it
Slide 430
Slide 430 text
• Finished within 1 day ✅
doing-it
Slide 431
Slide 431 text
• Finished within 1 day
• Renewed confidence
✅
doing-it
Slide 432
Slide 432 text
• Finished within 1 day
• Renewed confidence
• Still works ( Heroku!)
✅
doing-it
Slide 433
Slide 433 text
• Finished within 1 day
• Renewed confidence
• Still works ( Heroku!)
• No users ➡ no e-mail
✅
doing-it
Slide 434
Slide 434 text
• Finished within 1 day
• Renewed confidence
• Still works ( Heroku!)
• No users ➡ no e-mail
• Threw it on GitHub
✅
doing-it
Slide 435
Slide 435 text
Self-validation
Slide 436
Slide 436 text
"How do I open-source?"
⭐
⭐
Slide 437
Slide 437 text
No content
Slide 438
Slide 438 text
Write (me)
some docs,
my child.
Slide 439
Slide 439 text
Send (me) a
pull request
Slide 440
Slide 440 text
⭐
⭐
Slide 441
Slide 441 text
⭐
⭐
Slide 442
Slide 442 text
⭐
⭐
Slide 443
Slide 443 text
⭐
⭐
Rejected! This is
not how I'd do it.
Slide 444
Slide 444 text
Do you want
another boss?
Slide 445
Slide 445 text
No content
Slide 446
Slide 446 text
I made what I
wanted, then
flung it online
Slide 447
Slide 447 text
Can't predict
what'll stick
Slide 448
Slide 448 text
⛳ ⛪
Inadequacy
⛳
Slide 449
Slide 449 text
⛳ ⛪
Inadequacy
⛳
Slide 450
Slide 450 text
⛳ ⛪
Inadequacy
⛳
Slide 451
Slide 451 text
The Thoughtleader's Dilemma
Slide 452
Slide 452 text
The Thoughtleader's Dilemma
• Do interesting work
Slide 453
Slide 453 text
The Thoughtleader's Dilemma
• Do interesting work
• Share insights with others
Slide 454
Slide 454 text
The Thoughtleader's Dilemma
• Do interesting work
• Share insights with others
• Stop doing the work
Slide 455
Slide 455 text
The Thoughtleader's Dilemma
• Do interesting work
• Share insights with others
• Stop doing the work
• Thoughtlead others off a cliff
Slide 456
Slide 456 text
Test-Driven Development
Slide 457
Slide 457 text
One day, I started
leading thoughts…
Slide 458
Slide 458 text
google "tdd failure"
Slide 459
Slide 459 text
No content
Slide 460
Slide 460 text
No content
Slide 461
Slide 461 text
This is "London-
school" TDD
Slide 462
Slide 462 text
☝
This is "London-
school" TDD
Slide 463
Slide 463 text
☝
This is "London-
school" TDD
It isn't, really
Slide 464
Slide 464 text
No content
Slide 465
Slide 465 text
No content
Slide 466
Slide 466 text
Discovery Testing
Slide 467
Slide 467 text
No content
Slide 468
Slide 468 text
No content
Slide 469
Slide 469 text
No content
Slide 470
Slide 470 text
No content
Slide 471
Slide 471 text
No content
Slide 472
Slide 472 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
Slide 473
Slide 473 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
TDD isn't understood
Slide 474
Slide 474 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
TDD isn't understood
am a talking head
Slide 475
Slide 475 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
TDD isn't understood
am a talking head
validate my ideas
Slide 476
Slide 476 text
Simplisafe™ alarm system
Slide 477
Slide 477 text
Simplisafe™ alarm system
Slide 478
Slide 478 text
Simplisafe™ alarm system
Slide 479
Slide 479 text
No content
Slide 480
Slide 480 text
homebridge
Slide 481
Slide 481 text
homebridge
❓
Slide 482
Slide 482 text
homebridge
❓
Slide 483
Slide 483 text
homebridge
❓
Hey Siri, turn on my alarm
Slide 484
Slide 484 text
❓
Slide 485
Slide 485 text
Does my TDD
process work?
Slide 486
Slide 486 text
Several hours later…
⏲
Slide 487
Slide 487 text
Whew!
Slide 488
Slide 488 text
npm install simplisafe
Slide 489
Slide 489 text
var simplisafe = require('simplisafe')
Slide 490
Slide 490 text
var simplisafe = require('simplisafe')
simplisafe({
Slide 491
Slide 491 text
var simplisafe = require('simplisafe')
simplisafe({
user: 'foo@bar.com',
Slide 492
Slide 492 text
var simplisafe = require('simplisafe')
simplisafe({
user: 'foo@bar.com',
password: '1234'
Slide 493
Slide 493 text
var simplisafe = require('simplisafe')
simplisafe({
user: 'foo@bar.com',
password: '1234'
}, function (er, client) {
Slide 494
Slide 494 text
var simplisafe = require('simplisafe')
simplisafe({
user: 'foo@bar.com',
password: '1234'
}, function (er, client) {
client.setState('away')
Slide 495
Slide 495 text
var simplisafe = require('simplisafe')
simplisafe({
user: 'foo@bar.com',
password: '1234'
}, function (er, client) {
client.setState('away')
})
Slide 496
Slide 496 text
var simplisafe = require('simplisafe')
simplisafe({
user: 'foo@bar.com',
password: '1234'
}, function (er, client) {
client.setState('away')
})
Slide 497
Slide 497 text
simplisafe
Slide 498
Slide 498 text
• Followed my own advice
simplisafe
Slide 499
Slide 499 text
• Followed my own advice
• It actually went really well!
simplisafe
Slide 500
Slide 500 text
• Followed my own advice
• It actually went really well!
• I went too long without
validating my ideas
simplisafe
Slide 501
Slide 501 text
• Followed my own advice
• It actually went really well!
• I went too long without
validating my ideas
simplisafe
Slide 502
Slide 502 text
Dear technical managers,
Slide 503
Slide 503 text
Dear former developers,
Slide 504
Slide 504 text
Everything seems
simple at a distance
Slide 505
Slide 505 text
Pattern recognition
yields generic advice
Slide 506
Slide 506 text
Trust the people
closest to the work
Slide 507
Slide 507 text
⛳ ⛪
Inadequacy
⛳
Slide 508
Slide 508 text
⛳ ⛪
Inadequacy
⛳
Slide 509
Slide 509 text
⛳ ⛪
Inadequacy
⛳
Slide 510
Slide 510 text
⛳ ⛪
Indignation
⛪
Slide 511
Slide 511 text
I'm a worrier
Slide 512
Slide 512 text
No content
Slide 513
Slide 513 text
No content
Slide 514
Slide 514 text
No content
Slide 515
Slide 515 text
No content
Slide 516
Slide 516 text
No content
Slide 517
Slide 517 text
No content
Slide 518
Slide 518 text
No content
Slide 519
Slide 519 text
No content
Slide 520
Slide 520 text
☺
Slide 521
Slide 521 text
Six years pass…
Slide 522
Slide 522 text
No content
Slide 523
Slide 523 text
No content
Slide 524
Slide 524 text
No content
Slide 525
Slide 525 text
❓
Slide 526
Slide 526 text
No content
Slide 527
Slide 527 text
No content
Slide 528
Slide 528 text
SPoFaaS
Slide 529
Slide 529 text
SPoFaaS
(single point of failure as a service)
Slide 530
Slide 530 text
No content
Slide 531
Slide 531 text
No content
Slide 532
Slide 532 text
No content
Slide 533
Slide 533 text
No content
Slide 534
Slide 534 text
No content
Slide 535
Slide 535 text
No content
Slide 536
Slide 536 text
No content
Slide 537
Slide 537 text
No content
Slide 538
Slide 538 text
No content
Slide 539
Slide 539 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
Slide 540
Slide 540 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
security matters
Slide 541
Slide 541 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
security matters
am not an expert
Slide 542
Slide 542 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
security matters
am not an expert
feel a little safer
• I (almost) have a dashboard
• Locally encrypted
fine_ants
Slide 562
Slide 562 text
• I (almost) have a dashboard
• Locally encrypted
• Put Selenium to good use
fine_ants
Slide 563
Slide 563 text
• I (almost) have a dashboard
• Locally encrypted
• Put Selenium to good use
• Not a generalizable app
fine_ants
Slide 564
Slide 564 text
No shame in
"hobby-grade"
Slide 565
Slide 565 text
Selfish little toy apps
inspired many of us
Slide 566
Slide 566 text
⛳ ⛪
Indignation
⛪
Slide 567
Slide 567 text
⛳ ⛪
Indignation
⛪
Slide 568
Slide 568 text
⛳ ⛪
Indignation
⛪
Slide 569
Slide 569 text
No content
Slide 570
Slide 570 text
gimme
Slide 571
Slide 571 text
like stunt doubles
Test doubles are
Slide 572
Slide 572 text
like stunt doubles
Test doubles are
Slide 573
Slide 573 text
like stunt doubles
Test doubles are
Slide 574
Slide 574 text
like stunt doubles
Test doubles are
☁
Slide 575
Slide 575 text
like stunt doubles
Test doubles are
☁
Slide 576
Slide 576 text
like stunt doubles
Test doubles are
☁
✅
Slide 577
Slide 577 text
No content
Slide 578
Slide 578 text
☁
Slide 579
Slide 579 text
☁
Slide 580
Slide 580 text
☁
Slide 581
Slide 581 text
☁
Slide 582
Slide 582 text
☁
Slide 583
Slide 583 text
☁
Slide 584
Slide 584 text
☁
Slide 585
Slide 585 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
Slide 586
Slide 586 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
users are in pain
Slide 587
Slide 587 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
users are in pain
can't beat Sinon
Slide 588
Slide 588 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
users are in pain
can't beat Sinon
be less grouchy
Slide 589
Slide 589 text
My entire career may hinge
on two or three concepts
Slide 590
Slide 590 text
No content
Slide 591
Slide 591 text
No content
Slide 592
Slide 592 text
No content
Slide 593
Slide 593 text
No content
Slide 594
Slide 594 text
∞
Slide 595
Slide 595 text
No content
Slide 596
Slide 596 text
.js
Slide 597
Slide 597 text
npm install testdouble
Slide 598
Slide 598 text
http://is.gd/happytdd
Slide 599
Slide 599 text
https://is.gd/td_vs_sinon
Slide 600
Slide 600 text
testdouble.js
Slide 601
Slide 601 text
• Works pretty well
testdouble.js
Slide 602
Slide 602 text
• Works pretty well
• Shares what we've
learned clearly
testdouble.js
Slide 603
Slide 603 text
• Works pretty well
• Shares what we've
learned clearly
• Better than cynicism
testdouble.js
Slide 604
Slide 604 text
Not getting through?
Tweak your message
Slide 605
Slide 605 text
Not winning !=
Not worthwhile
Slide 606
Slide 606 text
Criticism is easier
than contribution
Slide 607
Slide 607 text
⛳ ⛪
Indignation
⛪
Slide 608
Slide 608 text
⛳ ⛪
Indignation
⛪
Slide 609
Slide 609 text
⛳ ⛪
Indignation
⛪
Slide 610
Slide 610 text
I emoji
Slide 611
Slide 611 text
Creativity is serious work
Slide 612
Slide 612 text
Open source:
Slide 613
Slide 613 text
You create,
Open source:
Slide 614
Slide 614 text
You create,
we depend
Open source:
Slide 615
Slide 615 text
No content
Slide 616
Slide 616 text
No content
Slide 617
Slide 617 text
❤
Slide 618
Slide 618 text
❤
Slide 619
Slide 619 text
❤
Slide 620
Slide 620 text
❤
Slide 621
Slide 621 text
❤
Slide 622
Slide 622 text
Hating your own creations
Slide 623
Slide 623 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
Slide 624
Slide 624 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
exploited & exhausted
Slide 625
Slide 625 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
exploited & exhausted
can't escape it
Slide 626
Slide 626 text
express indignation
admit incompetence
lessen inadequacy
I feel ___________, but I
____________
. Maybe if I
build it, I'll _____________
.
exploited & exhausted
can't escape it
find a fresh start
Slide 627
Slide 627 text
Build something no
business would want
Slide 628
Slide 628 text
…or just license
everything GPL
Slide 629
Slide 629 text
…or just license
everything GPL
Slide 630
Slide 630 text
emoruby
Slide 631
Slide 631 text
❤
Slide 632
Slide 632 text
❤
Slide 633
Slide 633 text
❤
Slide 634
Slide 634 text
❤
Slide 635
Slide 635 text
❤
Slide 636
Slide 636 text
❤
Slide 637
Slide 637 text
❤
Slide 638
Slide 638 text
❤
Slide 639
Slide 639 text
❤
❤▪▪
Slide 640
Slide 640 text
❤
❤▪▪
Slide 641
Slide 641 text
class Heart
def wave
puts "smiley earth_asia"
end
end
Heart.new.wave
Slide 642
Slide 642 text
emoruby
❤
Slide 643
Slide 643 text
• It's real dumb
emoruby
❤
Slide 644
Slide 644 text
• It's real dumb
• Brought me joy
emoruby
❤
Slide 645
Slide 645 text
• It's real dumb
• Brought me joy
• Zero issues this year
emoruby
❤
Slide 646
Slide 646 text
It's okay to build
things for yourself
Slide 647
Slide 647 text
No content
Slide 648
Slide 648 text
No content
Slide 649
Slide 649 text
No content
Slide 650
Slide 650 text
It's okay to build
things for yourself
Slide 651
Slide 651 text
It's okay to build
things for yourself
fun
Slide 652
Slide 652 text
⛳ ⛪
Indignation
⛪
Slide 653
Slide 653 text
⛳ ⛪
Indignation
⛪
Slide 654
Slide 654 text
⛳ ⛪
Indignation
⛪
Slide 655
Slide 655 text
⛳
⛪
Inadequacy Indignation
Incompetence
Slide 656
Slide 656 text
⛳
⛪
Inadequacy Indignation
Incompetence
Slide 657
Slide 657 text
I s you
Slide 658
Slide 658 text
No content
Slide 659
Slide 659 text
No content
Slide 660
Slide 660 text
No content
Slide 661
Slide 661 text
No content
Slide 662
Slide 662 text
No content
Slide 663
Slide 663 text
No content
Slide 664
Slide 664 text
No content
Slide 665
Slide 665 text
fine_ants
Slide 666
Slide 666 text
fine_ants
Slide 667
Slide 667 text
No content
Slide 668
Slide 668 text
Maybe you're right
Slide 669
Slide 669 text
Creativity isn't
for everyone
Slide 670
Slide 670 text
If you're ,
Slide 671
Slide 671 text
perfectly content
If you're ,
Slide 672
Slide 672 text
totally fulfilled
If you're ,
Slide 673
Slide 673 text
OK with status quo
If you're ,
Slide 674
Slide 674 text
OK with status quo
If you're
why change things?
,
Slide 675
Slide 675 text
OK with status quo
If you're
why change things?
,
⛱
Slide 676
Slide 676 text
Negative feels are a symptom
Slide 677
Slide 677 text
Root cause analysis
Slide 678
Slide 678 text
Root cause analysis
• Wrong tool for the job?
Slide 679
Slide 679 text
Root cause analysis
• Wrong tool for the job?
• Technology-to-practice friction?
Slide 680
Slide 680 text
Root cause analysis
• Wrong tool for the job?
• Technology-to-practice friction?
• Work can't offer what you need?
Slide 681
Slide 681 text
Root cause analysis
• Wrong tool for the job?
• Technology-to-practice friction?
• Work can't offer what you need?
• Internal baggage to get over?
Slide 682
Slide 682 text
Reflect on your feels
Slide 683
Slide 683 text
Reflect on your feels
Slide 684
Slide 684 text
Your async brain
Slide 685
Slide 685 text
Your async brain
Slide 686
Slide 686 text
Your async brain
Slide 687
Slide 687 text
Your async brain
Slide 688
Slide 688 text
Your async brain
Slide 689
Slide 689 text
Your async brain
Slide 690
Slide 690 text
No content
Slide 691
Slide 691 text
❓
Slide 692
Slide 692 text
❓
Slide 693
Slide 693 text
No content
Slide 694
Slide 694 text
No content
Slide 695
Slide 695 text
No content
Slide 696
Slide 696 text
No content
Slide 697
Slide 697 text
No content
Slide 698
Slide 698 text
No content
Slide 699
Slide 699 text
No content
Slide 700
Slide 700 text
No content
Slide 701
Slide 701 text
✅
Slide 702
Slide 702 text
Find your outlet
Slide 703
Slide 703 text
Find your outlet
*
Slide 704
Slide 704 text
Find your outlet
*
*it may not involve software
Slide 705
Slide 705 text
Tomorrow!
Slide 706
Slide 706 text
⛱
Tomorrow!
Slide 707
Slide 707 text
Tomorrow!
Slide 708
Slide 708 text
Test Smells
Tomorrow!
Slide 709
Slide 709 text
I'm @searls—tell me
what you think
!
Slide 710
Slide 710 text
We need creative types to
help improve the industry.
join@testdouble.com
Slide 711
Slide 711 text
Know any teams looking
for great programmers?
hello@testdouble.com
Slide 712
Slide 712 text
Thank you!
Slide 713
Slide 713 text
Credits:
Pole Vault by Mister Pixel from the Noun Project
Thought Bubble by Tim Smith from the Noun Project
Brain by Guillaume Bahri from the Noun Project