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

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

E6c6e133e74c3b83f04d2861deaa1c20?s=128

Justin Searls

November 01, 2016
Tweet

Transcript

  1. scratch an itch how to

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

  3. @searls is my real name.

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

  5. This is my 2011 face!

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

  7. I co-founded @testdouble.

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

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

  10. Creativity

  11. None
  12. OK!

  13. So, what's creativity?

  14. None
  15. Is creativity passion?

  16. Passion is hot right now!

  17. Passion is hot right now!

  18. Passion is hot right now!

  19. Passion is hot right now!

  20. Passion is hot right now!

  21. Passion is hot right now!

  22. Passion is hot right now!

  23. Passion is hot right now!

  24. Passion is hot right now!

  25. Passion is hot right now!

  26. Passion's hot right now!

  27. Passion's hot right now!

  28. Nope, not passion!

  29. Is creativity art?

  30. None
  31. None
  32. Ehh…

  33. Is creativity vision?

  34. None
  35. None
  36. Vision's not enough.

  37. None
  38. None
  39. None
  40. Are YOU creative?

  41. Are YOU creative? Incredibly passionate

  42. Are YOU creative? Incredibly passionate Create beautiful things

  43. Are YOU creative? Incredibly passionate Create beautiful things Can see

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

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

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

    into the future ❌ ❌ ❌
  47. None
  48. None
  49. Creative Spark

  50. None
  51. None
  52. ☝ Creativity is a chronic illness.

  53. ☝ Creativity is a chronic illness.

  54. None
  55. None
  56. None
  57. None
  58. None
  59. Negative emotions

  60. Negative emotions Positive outcomes

  61. None
  62. None
  63. None
  64. At the beginning of my career…

  65. None
  66. None
  67. It took me years to realize this:

  68. I needed an outlet

  69. Production wasn't a great creative outlet

  70. None
  71. None
  72. None
  73. None
  74. None
  75. None
  76. None
  77. We create it, but it's not our own

  78. None
  79. Me

  80. Me My team

  81. None
  82. None
  83. None
  84. None
  85. None
  86. None
  87. None
  88. None
  89. None
  90. None
  91. None
  92. None
  93. Dev QA Prod

  94. Dev QA Prod

  95. Dev QA Prod

  96. Dev QA Prod

  97. Dev QA Prod

  98. Dev QA Prod

  99. Dev QA Prod

  100. Dev QA Prod

  101. Dev QA Prod ☹

  102. Dev QA Prod ☹

  103. Dev QA Prod ☹

  104. Dev QA Prod ☹ Don't cede control of your happiness

    to someone else
  105. Create space for creativity

  106. One morning…

  107. None
  108. None
  109. None
  110. ⌨ *hack* *hack* *hack* *hack*

  111. ⌨ *hack* *hack* *hack* *hack*

  112. ⌨ *hack* *hack* *hack* *hack*

  113. None
  114. None
  115. None
  116. None
  117. Main Project

  118. Main Project

  119. Main Project Side Project

  120. Burning the candle at both ends

  121. Burning the candle at both ends

  122. Why do I do this?

  123. Why do I do this?

  124. Why do I do this?

  125. Why do I do this?

  126. Why do I do this?

  127. Why do I do this?

  128. Why do I do this?

  129. Why do I do this?

  130. Why do I do this?

  131. Why do I do this?

  132. Why do I do this?

  133. Why do I do this?

  134. Why do I do this?

  135. ⛳ ⛪

  136. ⛳ ⛪

  137. ⛳ Inadequacy

  138. ⛳ ⛪

  139. ⛳ ⛪

  140. ⛪ Indignation

  141. ⛳ ⛪

  142. ⛳ ⛪

  143. None
  144. Incompetence

  145. Inadequacy Indignation Incompetence

  146. Inadequacy Indignation Incompetence people to imitate

  147. Inadequacy Indignation Incompetence people to imitate something to say

  148. Inadequacy Indignation Incompetence room to improve people to imitate something

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

  150. Means Inadequacy Indignation Incompetence room to improve Motive

  151. Means Inadequacy Indignation Incompetence Motive Opportunity

  152. ⛳ ⛪

  153. ⛳ ⛪ Privilege!

  154. None
  155. join@testdouble.com

  156. ⛳ ⛪ Inadequacy Indignation Incompetence

  157. Creative ideas

  158. I feel ___________, but I

  159. express indignation I feel ___________, but I

  160. express indignation admit incompetence I feel ___________, but I ____________

    . Maybe if I
  161. express indignation admit incompetence lessen inadequacy I feel ___________, but

    I ____________ . Maybe if I build it, I'll _____________ .
  162. ⛳ ⛪ Incompetence

  163. Book-learning

  164. Book-learning

  165. vs. Book-learning

  166. vs. Capitalism Book-learning

  167. None
  168. We need a new citation editor.

  169. express indignation admit incompetence lessen inadequacy I feel ___________, but

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

    I ____________ . Maybe if I build it, I'll _____________ . I don't need CompSci
  171. 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
  172. 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
  173. None
  174. I did it! ☺

  175. Accomplishments:

  176. Accomplishments: • All 3 major style guides

  177. Accomplishments: • All 3 major style guides • Dozens of

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

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

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

    types of sources • Complete account system • Bibliography creation & export • Millions of users
  181. I made it up as I went!

  182. Very minor downsides:

  183. Very minor downsides: • Completely insecure

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

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

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

    • GB's of daily server warnings • A 16,000 line PHP file
  187. Fear of bad code can paralyze you

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

  189. ⛳ ⛪ Incompetence

  190. ⛳ ⛪ Incompetence

  191. ⛳ ⛪ Incompetence

  192. The Web

  193. The Web vs.

  194. The Web ⛓ The Metal vs.

  195. I tried to "go native"

  196. None
  197. None
  198. None
  199. None
  200. None
  201. None
  202. None
  203. None
  204. None
  205. None
  206. I was too dumb for native apps

  207. But then, one day…

  208. None
  209. None
  210. Now I really wanted to go native

  211. Now I really wanted to go native

  212. Now I really wanted to go native

  213. Now I really wanted to go native

  214. None
  215. • Beautiful

  216. • Beautiful • Innovative

  217. • Beautiful • Innovative • Life-altering

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

  219. None
  220. 3 minutes ⏲

  221. There was no "Mobile Web"

  222. No such thing as "Responsive Design"

  223. express indignation admit incompetence lessen inadequacy I feel ___________, but

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

    I ____________ . Maybe if I build it, I'll _____________ . mobile web is a joke
  225. 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
  226. 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
  227. None
  228. None
  229. <html>

  230. <html> libxml2

  231. <html> libxml2 Objects

  232. <html> libxml2 Objects

  233. <html> libxml2 Objects

  234. <html> libxml2 Objects Build UI

  235. <html> libxml2 Objects Build UI

  236. None
  237. • 66% faster! Legible!

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

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

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

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

    • 1st user group talk • Rejected by Apple
  242. None
  243. None
  244. Mission Accomplished ☺

  245. Learning simple stuff is easy…

  246. Learning simple stuff is easy… …if you can fit it

    inside a day
  247. Learning something bigger?

  248. Learning something bigger?

  249. Learning something bigger?

  250. Learning something bigger?

  251. Learning something bigger? Then you need a real purpose.

  252. Learning something bigger? Then you need a real purpose.

  253. Learning something bigger? Then you need a real purpose.

  254. Find the smallest thing you can caremad over

  255. ⛳ ⛪ Incompetence

  256. ⛳ ⛪ Incompetence

  257. ⛳ ⛪ Incompetence

  258. Java kids be like

  259. Java kids be like

  260. Ruby kids be like

  261. Ruby kids be like

  262. None
  263. Java

  264. Java

  265. Ruby

  266. Ruby

  267. Programming

  268. Dynamic Programming

  269. Meta-programming

  270. My first Ruby team

  271. My first Ruby team

  272. My first Ruby team's tests

  273. My first Ruby team's tests

  274. dog = double()

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

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

  277. dog = double() dog.should_receive(:wag) .with(:tail) 
 subject.pet(dog)

  278. dog = double() dog.should_receive(:wag) .with(:tail) 
 subject.pet(dog)

  279. dog = double() dog.should_receive(:wag) .with(:tail) 
 subject.pet(dog) No type awareness

  280. dog = double() dog.should_receive(:wag) .with(:tail) 
 subject.pet(dog) Out of order

  281. dog = double() dog.should_receive(:wag) .with(:tail) 
 subject.pet(dog) Verbose API

  282. None
  283. express indignation admit incompetence lessen inadequacy I feel ___________, but

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

    I ____________ . Maybe if I build it, I'll _____________ . mad at these mocks
  285. 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
  286. 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
  287. Java Ruby Cargo-cult

  288. Java Ruby

  289. Java Ruby

  290. Java Ruby

  291. Learned Humility

  292. Learned Humility

  293. Learned Humility

  294. Learned Humility ⏰

  295. dog = gimme(Dog)

  296. dog = gimme(Dog) 
 subject.pet(dog)

  297. dog = gimme(Dog) 
 subject.pet(dog) 
 verify(dog).wag(:tail)

  298. gimme

  299. • Had type awareness gimme

  300. • Had type awareness • Preserves test order gimme

  301. • Had type awareness • Preserves test order • Clever,

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

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

    terse APIs • Nobody adopted it • Influenced competitors gimme
  304. Getting out of the line of fire

  305. Working code can sell ideas

  306. Working code can sell ideas ⌨ +

  307. Working code can sell ideas = ⌨ +

  308. Ideas require no maintenance! ☎

  309. ⛳ ⛪ Incompetence

  310. ⛳ ⛪ Incompetence

  311. ⛳ ⛪ Incompetence

  312. ⛳ ⛪ Inadequacy ⛳

  313. Midwestern programming

  314. None
  315. None
  316. None
  317. None
  318. None
  319. None
  320. None
  321. I'm not great at cocktail parties

  322. I had some rockstar envy

  323. express indignation admit incompetence lessen inadequacy I feel ___________, but

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

    I ____________ . Maybe if I build it, I'll _____________ . my work isn't exciting
  325. 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
  326. 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
  327. mustachify.me

  328. mustachify.me

  329. mustachify.me

  330. "Let's think bigger"

  331. "Let's think bigger"

  332. Must Stache

  333. Must Stache Cory

  334. Must Stache Cory

  335. Must Stache Cory

  336. • Posted to a forum at 11pm

  337. • Posted to a forum at 11pm •

  338. • Posted to a forum at 11pm • • 12,000

    views (~3,000 installs)
  339. • Posted to a forum at 11pm • • 12,000

    views (~3,000 installs) • 40 pages per user/hour
  340. • Posted to a forum at 11pm • • 12,000

    views (~3,000 installs) • 40 pages per user/hour • 42 images/page
  341. • 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
  342. None
  343. Serverless!

  344. Must Stache Cory

  345. Must Stache Cory

  346. Must Stache Cory Cory

  347. Must Stache Cory Cory

  348. Must Stache Cory Cory

  349. Many months later

  350. None
  351. None
  352. None
  353. None
  354. None
  355. None
  356. None
  357. ✉ ✉ ✉ ✉ ✉ ✉ ✉ ✉ ✉ ✉

    ✉ ✉✉ ✉ ✉ ✉ ✉ ✉ ✉ ✉ ✉ ✉
  358. This wasn't fan mail

  359. None
  360. • Built a popular thing

  361. • Built a popular thing • Was unaware of that

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

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

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

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

    popularity • Made someone else millions • Made thousands of users angry • Left with no recourse (?)
  366. Serverless isn't

  367. Popularity without purpose is toxic ☢

  368. ⛳ ⛪ Inadequacy ⛳

  369. ⛳ ⛪ Inadequacy ⛳

  370. ⛳ ⛪ Inadequacy ⛳

  371. I was on a legacy rescue project

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

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

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

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

    a legacy rescue project I wanted to be rescued
  376. Can I program anything useful in under 2 months anymore?

  377. to-do apps ✅

  378. Project: Plaintext to-dos

  379. Project: - Task A Plaintext to-dos

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

  381. Project: - Task A - Task B - Task C

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

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

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

    {6/10/2011} Plaintext to-dos
  385. express indignation admit incompetence lessen inadequacy I feel ___________, but

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

    I ____________ . Maybe if I build it, I'll _____________ . I hate all to-do apps
  387. 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
  388. 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
  389. A quest!

  390. Build a great to-do app… ✅

  391. …in under 24 hours ⏲

  392. doing-it: doing-it app

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

  394. doing-it: - make a div contenteditable - dump it in

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

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

    localStorage - read from localStorage - use it to track the rest doing-it app
  397. I did it!

  398. None
  399. None
  400. ✅ doing-it

  401. • Finished within 1 day ✅ doing-it

  402. • Finished within 1 day • Renewed confidence ✅ doing-it

  403. • Finished within 1 day • Renewed confidence • Still

    works ( Heroku!) ✅ doing-it
  404. • Finished within 1 day • Renewed confidence • Still

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

    works ( Heroku!) • No users ➡ no e-mail • Threw it on GitHub ✅ doing-it
  406. Self-validation

  407. "How do I open-source?" ⭐ ⭐

  408. None
  409. Write (me) some docs, my child.

  410. Send (me) a pull request

  411. ⭐ ⭐

  412. ⭐ ⭐

  413. ⭐ ⭐

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

  415. Do you want another boss?

  416. None
  417. I made what I wanted, then flung it online

  418. Can't predict what'll stick

  419. ⛳ ⛪ Inadequacy ⛳

  420. ⛳ ⛪ Inadequacy ⛳

  421. ⛳ ⛪ Inadequacy ⛳

  422. The Thoughtleader's Dilemma

  423. The Thoughtleader's Dilemma • Do interesting work

  424. The Thoughtleader's Dilemma • Do interesting work • Share insights

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

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

    with others • Stop doing the work • Thoughtlead others off a cliff
  427. Test-Driven Development

  428. One day, I started leading thoughts…

  429. google "tdd failure"

  430. None
  431. None
  432. This is "London- school" TDD

  433. ☝ This is "London- school" TDD

  434. ☝ This is "London- school" TDD It isn't, really

  435. None
  436. None
  437. Discovery Testing

  438. None
  439. None
  440. None
  441. None
  442. None
  443. express indignation admit incompetence lessen inadequacy I feel ___________, but

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

    I ____________ . Maybe if I build it, I'll _____________ . TDD isn't understood
  445. 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
  446. 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
  447. Simplisafe™ alarm system

  448. Simplisafe™ alarm system

  449. Simplisafe™ alarm system

  450. None
  451. homebridge

  452. homebridge ❓

  453. homebridge ❓

  454. homebridge ❓ Hey Siri, turn on my alarm

  455. Does my TDD process work?

  456. Several hours later… ⏲

  457. Whew!

  458. npm install simplisafe

  459. var simplisafe = require('simplisafe')

  460. var simplisafe = require('simplisafe') 
 simplisafe({

  461. var simplisafe = require('simplisafe') 
 simplisafe({ user: 'foo@bar.com',

  462. var simplisafe = require('simplisafe') 
 simplisafe({ user: 'foo@bar.com', password: '1234'

  463. var simplisafe = require('simplisafe') 
 simplisafe({ user: 'foo@bar.com', password: '1234'

    }, function (er, client) {
  464. var simplisafe = require('simplisafe') 
 simplisafe({ user: 'foo@bar.com', password: '1234'

    }, function (er, client) { client.setState('away')
  465. var simplisafe = require('simplisafe') 
 simplisafe({ user: 'foo@bar.com', password: '1234'

    }, function (er, client) { client.setState('away') })
  466. var simplisafe = require('simplisafe') 
 simplisafe({ user: 'foo@bar.com', password: '1234'

    }, function (er, client) { client.setState('away') })
  467. simplisafe

  468. • Followed my own advice simplisafe

  469. • Followed my own advice • It actually went really

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

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

    well! • I went too long without validating my ideas simplisafe
  472. Dear technical managers,

  473. Dear former developers,

  474. Everything seems simple at a distance

  475. Pattern recognition yields generic advice

  476. Trust the people closest to the work

  477. ⛳ ⛪ Inadequacy ⛳

  478. ⛳ ⛪ Inadequacy ⛳

  479. ⛳ ⛪ Inadequacy ⛳

  480. ⛳ ⛪ Indignation ⛪

  481. I'm a worrier

  482. None
  483. None
  484. None
  485. None
  486. None
  487. None
  488. None
  489. None
  490. Six years pass…

  491. None
  492. None
  493. None
  494. None
  495. None
  496. SPoFaaS

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

  498. None
  499. None
  500. None
  501. None
  502. None
  503. None
  504. None
  505. None
  506. None
  507. express indignation admit incompetence lessen inadequacy I feel ___________, but

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

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

    I ____________ . Maybe if I build it, I'll _____________ . security matters am not an expert
  510. 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
  511. None
  512. ants

  513. ne_ants

  514. fine_ants

  515. FineAnts.download("vanguard", {

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

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

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

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

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

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

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

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

    amount: 12.34 }]
  524. fine_ants_app http://localhost:3000

  525. fine_ants_app http://localhost:3000

  526. fine_ants_app http://localhost:3000

  527. fine_ants

  528. • I (almost) have a dashboard fine_ants

  529. • I (almost) have a dashboard • Locally encrypted fine_ants

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

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

    Put Selenium to good use • Not a generalizable app fine_ants
  532. No shame in "hobby-grade"

  533. Selfish little toy apps inspired many of us

  534. ⛳ ⛪ Indignation ⛪

  535. ⛳ ⛪ Indignation ⛪

  536. ⛳ ⛪ Indignation ⛪

  537. None
  538. gimme

  539. like stunt doubles Test doubles are

  540. like stunt doubles Test doubles are

  541. like stunt doubles Test doubles are

  542. like stunt doubles Test doubles are ☁

  543. like stunt doubles Test doubles are ☁

  544. like stunt doubles Test doubles are ☁ ✅

  545. None
  546. express indignation admit incompetence lessen inadequacy I feel ___________, but

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

    I ____________ . Maybe if I build it, I'll _____________ . users are in pain
  548. 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
  549. 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
  550. My entire career may hinge on two or three concepts

  551. None
  552. None
  553. None
  554. None
  555. None
  556. .js

  557. npm install testdouble

  558. http://is.gd/happytdd

  559. https://is.gd/td_vs_sinon

  560. testdouble.js

  561. • Works pretty well testdouble.js

  562. • Works pretty well • Shares what we've learned clearly

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

    • Better than cynicism testdouble.js
  564. Not getting through? Tweak your message

  565. Not winning != Not worthwhile

  566. Criticism is easier than contribution

  567. ⛳ ⛪ Indignation ⛪

  568. ⛳ ⛪ Indignation ⛪

  569. ⛳ ⛪ Indignation ⛪

  570. I emoji

  571. Creativity is serious work

  572. Open source:

  573. You create, Open source:

  574. You create, we depend Open source:

  575. None
  576. None
  577. Hating your own creations

  578. express indignation admit incompetence lessen inadequacy I feel ___________, but

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

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

    I ____________ . Maybe if I build it, I'll _____________ . exploited & exhausted can't escape it
  581. 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
  582. Build something no business would want

  583. …or just license everything GPL

  584. …or just license everything GPL

  585. emoruby

  586. ❤ 
 ❤▪▪

  587. ❤ 
 ❤▪▪

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


    Heart.new.wave
  589. emoruby ❤

  590. • It's real dumb emoruby ❤

  591. • It's real dumb • Brought me joy emoruby ❤

  592. • It's real dumb • Brought me joy • Zero

    issues this year emoruby ❤
  593. It's okay to build things for yourself

  594. None
  595. None
  596. None
  597. It's okay to build things for yourself

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

  599. ⛳ ⛪ Indignation ⛪

  600. ⛳ ⛪ Indignation ⛪

  601. ⛳ ⛪ Indignation ⛪

  602. ⛳ ⛪ Inadequacy Indignation Incompetence

  603. ⛳ ⛪ Inadequacy Indignation Incompetence

  604. I s you

  605. None
  606. None
  607. None
  608. None
  609. None
  610. None
  611. None
  612. fine_ants

  613. fine_ants

  614. None
  615. Maybe you're right

  616. Creativity isn't for everyone

  617. If you're ,

  618. perfectly content If you're ,

  619. totally fulfilled If you're ,

  620. OK with status quo If you're ,

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

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

  623. Negative feels are a symptom

  624. Root cause analysis

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

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

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

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

    Technology-to-practice friction? • Work can't offer what you need? • Internal baggage to get over?
  629. Reflect on your feels

  630. Reflect on your feels

  631. Your async brain

  632. Your async brain

  633. Your async brain

  634. Your async brain

  635. Your async brain

  636. Your async brain

  637. None
  638. None
  639. None
  640. None
  641. None
  642. None
  643. None
  644. None
  645. None
  646. Find your outlet

  647. Find your outlet *

  648. Find your outlet * *it may not involve software

  649. Tomorrow!

  650. ⛱ Tomorrow!

  651. Tomorrow!

  652. Test Smells Tomorrow!

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

  654. We need creative types to help improve the industry. join@testdouble.com

  655. Know any teams looking for great programmers? hello@testdouble.com

  656. Thank you!

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