Slide 1

Slide 1 text

scratch an itch how to

Slide 2

Slide 2 text

scratch an itch (in 200 repos or less) how to

Slide 3

Slide 3 text

@searls is my real name.

Slide 4

Slide 4 text

@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

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

Slide 207

Slide 207 text

Fear of bad code can paralyze you

Slide 208

Slide 208 text

Recognize when it's safe to make a mess

Slide 209

Slide 209 text

⛳ ⛪ Incompetence

Slide 210

Slide 210 text

⛳ ⛪ Incompetence

Slide 211

Slide 211 text

⛳ ⛪ Incompetence

Slide 212

Slide 212 text

The Web

Slide 213

Slide 213 text

The Web vs.

Slide 214

Slide 214 text

The Web ⛓ The Metal vs.

Slide 215

Slide 215 text

I tried to "go native"

Slide 216

Slide 216 text

No content

Slide 217

Slide 217 text

No content

Slide 218

Slide 218 text

Slide 219

Slide 219 text

No content

Slide 220

Slide 220 text

No content

Slide 221

Slide 221 text

No content

Slide 222

Slide 222 text

Slide 223

Slide 223 text

No content

Slide 224

Slide 224 text

No content

Slide 225

Slide 225 text

No content

Slide 226

Slide 226 text

Slide 227

Slide 227 text

No content

Slide 228

Slide 228 text

No content

Slide 229

Slide 229 text

I was too dumb for native apps

Slide 230

Slide 230 text

But then, one day…

Slide 231

Slide 231 text

No content

Slide 232

Slide 232 text

No content

Slide 233

Slide 233 text

Now I really wanted to go native

Slide 234

Slide 234 text

Now I really wanted to go native

Slide 235

Slide 235 text

Now I really wanted to go native

Slide 236

Slide 236 text

Now I really wanted to go native

Slide 237

Slide 237 text

No content

Slide 238

Slide 238 text

• Beautiful

Slide 239

Slide 239 text

• Beautiful • Innovative

Slide 240

Slide 240 text

• Beautiful • Innovative • Life-altering

Slide 241

Slide 241 text

• Beautiful • Innovative • Life-altering • Impossibly slow

Slide 242

Slide 242 text

No content

Slide 243

Slide 243 text

3 minutes ⏲

Slide 244

Slide 244 text

There was no "Mobile Web"

Slide 245

Slide 245 text

No such thing as "Responsive Design"

Slide 246

Slide 246 text

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

Slide 250

Slide 250 text

No content

Slide 251

Slide 251 text

No content

Slide 252

Slide 252 text

Slide 253

Slide 253 text

libxml2

Slide 254

Slide 254 text

libxml2 Objects

Slide 255

Slide 255 text

libxml2 Objects

Slide 256

Slide 256 text

libxml2 Objects

Slide 257

Slide 257 text

libxml2 Objects Build UI

Slide 258

Slide 258 text

libxml2 Objects Build UI

Slide 259

Slide 259 text

No content

Slide 260

Slide 260 text

• 66% faster! Legible!

Slide 261

Slide 261 text

• 66% faster! Legible! • Full-featured

Slide 262

Slide 262 text

• 66% faster! Legible! • Full-featured • 1st OSS contribution

Slide 263

Slide 263 text

• 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: '[email protected]',

Slide 492

Slide 492 text

var simplisafe = require('simplisafe') 
 simplisafe({ user: '[email protected]', password: '1234'

Slide 493

Slide 493 text

var simplisafe = require('simplisafe') 
 simplisafe({ user: '[email protected]', password: '1234' }, function (er, client) {

Slide 494

Slide 494 text

var simplisafe = require('simplisafe') 
 simplisafe({ user: '[email protected]', password: '1234' }, function (er, client) { client.setState('away')

Slide 495

Slide 495 text

var simplisafe = require('simplisafe') 
 simplisafe({ user: '[email protected]', password: '1234' }, function (er, client) { client.setState('away') })

Slide 496

Slide 496 text

var simplisafe = require('simplisafe') 
 simplisafe({ user: '[email protected]', 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

Slide 543

Slide 543 text

No content

Slide 544

Slide 544 text

ants

Slide 545

Slide 545 text

ne_ants

Slide 546

Slide 546 text

fine_ants

Slide 547

Slide 547 text

FineAnts.download("vanguard", {

Slide 548

Slide 548 text

FineAnts.download("vanguard", { user: "janelastname",

Slide 549

Slide 549 text

FineAnts.download("vanguard", { user: "janelastname", password: "password"

Slide 550

Slide 550 text

FineAnts.download("vanguard", { user: "janelastname", password: "password" })

Slide 551

Slide 551 text

FineAnts.download("vanguard", { user: "janelastname", password: "password" })

Slide 552

Slide 552 text

FineAnts.download("vanguard", { user: "janelastname", password: "password" }) [{

Slide 553

Slide 553 text

FineAnts.download("vanguard", { user: "janelastname", password: "password" }) [{ id: "12345",

Slide 554

Slide 554 text

FineAnts.download("vanguard", { user: "janelastname", password: "password" }) [{ id: "12345", amount: 12.34

Slide 555

Slide 555 text

FineAnts.download("vanguard", { user: "janelastname", password: "password" }) [{ id: "12345", amount: 12.34 }]

Slide 556

Slide 556 text

fine_ants_app http://localhost:3000

Slide 557

Slide 557 text

fine_ants_app http://localhost:3000

Slide 558

Slide 558 text

fine_ants_app http://localhost:3000

Slide 559

Slide 559 text

fine_ants

Slide 560

Slide 560 text

• I (almost) have a dashboard fine_ants

Slide 561

Slide 561 text

• 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. [email protected]

Slide 711

Slide 711 text

Know any teams looking for great programmers? [email protected]

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