Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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 full-size slide

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

    View full-size slide

  3. @searls is my real name.

    View full-size slide

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

    View full-size slide

  5. This is my 2011 face!

    View full-size slide

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

    View full-size slide

  7. I co-founded @testdouble.

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  10. So, what's
    creativity?

    View full-size slide

  11. Is creativity passion?

    View full-size slide

  12. Passion is hot right now!

    View full-size slide

  13. Passion is hot right now!

    View full-size slide

  14. Passion is hot right now!

    View full-size slide

  15. Passion is hot right now!

    View full-size slide

  16. Passion is hot right now!

    View full-size slide

  17. Passion is hot right now!

    View full-size slide

  18. Passion is hot right now!

    View full-size slide

  19. Passion is hot right now!

    View full-size slide

  20. Passion is hot right now!

    View full-size slide

  21. Passion is hot right now!

    View full-size slide

  22. Passion's hot right now!

    View full-size slide

  23. Passion's hot right now!

    View full-size slide

  24. Nope, not passion!

    View full-size slide

  25. Is creativity art?

    View full-size slide

  26. Is creativity vision?

    View full-size slide

  27. Vision's not enough.

    View full-size slide

  28. Are YOU creative?

    View full-size slide

  29. Are YOU creative?
    Incredibly passionate

    View full-size slide

  30. Are YOU creative?
    Incredibly passionate
    Create beautiful things

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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


    View full-size slide

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



    View full-size slide

  35. Creative Spark

    View full-size slide



  36. Creativity is a
    chronic illness.

    View full-size slide



  37. Creativity is a
    chronic illness.

    View full-size slide

  38. Negative emotions

    View full-size slide

  39. Negative emotions
    Positive outcomes

    View full-size slide

  40. At the beginning
    of my career…

    View full-size slide

  41. It took me years
    to realize this:

    View full-size slide

  42. I needed an outlet

    View full-size slide

  43. Production wasn't a
    great creative outlet


    View full-size slide


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



    View full-size slide

  45. Dev QA Prod







    View full-size slide

  46. Dev QA Prod








    View full-size slide

  47. Dev QA Prod









    View full-size slide

  48. Dev QA Prod









    Don't cede control of your
    happiness to someone else

    View full-size slide

  49. Create space
    for creativity

    View full-size slide

  50. One morning…

    View full-size slide



  51. *hack*
    *hack*
    *hack*
    *hack*

    View full-size slide



  52. *hack*
    *hack*
    *hack*
    *hack*

    View full-size slide



  53. *hack*
    *hack*
    *hack*
    *hack*


    View full-size slide


  54. Main Project

    View full-size slide


  55. Main Project

    View full-size slide


  56. Main Project

    Side Project

    View full-size slide

  57. Burning the candle at both ends

    View full-size slide

  58. Burning the candle at both ends

    View full-size slide


  59. Why do I do this?

    View full-size slide


  60. Why do I do this?

    View full-size slide


  61. Why do I do this?

    View full-size slide


  62. Why do I do this?

    View full-size slide


  63. Why do I do this?

    View full-size slide


  64. Why do I do this?

    View full-size slide


  65. Why do I do this?

    View full-size slide


  66. Why do I do this?

    View full-size slide


  67. Why do I do this?

    View full-size slide


  68. Why do I do this?

    View full-size slide


  69. Why do I do this?

    View full-size slide


  70. Why do I do this?

    View full-size slide


  71. Why do I do this?

    View full-size slide



  72. Inadequacy

    View full-size slide


  73. Indignation

    View full-size slide


  74. Incompetence

    View full-size slide

  75. Inadequacy
    Indignation
    Incompetence

    View full-size slide

  76. Inadequacy
    Indignation
    Incompetence
    people to
    imitate

    View full-size slide

  77. Inadequacy
    Indignation
    Incompetence
    people to
    imitate
    something
    to say

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  80. Means
    Inadequacy
    Indignation
    Incompetence
    room to
    improve
    Motive

    View full-size slide

  81. Means
    Inadequacy
    Indignation
    Incompetence
    Motive
    Opportunity

    View full-size slide



  82. Privilege!

    View full-size slide



  83. Inadequacy Indignation Incompetence

    View full-size slide


  84. Creative ideas

    View full-size slide

  85. I feel ___________, but I

    View full-size slide

  86. express indignation
    I feel ___________, but I

    View full-size slide

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

    View full-size slide

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

    View full-size slide


  89. ⛳ ⛪
    Incompetence

    View full-size slide

  90. Book-learning

    View full-size slide




  91. Book-learning

    View full-size slide



  92. vs.
    Book-learning

    View full-size slide




  93. vs.
    Capitalism
    Book-learning

    View full-size slide


  94. We need a new
    citation editor.

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  97. 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 full-size slide

  98. 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 full-size slide

  99. I did it!

    View full-size slide

  100. Accomplishments:

    View full-size slide

  101. Accomplishments:
    • All 3 major style guides

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  106. I made it up as I went!

    View full-size slide

  107. Very minor downsides:

    View full-size slide

  108. Very minor downsides:
    • Completely insecure

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide


  112. Fear of bad code
    can paralyze you

    View full-size slide


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

    View full-size slide


  114. ⛳ ⛪
    Incompetence

    View full-size slide


  115. ⛳ ⛪
    Incompetence

    View full-size slide


  116. ⛳ ⛪
    Incompetence

    View full-size slide

  117. The Web

    The Metal
    vs.

    View full-size slide

  118. I tried to "go native"

    View full-size slide


  119. I was too dumb for native apps

    View full-size slide

  120. But then, one day…

    View full-size slide

  121. Now I really wanted to go native

    View full-size slide

  122. Now I really wanted to go native


    View full-size slide

  123. Now I really wanted to go native

    View full-size slide

  124. Now I really wanted to go native

    View full-size slide

  125. • Beautiful

    View full-size slide

  126. • Beautiful
    • Innovative

    View full-size slide

  127. • Beautiful
    • Innovative
    • Life-altering

    View full-size slide

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

    View full-size slide

  129. 3 minutes

    View full-size slide

  130. There was no
    "Mobile Web"

    View full-size slide

  131. No such thing as
    "Responsive Design"

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  134. 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 full-size slide

  135. 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 full-size slide



  136. libxml2 Objects

    View full-size slide



  137. libxml2 Objects

    View full-size slide



  138. libxml2 Objects

    View full-size slide



  139. libxml2 Objects

    Build UI

    View full-size slide



  140. libxml2 Objects

    Build UI

    View full-size slide

  141. • 66% faster! Legible!

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  146. Mission Accomplished

    View full-size slide

  147. Learning simple stuff is easy…

    View full-size slide

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

    View full-size slide

  149. Learning something bigger?

    View full-size slide

  150. Learning something bigger?

    View full-size slide

  151. Learning something bigger?

    View full-size slide

  152. Learning something bigger?

    View full-size slide

  153. Learning something bigger?

    Then you need a real purpose.

    View full-size slide

  154. Learning something bigger?

    Then you need a real purpose.

    View full-size slide

  155. Learning something bigger?

    Then you need a real purpose.

    View full-size slide

  156. Find the smallest thing
    you can caremad over


    View full-size slide


  157. ⛳ ⛪
    Incompetence

    View full-size slide


  158. ⛳ ⛪
    Incompetence

    View full-size slide


  159. ⛳ ⛪
    Incompetence

    View full-size slide

  160. Java kids be like

    View full-size slide

  161. Java kids be like

    View full-size slide

  162. Ruby kids be like

    View full-size slide

  163. Ruby kids be like

    View full-size slide

  164. Dynamic Programming

    View full-size slide

  165. Meta-programming

    View full-size slide

  166. My first Ruby team

    View full-size slide

  167. My first Ruby team




    View full-size slide


  168. My first Ruby team's tests



    View full-size slide


  169. My first Ruby team's tests



    View full-size slide

  170. dog = double()

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    subject.pet(dog)

    View full-size slide

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

    subject.pet(dog)

    View full-size slide

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

    subject.pet(dog)
    No type awareness

    View full-size slide

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

    subject.pet(dog)
    Out of order

    View full-size slide

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

    subject.pet(dog)
    Verbose API

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  180. 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 full-size slide

  181. 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 full-size slide

  182. Java Ruby
    Cargo-cult

    View full-size slide

  183. Learned Humility

    View full-size slide

  184. Learned Humility

    View full-size slide

  185. Learned Humility

    View full-size slide

  186. Learned Humility

    View full-size slide

  187. dog = gimme(Dog)

    View full-size slide

  188. dog = gimme(Dog)

    subject.pet(dog)

    View full-size slide

  189. dog = gimme(Dog)

    subject.pet(dog)

    verify(dog).wag(:tail)

    View full-size slide

  190. • Had type awareness
    gimme

    View full-size slide

  191. • Had type awareness
    • Preserves test order
    gimme

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  195. Getting out of
    the line of fire

    View full-size slide

  196. Working code

    can sell ideas

    View full-size slide

  197. Working code

    can sell ideas

    +

    View full-size slide

  198. Working code


    can sell ideas
    =

    +

    View full-size slide

  199. Ideas require no
    maintenance!

    View full-size slide


  200. ⛳ ⛪
    Incompetence

    View full-size slide


  201. ⛳ ⛪
    Incompetence

    View full-size slide


  202. ⛳ ⛪
    Incompetence

    View full-size slide


  203. ⛳ ⛪
    Inadequacy


    View full-size slide

  204. Midwestern
    programming

    View full-size slide

  205. I'm not great at cocktail parties

    View full-size slide

  206. I had some rockstar envy

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  209. 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 full-size slide

  210. 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 full-size slide

  211. mustachify.me

    View full-size slide

  212. mustachify.me

    View full-size slide

  213. mustachify.me

    View full-size slide

  214. "Let's think bigger"

    View full-size slide

  215. "Let's think bigger"

    View full-size slide

  216. Must Stache
    Cory

    View full-size slide

  217. Must Stache
    Cory

    View full-size slide

  218. Must Stache
    Cory

    View full-size slide

  219. • Posted to a forum at 11pm

    View full-size slide

  220. • Posted to a forum at 11pm


    View full-size slide

  221. • Posted to a forum at 11pm


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

    View full-size slide

  222. • Posted to a forum at 11pm


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

    View full-size slide

  223. • Posted to a forum at 11pm


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

    View full-size slide

  224. • 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 full-size slide

  225. Must Stache
    Cory

    View full-size slide

  226. Must Stache
    Cory

    View full-size slide

  227. Must Stache
    Cory
    Cory

    View full-size slide

  228. Must Stache
    Cory
    Cory

    View full-size slide

  229. Must Stache
    Cory
    Cory

    View full-size slide

  230. Many months later

    View full-size slide


  231. ✉ ✉
    ✉ ✉
    ✉ ✉




    ✉✉

    ✉ ✉






    View full-size slide

  232. This wasn't fan mail

    View full-size slide

  233. • Built a popular thing

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  239. Serverless isn't

    View full-size slide

  240. Popularity without
    purpose is toxic

    View full-size slide


  241. ⛳ ⛪
    Inadequacy


    View full-size slide


  242. ⛳ ⛪
    Inadequacy


    View full-size slide


  243. ⛳ ⛪
    Inadequacy


    View full-size slide

  244. I was on a legacy
    rescue project

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  250. to-do apps

    View full-size slide

  251. Project:
    Plaintext to-dos

    View full-size slide

  252. Project:
    - Task A
    Plaintext to-dos

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  260. 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 full-size slide

  261. 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 full-size slide

  262. Build a great to-do app…

    View full-size slide

  263. …in under 24 hours

    View full-size slide

  264. doing-it:
    doing-it app

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  269. • Finished within 1 day ✅
    doing-it

    View full-size slide

  270. • Finished within 1 day
    • Renewed confidence

    doing-it

    View full-size slide

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

    doing-it

    View full-size slide

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

    doing-it

    View full-size slide

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

    doing-it

    View full-size slide

  274. Self-validation

    View full-size slide

  275. "How do I open-source?"



    View full-size slide


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

    View full-size slide


  277. Send (me) a
    pull request

    View full-size slide







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

    View full-size slide

  279. Do you want
    another boss?

    View full-size slide


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

    View full-size slide

  281. Can't predict
    what'll stick

    View full-size slide


  282. ⛳ ⛪
    Inadequacy


    View full-size slide


  283. ⛳ ⛪
    Inadequacy


    View full-size slide


  284. ⛳ ⛪
    Inadequacy


    View full-size slide

  285. The Thoughtleader's Dilemma

    View full-size slide

  286. The Thoughtleader's Dilemma
    • Do interesting work

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  290. Test-Driven Development

    View full-size slide

  291. One day, I started
    leading thoughts…

    View full-size slide

  292. google "tdd failure"

    View full-size slide


  293. This is "London-
    school" TDD

    View full-size slide



  294. This is "London-
    school" TDD

    View full-size slide



  295. This is "London-
    school" TDD

    It isn't, really

    View full-size slide

  296. Discovery Testing

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  299. 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 full-size slide

  300. 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 full-size slide

  301. Simplisafe™ alarm system

    View full-size slide

  302. Simplisafe™ alarm system


    View full-size slide

  303. Simplisafe™ alarm system


    View full-size slide

  304. homebridge

    View full-size slide

  305. homebridge


    View full-size slide

  306. homebridge


    Hey Siri, turn on my alarm

    View full-size slide

  307. Does my TDD
    process work?

    View full-size slide

  308. Several hours later…

    View full-size slide

  309. npm install simplisafe

    View full-size slide

  310. var simplisafe = require('simplisafe')

    View full-size slide

  311. var simplisafe = require('simplisafe')

    simplisafe({

    View full-size slide

  312. var simplisafe = require('simplisafe')

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

    View full-size slide

  313. var simplisafe = require('simplisafe')

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

    View full-size slide

  314. var simplisafe = require('simplisafe')

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

    View full-size slide

  315. var simplisafe = require('simplisafe')

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

    View full-size slide

  316. var simplisafe = require('simplisafe')

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

    View full-size slide

  317. var simplisafe = require('simplisafe')

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

    View full-size slide

  318. • Followed my own advice

    simplisafe

    View full-size slide

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

    simplisafe

    View full-size slide

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

    simplisafe

    View full-size slide

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

    simplisafe

    View full-size slide

  322. Dear technical managers,

    View full-size slide

  323. Dear former developers,

    View full-size slide

  324. Everything seems
    simple at a distance

    View full-size slide

  325. Pattern recognition
    yields generic advice

    View full-size slide


  326. Trust the people
    closest to the work

    View full-size slide


  327. ⛳ ⛪
    Inadequacy


    View full-size slide


  328. ⛳ ⛪
    Inadequacy


    View full-size slide


  329. ⛳ ⛪
    Inadequacy


    View full-size slide


  330. ⛳ ⛪
    Indignation

    View full-size slide

  331. I'm a worrier

    View full-size slide

  332. Six years pass…

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  337. 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 full-size slide

  338. FineAnts.download("vanguard", {

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  347. fine_ants_app

    http://localhost:3000

    View full-size slide

  348. fine_ants_app

    http://localhost:3000

    View full-size slide

  349. fine_ants_app
    http://localhost:3000

    View full-size slide

  350. • I (almost) have a dashboard

    fine_ants

    View full-size slide

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

    fine_ants

    View full-size slide

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

    fine_ants

    View full-size slide

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

    fine_ants

    View full-size slide

  354. No shame in
    "hobby-grade"

    View full-size slide

  355. Selfish little toy apps
    inspired many of us

    View full-size slide


  356. ⛳ ⛪
    Indignation

    View full-size slide


  357. ⛳ ⛪
    Indignation

    View full-size slide


  358. ⛳ ⛪
    Indignation

    View full-size slide


  359. like stunt doubles
    Test doubles are

    View full-size slide


  360. like stunt doubles
    Test doubles are

    View full-size slide


  361. like stunt doubles
    Test doubles are

    View full-size slide


  362. like stunt doubles
    Test doubles are

    View full-size slide


  363. like stunt doubles
    Test doubles are

    View full-size slide


  364. like stunt doubles
    Test doubles are


    View full-size slide

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

    View full-size slide

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

    View full-size slide

  367. 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 full-size slide

  368. 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 full-size slide

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

    View full-size slide

  370. npm install testdouble

    View full-size slide

  371. http://is.gd/happytdd

    View full-size slide

  372. https://is.gd/td_vs_sinon

    View full-size slide

  373. testdouble.js

    View full-size slide

  374. • Works pretty well
    testdouble.js

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  377. Not getting through?
    Tweak your message

    View full-size slide


  378. Not winning !=
    Not worthwhile

    View full-size slide

  379. Criticism is easier
    than contribution

    View full-size slide


  380. ⛳ ⛪
    Indignation

    View full-size slide


  381. ⛳ ⛪
    Indignation

    View full-size slide


  382. ⛳ ⛪
    Indignation

    View full-size slide

  383. Creativity is serious work

    View full-size slide

  384. Open source:

    View full-size slide

  385. You create,
    Open source:

    View full-size slide

  386. You create,
    we depend
    Open source:

    View full-size slide

  387. Hating your own creations


    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  391. 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 full-size slide

  392. Build something no
    business would want

    View full-size slide

  393. …or just license
    everything GPL

    View full-size slide

  394. …or just license
    everything GPL

    View full-size slide







  395. ❤▪▪

    View full-size slide







  396. ❤▪▪

    View full-size slide

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

    Heart.new.wave

    View full-size slide

  398. • It's real dumb
    emoruby

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  401. It's okay to build
    things for yourself

    View full-size slide

  402. It's okay to build
    things for yourself

    View full-size slide

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

    View full-size slide


  404. ⛳ ⛪
    Indignation

    View full-size slide


  405. ⛳ ⛪
    Indignation

    View full-size slide


  406. ⛳ ⛪
    Indignation

    View full-size slide




  407. Inadequacy Indignation
    Incompetence

    View full-size slide




  408. Inadequacy Indignation
    Incompetence

    View full-size slide

  409. Maybe you're right

    View full-size slide

  410. Creativity isn't
    for everyone

    View full-size slide

  411. perfectly content
    If you're ,

    View full-size slide

  412. totally fulfilled
    If you're ,

    View full-size slide

  413. OK with status quo
    If you're ,

    View full-size slide

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

    View full-size slide

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


    View full-size slide

  416. Negative feels are a symptom

    View full-size slide

  417. Root cause analysis

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  421. 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 full-size slide


  422. Reflect on your feels

    View full-size slide


  423. Reflect on your feels

    View full-size slide

  424. Your async brain

    View full-size slide

  425. Your async brain

    View full-size slide


  426. Your async brain

    View full-size slide


  427. Your async brain

    View full-size slide


  428. Your async brain


    View full-size slide


  429. Your async brain


    View full-size slide

  430. Find your outlet

    View full-size slide

  431. Find your outlet

    *

    View full-size slide

  432. Find your outlet

    *
    *it may not involve software

    View full-size slide


  433. Tomorrow!

    View full-size slide

  434. Test Smells
    Tomorrow!

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  438. 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 full-size slide