$30 off During Our Annual Pro Sale. View Details »

How to Scratch an Itch (in 200 Repos or Less)

How to Scratch an Itch (in 200 Repos or Less)

Justin Searls

November 01, 2016
Tweet

More Decks by Justin Searls

Other Decks in Programming

Transcript

  1. scratch
    an itch
    how
    to

    View Slide

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

    View Slide

  3. @searls is my real name.

    View Slide

  4. @searls is my real name.
    My parents were on-brand.

    View Slide

  5. This is my 2011 face!

    View Slide

  6. This is my 2011 face!
    Stuck with it forever.

    View Slide

  7. I co-founded @testdouble.

    View Slide

  8. I co-founded @testdouble.
    It's like consulting, but good!

    View Slide

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

    View Slide

  10. Creativity

    View Slide

  11. View Slide

  12. OK!

    View Slide

  13. So, what's
    creativity?

    View Slide

  14. View Slide

  15. Is creativity passion?

    View Slide

  16. Passion is hot right now!

    View Slide

  17. Passion is hot right now!

    View Slide

  18. Passion is hot right now!

    View Slide

  19. Passion is hot right now!

    View Slide

  20. Passion is hot right now!

    View Slide

  21. Passion is hot right now!

    View Slide

  22. Passion is hot right now!

    View Slide

  23. Passion is hot right now!

    View Slide

  24. Passion is hot right now!

    View Slide

  25. Passion is hot right now!

    View Slide

  26. Passion's hot right now!

    View Slide

  27. Passion's hot right now!

    View Slide

  28. Nope, not passion!

    View Slide

  29. Is creativity art?

    View Slide

  30. View Slide

  31. View Slide

  32. Ehh…

    View Slide

  33. Is creativity vision?

    View Slide

  34. View Slide



  35. View Slide

  36. View Slide

  37. Vision's not enough.

    View Slide

  38. View Slide

  39. View Slide

  40. View Slide

  41. Are YOU creative?

    View Slide

  42. Are YOU creative?
    Incredibly passionate

    View Slide

  43. Are YOU creative?
    Incredibly passionate
    Create beautiful things

    View Slide

  44. Are YOU creative?
    Incredibly passionate
    Create beautiful things
    Can see into the future

    View Slide

  45. Are YOU creative?
    Incredibly passionate
    Create beautiful things
    Can see into the future

    View Slide

  46. Are YOU creative?
    Incredibly passionate
    Create beautiful things
    Can see into the future


    View Slide

  47. Are YOU creative?
    Incredibly passionate
    Create beautiful things
    Can see into the future



    View Slide

  48. View Slide

  49. View Slide

  50. Creative Spark

    View Slide

  51. View Slide



  52. View Slide




  53. View Slide



  54. View Slide




  55. View Slide





  56. View Slide






  57. View Slide






  58. View Slide





  59. View Slide

  60. View Slide



  61. View Slide




  62. View Slide



  63. View Slide



  64. Creativity is a
    chronic illness.

    View Slide



  65. Creativity is a
    chronic illness.

    View Slide

  66. View Slide

  67. View Slide

  68. View Slide

  69. View Slide

  70. View Slide

  71. Negative emotions

    View Slide

  72. Negative emotions
    Positive outcomes

    View Slide

  73. View Slide

  74. View Slide

  75. View Slide

  76. At the beginning
    of my career…

    View Slide

  77. View Slide

  78. View Slide









  79. View Slide



  80. View Slide




  81. View Slide

  82. It took me years
    to realize this:

    View Slide

  83. I needed an outlet

    View Slide

  84. Production wasn't a
    great creative outlet


    View Slide

  85. View Slide

  86. View Slide

  87. View Slide

  88. View Slide

  89. View Slide

  90. View Slide

  91. View Slide


  92. We create it, but it's not our own



    View Slide

  93. View Slide





  94. Me

    View Slide





  95. Me My
    team

    View Slide

  96. View Slide

  97. View Slide

  98. View Slide

  99. View Slide

  100. View Slide

  101. View Slide

  102. View Slide

  103. View Slide

  104. View Slide

  105. View Slide

  106. View Slide

  107. View Slide

  108. Dev QA Prod


    View Slide

  109. Dev QA Prod



    View Slide

  110. Dev QA Prod




    View Slide

  111. Dev QA Prod



    View Slide

  112. Dev QA Prod




    View Slide

  113. Dev QA Prod





    View Slide

  114. Dev QA Prod





    View Slide

  115. Dev QA Prod






    View Slide

  116. Dev QA Prod







    View Slide

  117. Dev QA Prod








    View Slide

  118. Dev QA Prod









    View Slide

  119. Dev QA Prod









    Don't cede control of your
    happiness to someone else

    View Slide

  120. Create space
    for creativity

    View Slide

  121. One morning…

    View Slide

  122. View Slide

  123. View Slide

  124. View Slide



  125. View Slide



  126. *hack*
    *hack*
    *hack*
    *hack*

    View Slide



  127. *hack*
    *hack*
    *hack*
    *hack*

    View Slide



  128. *hack*
    *hack*
    *hack*
    *hack*


    View Slide



  129. View Slide




  130. View Slide

  131. View Slide

  132. View Slide

  133. View Slide

  134. View Slide


  135. Main Project

    View Slide


  136. Main Project

    View Slide


  137. Main Project

    Side Project

    View Slide

  138. Burning the candle at both ends

    View Slide

  139. Burning the candle at both ends

    View Slide


  140. Why do I do this?

    View Slide


  141. Why do I do this?

    View Slide


  142. Why do I do this?

    View Slide


  143. Why do I do this?

    View Slide


  144. Why do I do this?

    View Slide


  145. Why do I do this?

    View Slide


  146. Why do I do this?

    View Slide


  147. Why do I do this?

    View Slide


  148. Why do I do this?

    View Slide


  149. Why do I do this?

    View Slide


  150. Why do I do this?

    View Slide


  151. Why do I do this?

    View Slide


  152. Why do I do this?

    View Slide



  153. View Slide



  154. View Slide



  155. View Slide



  156. Inadequacy

    View Slide



  157. View Slide



  158. View Slide


  159. View Slide


  160. Indignation

    View Slide



  161. View Slide



  162. View Slide

  163. View Slide


  164. Incompetence

    View Slide

  165. Inadequacy
    Indignation
    Incompetence

    View Slide

  166. Inadequacy
    Indignation
    Incompetence
    people to
    imitate

    View Slide

  167. Inadequacy
    Indignation
    Incompetence
    people to
    imitate
    something
    to say

    View Slide

  168. Inadequacy
    Indignation
    Incompetence
    room to
    improve
    people to
    imitate
    something
    to say

    View Slide

  169. Means
    Inadequacy
    Indignation
    Incompetence
    room to
    improve
    something
    to say

    View Slide

  170. Means
    Inadequacy
    Indignation
    Incompetence
    room to
    improve
    Motive

    View Slide

  171. Means
    Inadequacy
    Indignation
    Incompetence
    Motive
    Opportunity

    View Slide



  172. View Slide



  173. Privilege!

    View Slide

  174. View Slide

  175. View Slide



  176. Inadequacy Indignation Incompetence

    View Slide


  177. Creative ideas

    View Slide

  178. I feel ___________, but I

    View Slide

  179. express indignation
    I feel ___________, but I

    View Slide

  180. express indignation
    admit incompetence
    I feel ___________, but I
    ____________
    . Maybe if I

    View Slide

  181. express indignation
    admit incompetence
    lessen inadequacy
    I feel ___________, but I
    ____________
    . Maybe if I
    build it, I'll _____________
    .

    View Slide


  182. ⛳ ⛪
    Incompetence

    View Slide

  183. Book-learning

    View Slide




  184. Book-learning

    View Slide



  185. vs.
    Book-learning

    View Slide




  186. vs.
    Capitalism
    Book-learning

    View Slide

  187. View Slide


  188. We need a new
    citation editor.

    View Slide

  189. express indignation
    admit incompetence
    lessen inadequacy
    I feel ___________, but I
    ____________
    . Maybe if I
    build it, I'll _____________
    .

    View Slide

  190. express indignation
    admit incompetence
    lessen inadequacy
    I feel ___________, but I
    ____________
    . Maybe if I
    build it, I'll _____________
    .
    I don't need CompSci

    View Slide

  191. 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

    View Slide

  192. 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

    View Slide

  193. View Slide

  194. I did it!

    View Slide

  195. Accomplishments:

    View Slide

  196. Accomplishments:
    • All 3 major style guides

    View Slide

  197. Accomplishments:
    • All 3 major style guides
    • Dozens of types of sources

    View Slide

  198. Accomplishments:
    • All 3 major style guides
    • Dozens of types of sources
    • Complete account system

    View Slide

  199. Accomplishments:
    • All 3 major style guides
    • Dozens of types of sources
    • Complete account system
    • Bibliography creation & export

    View Slide

  200. Accomplishments:
    • All 3 major style guides
    • Dozens of types of sources
    • Complete account system
    • Bibliography creation & export
    • Millions of users

    View Slide

  201. I made it up as I went!

    View Slide

  202. Very minor downsides:

    View Slide

  203. Very minor downsides:
    • Completely insecure

    View Slide

  204. Very minor downsides:
    • Completely insecure
    • 100% manual testing

    View Slide

  205. Very minor downsides:
    • Completely insecure
    • 100% manual testing
    • GB's of daily server warnings

    View Slide

  206. Very minor downsides:
    • Completely insecure
    • 100% manual testing
    • GB's of daily server warnings
    • A 16,000 line PHP file

    View Slide


  207. Fear of bad code
    can paralyze you

    View Slide


  208. Recognize when it's
    safe to make a mess

    View Slide


  209. ⛳ ⛪
    Incompetence

    View Slide


  210. ⛳ ⛪
    Incompetence

    View Slide


  211. ⛳ ⛪
    Incompetence

    View Slide

  212. The Web


    View Slide

  213. The Web
    vs.

    View Slide

  214. The Web

    The Metal
    vs.

    View Slide

  215. I tried to "go native"

    View Slide

  216. View Slide

  217. View Slide


  218. View Slide

  219. View Slide

  220. View Slide

  221. View Slide


  222. View Slide

  223. View Slide

  224. View Slide

  225. View Slide


  226. View Slide

  227. View Slide

  228. View Slide


  229. I was too dumb for native apps

    View Slide

  230. But then, one day…

    View Slide

  231. View Slide

  232. View Slide

  233. Now I really wanted to go native

    View Slide

  234. Now I really wanted to go native


    View Slide

  235. Now I really wanted to go native

    View Slide

  236. Now I really wanted to go native

    View Slide

  237. View Slide

  238. • Beautiful

    View Slide

  239. • Beautiful
    • Innovative

    View Slide

  240. • Beautiful
    • Innovative
    • Life-altering

    View Slide

  241. • Beautiful
    • Innovative
    • Life-altering
    • Impossibly slow

    View Slide

  242. View Slide

  243. 3 minutes

    View Slide

  244. There was no
    "Mobile Web"

    View Slide

  245. No such thing as
    "Responsive Design"

    View Slide

  246. express indignation
    admit incompetence
    lessen inadequacy
    I feel ___________, but I
    ____________
    . Maybe if I
    build it, I'll _____________
    .

    View Slide

  247. express indignation
    admit incompetence
    lessen inadequacy
    I feel ___________, but I
    ____________
    . Maybe if I
    build it, I'll _____________
    .
    mobile web is a joke

    View Slide

  248. 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

    View Slide

  249. 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

    View Slide

  250. View Slide

  251. View Slide



  252. View Slide



  253. libxml2

    View Slide



  254. libxml2 Objects

    View Slide



  255. libxml2 Objects

    View Slide



  256. libxml2 Objects

    View Slide



  257. libxml2 Objects

    Build UI

    View Slide



  258. libxml2 Objects

    Build UI

    View Slide

  259. View Slide

  260. • 66% faster! Legible!

    View Slide

  261. • 66% faster! Legible!
    • Full-featured

    View Slide

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

    View Slide

  263. • 66% faster! Legible!
    • Full-featured
    • 1st OSS contribution
    • 1st user group talk

    View Slide

  264. • 66% faster! Legible!
    • Full-featured
    • 1st OSS contribution
    • 1st user group talk
    • Rejected by Apple

    View Slide

  265. View Slide

  266. View Slide


  267. View Slide

  268. Mission Accomplished

    View Slide

  269. Learning simple stuff is easy…

    View Slide

  270. Learning simple stuff is easy…
    …if you can fit
    it inside a day

    View Slide

  271. Learning something bigger?

    View Slide

  272. Learning something bigger?

    View Slide

  273. Learning something bigger?

    View Slide

  274. Learning something bigger?

    View Slide

  275. Learning something bigger?

    Then you need a real purpose.

    View Slide

  276. Learning something bigger?

    Then you need a real purpose.

    View Slide

  277. Learning something bigger?

    Then you need a real purpose.

    View Slide

  278. Find the smallest thing
    you can caremad over


    View Slide


  279. ⛳ ⛪
    Incompetence

    View Slide


  280. ⛳ ⛪
    Incompetence

    View Slide


  281. ⛳ ⛪
    Incompetence

    View Slide

  282. Java kids be like

    View Slide

  283. Java kids be like

    View Slide

  284. Ruby kids be like

    View Slide

  285. Ruby kids be like

    View Slide

  286. View Slide

  287. Java

    View Slide

  288. Java

    View Slide

  289. Ruby

    View Slide

  290. Ruby

    View Slide

  291. Programming

    View Slide

  292. Dynamic Programming

    View Slide

  293. Meta-programming

    View Slide

  294. My first Ruby team

    View Slide

  295. My first Ruby team




    View Slide


  296. My first Ruby team's tests



    View Slide


  297. My first Ruby team's tests



    View Slide

  298. dog = double()

    View Slide

  299. dog = double()
    dog.should_receive(:wag)

    View Slide

  300. dog = double()
    dog.should_receive(:wag)
    .with(:tail)

    View Slide

  301. dog = double()
    dog.should_receive(:wag)
    .with(:tail)

    subject.pet(dog)

    View Slide

  302. dog = double()
    dog.should_receive(:wag)
    .with(:tail)

    subject.pet(dog)

    View Slide

  303. dog = double()
    dog.should_receive(:wag)
    .with(:tail)

    subject.pet(dog)
    No type awareness

    View Slide

  304. dog = double()
    dog.should_receive(:wag)
    .with(:tail)

    subject.pet(dog)
    Out of order

    View Slide

  305. dog = double()
    dog.should_receive(:wag)
    .with(:tail)

    subject.pet(dog)
    Verbose API

    View Slide

  306. View Slide

  307. express indignation
    admit incompetence
    lessen inadequacy
    I feel ___________, but I
    ____________
    . Maybe if I
    build it, I'll _____________
    .

    View Slide

  308. express indignation
    admit incompetence
    lessen inadequacy
    I feel ___________, but I
    ____________
    . Maybe if I
    build it, I'll _____________
    .
    mad at these mocks

    View Slide

  309. 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

    View Slide

  310. 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

    View Slide

  311. Java Ruby
    Cargo-cult

    View Slide

  312. Java Ruby

    View Slide

  313. Java Ruby

    View Slide

  314. Java Ruby

    View Slide

  315. Learned Humility

    View Slide

  316. Learned Humility

    View Slide

  317. Learned Humility

    View Slide

  318. Learned Humility

    View Slide

  319. dog = gimme(Dog)

    View Slide

  320. dog = gimme(Dog)

    subject.pet(dog)

    View Slide

  321. dog = gimme(Dog)

    subject.pet(dog)

    verify(dog).wag(:tail)

    View Slide

  322. gimme

    View Slide

  323. • Had type awareness
    gimme

    View Slide

  324. • Had type awareness
    • Preserves test order
    gimme

    View Slide

  325. • Had type awareness
    • Preserves test order
    • Clever, terse APIs
    gimme

    View Slide

  326. • Had type awareness
    • Preserves test order
    • Clever, terse APIs
    • Nobody adopted it
    gimme

    View Slide

  327. • Had type awareness
    • Preserves test order
    • Clever, terse APIs
    • Nobody adopted it
    • Influenced competitors
    gimme

    View Slide

  328. Getting out of
    the line of fire

    View Slide

  329. Working code

    can sell ideas

    View Slide

  330. Working code

    can sell ideas

    +

    View Slide

  331. Working code


    can sell ideas
    =

    +

    View Slide

  332. Ideas require no
    maintenance!

    View Slide


  333. ⛳ ⛪
    Incompetence

    View Slide


  334. ⛳ ⛪
    Incompetence

    View Slide


  335. ⛳ ⛪
    Incompetence

    View Slide


  336. ⛳ ⛪
    Inadequacy


    View Slide

  337. Midwestern
    programming

    View Slide

  338. View Slide

  339. View Slide

  340. View Slide

  341. View Slide

  342. View Slide

  343. View Slide

  344. View Slide

  345. I'm not great at cocktail parties

    View Slide

  346. I had some rockstar envy

    View Slide

  347. express indignation
    admit incompetence
    lessen inadequacy
    I feel ___________, but I
    ____________
    . Maybe if I
    build it, I'll _____________
    .

    View Slide

  348. express indignation
    admit incompetence
    lessen inadequacy
    I feel ___________, but I
    ____________
    . Maybe if I
    build it, I'll _____________
    .
    my work isn't exciting

    View Slide

  349. 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

    View Slide

  350. 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

    View Slide

  351. mustachify.me

    View Slide

  352. mustachify.me

    View Slide

  353. mustachify.me

    View Slide

  354. "Let's think bigger"

    View Slide

  355. "Let's think bigger"

    View Slide

  356. Must Stache

    View Slide

  357. Must Stache
    Cory

    View Slide

  358. Must Stache
    Cory

    View Slide

  359. Must Stache
    Cory

    View Slide

  360. • Posted to a forum at 11pm

    View Slide

  361. • Posted to a forum at 11pm


    View Slide

  362. • Posted to a forum at 11pm


    • 12,000 views (~3,000 installs)

    View Slide

  363. • Posted to a forum at 11pm


    • 12,000 views (~3,000 installs)
    • 40 pages per user/hour

    View Slide

  364. • Posted to a forum at 11pm


    • 12,000 views (~3,000 installs)
    • 40 pages per user/hour
    • 42 images/page

    View Slide

  365. • 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

    View Slide

  366. View Slide

  367. Serverless!

    View Slide

  368. Must Stache
    Cory

    View Slide

  369. Must Stache
    Cory

    View Slide

  370. Must Stache
    Cory
    Cory

    View Slide

  371. Must Stache
    Cory
    Cory

    View Slide

  372. Must Stache
    Cory
    Cory

    View Slide

  373. Many months later

    View Slide

  374. View Slide

  375. View Slide

  376. View Slide

  377. View Slide

  378. View Slide

  379. View Slide


  380. View Slide

  381. View Slide


  382. View Slide


  383. ✉ ✉
    ✉ ✉
    ✉ ✉




    ✉✉

    ✉ ✉






    View Slide

  384. This wasn't fan mail

    View Slide

  385. View Slide

  386. • Built a popular thing

    View Slide

  387. • Built a popular thing
    • Was unaware of that popularity

    View Slide

  388. • Built a popular thing
    • Was unaware of that popularity
    • Made someone else millions

    View Slide

  389. • Built a popular thing
    • Was unaware of that popularity
    • Made someone else millions (?)

    View Slide

  390. • Built a popular thing
    • Was unaware of that popularity
    • Made someone else millions
    • Made thousands of users angry
    (?)

    View Slide

  391. • Built a popular thing
    • Was unaware of that popularity
    • Made someone else millions
    • Made thousands of users angry
    • Left with no recourse
    (?)

    View Slide

  392. Serverless isn't

    View Slide

  393. Popularity without
    purpose is toxic

    View Slide


  394. ⛳ ⛪
    Inadequacy


    View Slide


  395. ⛳ ⛪
    Inadequacy


    View Slide


  396. ⛳ ⛪
    Inadequacy


    View Slide

  397. I was on a legacy
    rescue project

    View Slide

  398. I was on a legacy
    rescue project
    I was on a legacy
    rescue project

    View Slide

  399. I was on a legacy
    rescue project
    I was on a legacy
    rescue project
    My kids will inherit it

    View Slide

  400. I was on a legacy
    rescue project
    I was on a legacy
    rescue project

    View Slide

  401. I was on a legacy
    rescue project
    I was on a legacy
    rescue project
    I wanted to be rescued

    View Slide


  402. View Slide



  403. View Slide


  404. View Slide

  405. Can I program anything useful
    in under 2 months anymore?

    View Slide

  406. to-do apps

    View Slide

  407. Project:
    Plaintext to-dos

    View Slide

  408. Project:
    - Task A
    Plaintext to-dos

    View Slide

  409. Project:
    - Task A
    - Task B
    Plaintext to-dos

    View Slide

  410. Project:
    - Task A
    - Task B
    - Task C
    Plaintext to-dos

    View Slide

  411. Project:
    / Task A
    - Task B
    - Task C
    Plaintext to-dos

    View Slide

  412. Project:
    / Task A
    # Task B
    - Task C
    Plaintext to-dos

    View Slide

  413. Project:
    / Task A
    # Task B
    - Task C {6/10/2011}
    Plaintext to-dos

    View Slide

  414. express indignation
    admit incompetence
    lessen inadequacy
    I feel ___________, but I
    ____________
    . Maybe if I
    build it, I'll _____________
    .

    View Slide

  415. express indignation
    admit incompetence
    lessen inadequacy
    I feel ___________, but I
    ____________
    . Maybe if I
    build it, I'll _____________
    .
    I hate all to-do apps

    View Slide

  416. 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

    View Slide

  417. 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

    View Slide

  418. A quest!

    View Slide

  419. Build a great to-do app…

    View Slide

  420. …in under 24 hours

    View Slide

  421. doing-it:
    doing-it app

    View Slide

  422. doing-it:
    - make a div contenteditable
    doing-it app

    View Slide

  423. doing-it:
    - make a div contenteditable
    - dump it in localStorage
    doing-it app

    View Slide

  424. doing-it:
    - make a div contenteditable
    - dump it in localStorage
    - read from localStorage
    doing-it app

    View Slide

  425. doing-it:
    - make a div contenteditable
    - dump it in localStorage
    - read from localStorage
    - use it to track the rest
    doing-it app

    View Slide

  426. I did it!

    View Slide

  427. View Slide

  428. View Slide


  429. doing-it

    View Slide

  430. • Finished within 1 day ✅
    doing-it

    View Slide

  431. • Finished within 1 day
    • Renewed confidence

    doing-it

    View Slide

  432. • Finished within 1 day
    • Renewed confidence
    • Still works ( Heroku!)

    doing-it

    View Slide

  433. • Finished within 1 day
    • Renewed confidence
    • Still works ( Heroku!)
    • No users ➡ no e-mail

    doing-it

    View Slide

  434. • Finished within 1 day
    • Renewed confidence
    • Still works ( Heroku!)
    • No users ➡ no e-mail
    • Threw it on GitHub

    doing-it

    View Slide

  435. Self-validation

    View Slide

  436. "How do I open-source?"



    View Slide

  437. View Slide


  438. Write (me)
    some docs,
    my child.

    View Slide


  439. Send (me) a
    pull request

    View Slide






  440. View Slide







  441. View Slide







  442. View Slide







  443. Rejected! This is
    not how I'd do it.

    View Slide

  444. Do you want
    another boss?

    View Slide

  445. View Slide


  446. I made what I
    wanted, then
    flung it online

    View Slide

  447. Can't predict
    what'll stick

    View Slide


  448. ⛳ ⛪
    Inadequacy


    View Slide


  449. ⛳ ⛪
    Inadequacy


    View Slide


  450. ⛳ ⛪
    Inadequacy


    View Slide

  451. The Thoughtleader's Dilemma

    View Slide

  452. The Thoughtleader's Dilemma
    • Do interesting work

    View Slide

  453. The Thoughtleader's Dilemma
    • Do interesting work
    • Share insights with others

    View Slide

  454. The Thoughtleader's Dilemma
    • Do interesting work
    • Share insights with others
    • Stop doing the work

    View Slide

  455. The Thoughtleader's Dilemma
    • Do interesting work
    • Share insights with others
    • Stop doing the work
    • Thoughtlead others off a cliff

    View Slide

  456. Test-Driven Development

    View Slide

  457. One day, I started
    leading thoughts…

    View Slide

  458. google "tdd failure"

    View Slide

  459. View Slide

  460. View Slide


  461. This is "London-
    school" TDD

    View Slide



  462. This is "London-
    school" TDD

    View Slide



  463. This is "London-
    school" TDD

    It isn't, really

    View Slide

  464. View Slide

  465. View Slide

  466. Discovery Testing

    View Slide

  467. View Slide

  468. View Slide

  469. View Slide

  470. View Slide

  471. View Slide

  472. express indignation
    admit incompetence
    lessen inadequacy
    I feel ___________, but I
    ____________
    . Maybe if I
    build it, I'll _____________
    .

    View Slide

  473. express indignation
    admit incompetence
    lessen inadequacy
    I feel ___________, but I
    ____________
    . Maybe if I
    build it, I'll _____________
    .
    TDD isn't understood

    View Slide

  474. 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

    View Slide

  475. 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

    View Slide

  476. Simplisafe™ alarm system

    View Slide

  477. Simplisafe™ alarm system


    View Slide

  478. Simplisafe™ alarm system


    View Slide

  479. View Slide

  480. homebridge

    View Slide

  481. homebridge

    View Slide

  482. homebridge


    View Slide

  483. homebridge


    Hey Siri, turn on my alarm

    View Slide


  484. View Slide

  485. Does my TDD
    process work?

    View Slide

  486. Several hours later…

    View Slide

  487. Whew!

    View Slide

  488. npm install simplisafe

    View Slide

  489. var simplisafe = require('simplisafe')

    View Slide

  490. var simplisafe = require('simplisafe')

    simplisafe({

    View Slide

  491. var simplisafe = require('simplisafe')

    simplisafe({
    user: '[email protected]',

    View Slide

  492. var simplisafe = require('simplisafe')

    simplisafe({
    user: '[email protected]',
    password: '1234'

    View Slide

  493. var simplisafe = require('simplisafe')

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

    View Slide

  494. var simplisafe = require('simplisafe')

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

    View Slide

  495. var simplisafe = require('simplisafe')

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

    View Slide

  496. var simplisafe = require('simplisafe')

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

    View Slide


  497. simplisafe

    View Slide

  498. • Followed my own advice

    simplisafe

    View Slide

  499. • Followed my own advice
    • It actually went really well!

    simplisafe

    View Slide

  500. • Followed my own advice
    • It actually went really well!
    • I went too long without
    validating my ideas

    simplisafe

    View Slide

  501. • Followed my own advice
    • It actually went really well!
    • I went too long without
    validating my ideas

    simplisafe

    View Slide

  502. Dear technical managers,

    View Slide

  503. Dear former developers,

    View Slide

  504. Everything seems
    simple at a distance

    View Slide

  505. Pattern recognition
    yields generic advice

    View Slide


  506. Trust the people
    closest to the work

    View Slide


  507. ⛳ ⛪
    Inadequacy


    View Slide


  508. ⛳ ⛪
    Inadequacy


    View Slide


  509. ⛳ ⛪
    Inadequacy


    View Slide


  510. ⛳ ⛪
    Indignation

    View Slide

  511. I'm a worrier

    View Slide

  512. View Slide

  513. View Slide

  514. View Slide

  515. View Slide

  516. View Slide

  517. View Slide

  518. View Slide

  519. View Slide








  520. View Slide

  521. Six years pass…

    View Slide

  522. View Slide

  523. View Slide

  524. View Slide



  525. View Slide

  526. View Slide

  527. View Slide

  528. SPoFaaS

    View Slide

  529. SPoFaaS
    (single point of failure as a service)

    View Slide

  530. View Slide

  531. View Slide

  532. View Slide

  533. View Slide

  534. View Slide

  535. View Slide

  536. View Slide

  537. View Slide

  538. View Slide

  539. express indignation
    admit incompetence
    lessen inadequacy
    I feel ___________, but I
    ____________
    . Maybe if I
    build it, I'll _____________
    .

    View Slide

  540. express indignation
    admit incompetence
    lessen inadequacy
    I feel ___________, but I
    ____________
    . Maybe if I
    build it, I'll _____________
    .
    security matters

    View Slide

  541. express indignation
    admit incompetence
    lessen inadequacy
    I feel ___________, but I
    ____________
    . Maybe if I
    build it, I'll _____________
    .
    security matters
    am not an expert

    View Slide

  542. 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

    View Slide

  543. View Slide

  544. ants

    View Slide

  545. ne_ants

    View Slide

  546. fine_ants

    View Slide

  547. FineAnts.download("vanguard", {

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  556. fine_ants_app

    http://localhost:3000

    View Slide

  557. fine_ants_app

    http://localhost:3000

    View Slide

  558. fine_ants_app
    http://localhost:3000

    View Slide


  559. fine_ants

    View Slide

  560. • I (almost) have a dashboard

    fine_ants

    View Slide

  561. • I (almost) have a dashboard
    • Locally encrypted

    fine_ants

    View Slide

  562. • I (almost) have a dashboard
    • Locally encrypted
    • Put Selenium to good use

    fine_ants

    View Slide

  563. • I (almost) have a dashboard
    • Locally encrypted
    • Put Selenium to good use
    • Not a generalizable app

    fine_ants

    View Slide

  564. No shame in
    "hobby-grade"

    View Slide

  565. Selfish little toy apps
    inspired many of us

    View Slide


  566. ⛳ ⛪
    Indignation

    View Slide


  567. ⛳ ⛪
    Indignation

    View Slide


  568. ⛳ ⛪
    Indignation

    View Slide

  569. View Slide

  570. gimme

    View Slide


  571. like stunt doubles
    Test doubles are

    View Slide


  572. like stunt doubles
    Test doubles are

    View Slide


  573. like stunt doubles
    Test doubles are

    View Slide


  574. like stunt doubles
    Test doubles are

    View Slide


  575. like stunt doubles
    Test doubles are

    View Slide


  576. like stunt doubles
    Test doubles are


    View Slide

  577. View Slide


  578. View Slide



  579. View Slide




  580. View Slide




  581. View Slide




  582. View Slide




  583. View Slide



  584. View Slide

  585. express indignation
    admit incompetence
    lessen inadequacy
    I feel ___________, but I
    ____________
    . Maybe if I
    build it, I'll _____________
    .

    View Slide

  586. express indignation
    admit incompetence
    lessen inadequacy
    I feel ___________, but I
    ____________
    . Maybe if I
    build it, I'll _____________
    .
    users are in pain

    View Slide

  587. 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

    View Slide

  588. 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

    View Slide

  589. My entire career may hinge
    on two or three concepts

    View Slide

  590. View Slide

  591. View Slide

  592. View Slide

  593. View Slide





  594. View Slide

  595. View Slide

  596. .js

    View Slide

  597. npm install testdouble

    View Slide

  598. http://is.gd/happytdd

    View Slide

  599. https://is.gd/td_vs_sinon

    View Slide

  600. testdouble.js

    View Slide

  601. • Works pretty well
    testdouble.js

    View Slide

  602. • Works pretty well
    • Shares what we've
    learned clearly
    testdouble.js

    View Slide

  603. • Works pretty well
    • Shares what we've
    learned clearly
    • Better than cynicism
    testdouble.js

    View Slide

  604. Not getting through?
    Tweak your message

    View Slide


  605. Not winning !=
    Not worthwhile

    View Slide

  606. Criticism is easier
    than contribution

    View Slide


  607. ⛳ ⛪
    Indignation

    View Slide


  608. ⛳ ⛪
    Indignation

    View Slide


  609. ⛳ ⛪
    Indignation

    View Slide

  610. I emoji

    View Slide

  611. Creativity is serious work

    View Slide

  612. Open source:

    View Slide

  613. You create,
    Open source:

    View Slide

  614. You create,
    we depend
    Open source:

    View Slide

  615. View Slide

  616. View Slide



  617. View Slide



  618. View Slide




  619. View Slide






  620. View Slide






  621. View Slide

  622. Hating your own creations


    View Slide

  623. express indignation
    admit incompetence
    lessen inadequacy
    I feel ___________, but I
    ____________
    . Maybe if I
    build it, I'll _____________
    .

    View Slide

  624. express indignation
    admit incompetence
    lessen inadequacy
    I feel ___________, but I
    ____________
    . Maybe if I
    build it, I'll _____________
    .
    exploited & exhausted

    View Slide

  625. express indignation
    admit incompetence
    lessen inadequacy
    I feel ___________, but I
    ____________
    . Maybe if I
    build it, I'll _____________
    .
    exploited & exhausted
    can't escape it

    View Slide

  626. 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

    View Slide

  627. Build something no
    business would want

    View Slide

  628. …or just license
    everything GPL

    View Slide

  629. …or just license
    everything GPL

    View Slide

  630. emoruby

    View Slide


  631. View Slide


  632. View Slide


  633. View Slide


  634. View Slide



  635. View Slide




  636. View Slide





  637. View Slide






  638. View Slide







  639. ❤▪▪

    View Slide







  640. ❤▪▪

    View Slide

  641. class Heart
    def wave
    puts "smiley earth_asia"
    end
    end

    Heart.new.wave

    View Slide

  642. emoruby

    View Slide

  643. • It's real dumb
    emoruby

    View Slide

  644. • It's real dumb
    • Brought me joy
    emoruby

    View Slide

  645. • It's real dumb
    • Brought me joy
    • Zero issues this year
    emoruby

    View Slide

  646. It's okay to build
    things for yourself

    View Slide

  647. View Slide

  648. View Slide

  649. View Slide

  650. It's okay to build
    things for yourself

    View Slide

  651. It's okay to build
    things for yourself
    fun

    View Slide


  652. ⛳ ⛪
    Indignation

    View Slide


  653. ⛳ ⛪
    Indignation

    View Slide


  654. ⛳ ⛪
    Indignation

    View Slide




  655. Inadequacy Indignation
    Incompetence

    View Slide




  656. Inadequacy Indignation
    Incompetence

    View Slide

  657. I s you

    View Slide

  658. View Slide

  659. View Slide

  660. View Slide

  661. View Slide

  662. View Slide

  663. View Slide

  664. View Slide


  665. fine_ants

    View Slide


  666. fine_ants

    View Slide

  667. View Slide

  668. Maybe you're right

    View Slide

  669. Creativity isn't
    for everyone

    View Slide

  670. If you're ,

    View Slide

  671. perfectly content
    If you're ,

    View Slide

  672. totally fulfilled
    If you're ,

    View Slide

  673. OK with status quo
    If you're ,

    View Slide

  674. OK with status quo
    If you're
    why change things?
    ,

    View Slide

  675. OK with status quo
    If you're
    why change things?
    ,


    View Slide

  676. Negative feels are a symptom

    View Slide

  677. Root cause analysis

    View Slide

  678. Root cause analysis
    • Wrong tool for the job?

    View Slide

  679. Root cause analysis
    • Wrong tool for the job?
    • Technology-to-practice friction?

    View Slide

  680. Root cause analysis
    • Wrong tool for the job?
    • Technology-to-practice friction?
    • Work can't offer what you need?

    View Slide

  681. Root cause analysis
    • Wrong tool for the job?
    • Technology-to-practice friction?
    • Work can't offer what you need?
    • Internal baggage to get over?

    View Slide


  682. Reflect on your feels

    View Slide


  683. Reflect on your feels

    View Slide

  684. Your async brain

    View Slide

  685. Your async brain

    View Slide


  686. Your async brain

    View Slide


  687. Your async brain

    View Slide


  688. Your async brain


    View Slide


  689. Your async brain


    View Slide

  690. View Slide



  691. View Slide



  692. View Slide

  693. View Slide

  694. View Slide

  695. View Slide

  696. View Slide

  697. View Slide

  698. View Slide

  699. View Slide

  700. View Slide


  701. View Slide

  702. Find your outlet

    View Slide

  703. Find your outlet

    *

    View Slide

  704. Find your outlet

    *
    *it may not involve software

    View Slide

  705. Tomorrow!

    View Slide


  706. Tomorrow!

    View Slide

  707. Tomorrow!

    View Slide

  708. Test Smells
    Tomorrow!

    View Slide

  709. I'm @searls—tell me
    what you think
    !

    View Slide

  710. We need creative types to
    help improve the industry.
    [email protected]

    View Slide

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

    View Slide

  712. Thank you!

    View Slide

  713. 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

    View Slide