Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
How to Scratch an Itch (in 200 Repos or Less)
Search
Justin Searls
November 01, 2016
Programming
2
650
How to Scratch an Itch (in 200 Repos or Less)
Justin Searls
November 01, 2016
Tweet
Share
More Decks by Justin Searls
See All by Justin Searls
Surgical Refactors
searls
9
12k
Sometimes a Controller is Just a Controller
searls
10
7.5k
The Social Coding Contract
searls
8
16k
JavaScript Testing Tactics ⚡️ Lightning Edition
searls
2
3.9k
The "Rails of JavaScript" won't be a framework
searls
3
760
Breaking up (with) your test suite
searls
13
15k
as easy as rails
searls
3
490
1st class web development with lineman
searls
4
5.2k
JavaScript Testing Tactics
searls
3
16k
Other Decks in Programming
See All in Programming
開発者とQAの越境で自動テストが増える開発プロセスを実現する
92thunder
1
180
「Chatwork」Android版アプリを 支える単体テストの現在
okuzawats
0
180
フロントエンドのディレクトリ構成どうしてる? Feature-Sliced Design 導入体験談
osakatechlab
8
4.1k
RWC 2024 DICOM & ISO/IEC 2022
m_seki
0
200
KMP와 kotlinx.rpc로 서버와 클라이언트 동기화
kwakeuijin
0
140
【re:Growth 2024】 Aurora DSQL をちゃんと話します!
maroon1st
0
770
MCP with Cloudflare Workers
yusukebe
2
220
As an Engineers, let's build the CRM system via LINE Official Account 2.0
clonn
1
670
[JAWS-UG横浜 #76] イケてるアップデートを宇宙いち早く紹介するよ!
maroon1st
0
450
DevFest Tokyo 2025 - Flutter のアプリアーキテクチャ現在地点
wasabeef
5
900
クリエイティブコーディングとRuby学習 / Creative Coding and Learning Ruby
chobishiba
0
3.9k
tidymodelsによるtidyな生存時間解析 / Japan.R2024
dropout009
1
730
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
44
9.3k
Imperfection Machines: The Place of Print at Facebook
scottboms
266
13k
4 Signs Your Business is Dying
shpigford
181
21k
How To Stay Up To Date on Web Technology
chriscoyier
789
250k
Automating Front-end Workflow
addyosmani
1366
200k
Six Lessons from altMBA
skipperchong
27
3.5k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
95
17k
Rails Girls Zürich Keynote
gr2m
94
13k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
0
94
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
2
160
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
Documentation Writing (for coders)
carmenintech
66
4.5k
Transcript
scratch an itch how to
scratch an itch (in 200 repos or less) how to
@searls is my real name.
@searls is my real name. My parents were on-brand.
This is my 2011 face!
This is my 2011 face! Stuck with it forever.
I co-founded @testdouble.
I co-founded @testdouble. It's like consulting, but good!
scratch an itch (in 200 repos or less) how to
Creativity
None
OK!
So, what's creativity?
None
Is creativity passion?
Passion is hot right now!
Passion is hot right now!
Passion is hot right now!
Passion is hot right now!
Passion is hot right now!
Passion is hot right now!
Passion is hot right now!
Passion is hot right now!
Passion is hot right now!
Passion is hot right now!
Passion's hot right now!
Passion's hot right now!
Nope, not passion!
Is creativity art?
None
None
Ehh…
Is creativity vision?
None
☁
None
Vision's not enough.
None
None
None
Are YOU creative?
Are YOU creative? Incredibly passionate
Are YOU creative? Incredibly passionate Create beautiful things
Are YOU creative? Incredibly passionate Create beautiful things Can see
into the future
Are YOU creative? Incredibly passionate Create beautiful things Can see
into the future ❌
Are YOU creative? Incredibly passionate Create beautiful things Can see
into the future ❌ ❌
Are YOU creative? Incredibly passionate Create beautiful things Can see
into the future ❌ ❌ ❌
None
None
Creative Spark
None
✨
✨
✨
✨
✨
✨
✨
✨
None
☝
☝
☝
☝ Creativity is a chronic illness.
☝ Creativity is a chronic illness.
None
None
None
None
None
Negative emotions
Negative emotions Positive outcomes
None
None
None
At the beginning of my career…
None
None
☹
☹
☹
It took me years to realize this:
I needed an outlet
Production wasn't a great creative outlet
None
None
None
None
None
None
None
We create it, but it's not our own
None
Me
Me My team
None
None
None
None
None
None
None
None
None
None
None
None
Dev QA Prod
Dev QA Prod
Dev QA Prod
Dev QA Prod
Dev QA Prod
Dev QA Prod
Dev QA Prod
Dev QA Prod
Dev QA Prod ☹
Dev QA Prod ☹
Dev QA Prod ☹
Dev QA Prod ☹ Don't cede control of your happiness
to someone else
Create space for creativity
One morning…
None
None
None
⌨
⌨ *hack* *hack* *hack* *hack*
⌨ *hack* *hack* *hack* *hack*
⌨ *hack* *hack* *hack* *hack*
☹
☹
None
None
None
None
Main Project
Main Project
Main Project Side Project
Burning the candle at both ends
Burning the candle at both ends
Why do I do this?
Why do I do this?
Why do I do this?
Why do I do this?
Why do I do this?
Why do I do this?
Why do I do this?
Why do I do this?
Why do I do this?
Why do I do this?
Why do I do this?
Why do I do this?
Why do I do this?
⛳ ⛪
⛳ ⛪
⛳
⛳ Inadequacy
⛳ ⛪
⛳ ⛪
⛪
⛪ Indignation
⛳ ⛪
⛳ ⛪
None
Incompetence
Inadequacy Indignation Incompetence
Inadequacy Indignation Incompetence people to imitate
Inadequacy Indignation Incompetence people to imitate something to say
Inadequacy Indignation Incompetence room to improve people to imitate something
to say
Means Inadequacy Indignation Incompetence room to improve something to say
Means Inadequacy Indignation Incompetence room to improve Motive
Means Inadequacy Indignation Incompetence Motive Opportunity
⛳ ⛪
⛳ ⛪ Privilege!
None
[email protected]
⛳ ⛪ Inadequacy Indignation Incompetence
Creative ideas
I feel ___________, but I
express indignation I feel ___________, but I
express indignation admit incompetence I feel ___________, but I ____________
. Maybe if I
express indignation admit incompetence lessen inadequacy I feel ___________, but
I ____________ . Maybe if I build it, I'll _____________ .
⛳ ⛪ Incompetence
Book-learning
Book-learning
vs. Book-learning
vs. Capitalism Book-learning
None
We need a new citation editor.
express indignation admit incompetence lessen inadequacy I feel ___________, but
I ____________ . Maybe if I build it, I'll _____________ .
express indignation admit incompetence lessen inadequacy I feel ___________, but
I ____________ . Maybe if I build it, I'll _____________ . I don't need CompSci
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
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
None
I did it! ☺
Accomplishments:
Accomplishments: • All 3 major style guides
Accomplishments: • All 3 major style guides • Dozens of
types of sources
Accomplishments: • All 3 major style guides • Dozens of
types of sources • Complete account system
Accomplishments: • All 3 major style guides • Dozens of
types of sources • Complete account system • Bibliography creation & export
Accomplishments: • All 3 major style guides • Dozens of
types of sources • Complete account system • Bibliography creation & export • Millions of users
I made it up as I went!
Very minor downsides:
Very minor downsides: • Completely insecure
Very minor downsides: • Completely insecure • 100% manual testing
Very minor downsides: • Completely insecure • 100% manual testing
• GB's of daily server warnings
Very minor downsides: • Completely insecure • 100% manual testing
• GB's of daily server warnings • A 16,000 line PHP file
Fear of bad code can paralyze you
Recognize when it's safe to make a mess
⛳ ⛪ Incompetence
⛳ ⛪ Incompetence
⛳ ⛪ Incompetence
The Web
The Web vs.
The Web ⛓ The Metal vs.
I tried to "go native"
None
None
☹
None
None
None
☹
None
None
None
☹
None
None
I was too dumb for native apps
But then, one day…
None
None
Now I really wanted to go native
Now I really wanted to go native
Now I really wanted to go native
Now I really wanted to go native
None
• Beautiful
• Beautiful • Innovative
• Beautiful • Innovative • Life-altering
• Beautiful • Innovative • Life-altering • Impossibly slow
None
3 minutes ⏲
There was no "Mobile Web"
No such thing as "Responsive Design"
express indignation admit incompetence lessen inadequacy I feel ___________, but
I ____________ . Maybe if I build it, I'll _____________ .
express indignation admit incompetence lessen inadequacy I feel ___________, but
I ____________ . Maybe if I build it, I'll _____________ . mobile web is a joke
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
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
None
None
<html>
<html> libxml2
<html> libxml2 Objects
<html> libxml2 Objects
<html> libxml2 Objects
<html> libxml2 Objects Build UI
<html> libxml2 Objects Build UI
None
• 66% faster! Legible!
• 66% faster! Legible! • Full-featured
• 66% faster! Legible! • Full-featured • 1st OSS contribution
• 66% faster! Legible! • Full-featured • 1st OSS contribution
• 1st user group talk
• 66% faster! Legible! • Full-featured • 1st OSS contribution
• 1st user group talk • Rejected by Apple
None
None
☺
Mission Accomplished ☺
Learning simple stuff is easy…
Learning simple stuff is easy… …if you can fit it
inside a day
Learning something bigger?
Learning something bigger?
Learning something bigger?
Learning something bigger?
Learning something bigger? Then you need a real purpose.
Learning something bigger? Then you need a real purpose.
Learning something bigger? Then you need a real purpose.
Find the smallest thing you can caremad over
⛳ ⛪ Incompetence
⛳ ⛪ Incompetence
⛳ ⛪ Incompetence
Java kids be like
Java kids be like
Ruby kids be like
Ruby kids be like
None
Java
Java
Ruby
Ruby
Programming
Dynamic Programming
Meta-programming
My first Ruby team
My first Ruby team
My first Ruby team's tests
My first Ruby team's tests
dog = double()
dog = double() dog.should_receive(:wag)
dog = double() dog.should_receive(:wag) .with(:tail)
dog = double() dog.should_receive(:wag) .with(:tail) subject.pet(dog)
dog = double() dog.should_receive(:wag) .with(:tail) subject.pet(dog)
dog = double() dog.should_receive(:wag) .with(:tail) subject.pet(dog) No type awareness
dog = double() dog.should_receive(:wag) .with(:tail) subject.pet(dog) Out of order
dog = double() dog.should_receive(:wag) .with(:tail) subject.pet(dog) Verbose API
None
express indignation admit incompetence lessen inadequacy I feel ___________, but
I ____________ . Maybe if I build it, I'll _____________ .
express indignation admit incompetence lessen inadequacy I feel ___________, but
I ____________ . Maybe if I build it, I'll _____________ . mad at these mocks
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
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
Java Ruby Cargo-cult
Java Ruby
Java Ruby
Java Ruby
Learned Humility
Learned Humility
Learned Humility
Learned Humility ⏰
dog = gimme(Dog)
dog = gimme(Dog) subject.pet(dog)
dog = gimme(Dog) subject.pet(dog) verify(dog).wag(:tail)
gimme
• Had type awareness gimme
• Had type awareness • Preserves test order gimme
• Had type awareness • Preserves test order • Clever,
terse APIs gimme
• Had type awareness • Preserves test order • Clever,
terse APIs • Nobody adopted it gimme
• Had type awareness • Preserves test order • Clever,
terse APIs • Nobody adopted it • Influenced competitors gimme
Getting out of the line of fire
Working code can sell ideas
Working code can sell ideas ⌨ +
Working code can sell ideas = ⌨ +
Ideas require no maintenance! ☎
⛳ ⛪ Incompetence
⛳ ⛪ Incompetence
⛳ ⛪ Incompetence
⛳ ⛪ Inadequacy ⛳
Midwestern programming
None
None
None
None
None
None
None
I'm not great at cocktail parties
I had some rockstar envy
express indignation admit incompetence lessen inadequacy I feel ___________, but
I ____________ . Maybe if I build it, I'll _____________ .
express indignation admit incompetence lessen inadequacy I feel ___________, but
I ____________ . Maybe if I build it, I'll _____________ . my work isn't exciting
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
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
mustachify.me
mustachify.me
mustachify.me
"Let's think bigger"
"Let's think bigger"
Must Stache
Must Stache Cory
Must Stache Cory
Must Stache Cory
• Posted to a forum at 11pm
• Posted to a forum at 11pm •
• Posted to a forum at 11pm • • 12,000
views (~3,000 installs)
• Posted to a forum at 11pm • • 12,000
views (~3,000 installs) • 40 pages per user/hour
• Posted to a forum at 11pm • • 12,000
views (~3,000 installs) • 40 pages per user/hour • 42 images/page
• 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
None
Serverless!
Must Stache Cory
Must Stache Cory
Must Stache Cory Cory
Must Stache Cory Cory
Must Stache Cory Cory
Many months later
None
None
None
None
None
None
☺
None
✉
✉ ✉ ✉ ✉ ✉ ✉ ✉ ✉ ✉ ✉
✉ ✉✉ ✉ ✉ ✉ ✉ ✉ ✉ ✉ ✉ ✉
This wasn't fan mail
None
• Built a popular thing
• Built a popular thing • Was unaware of that
popularity
• Built a popular thing • Was unaware of that
popularity • Made someone else millions
• Built a popular thing • Was unaware of that
popularity • Made someone else millions (?)
• Built a popular thing • Was unaware of that
popularity • Made someone else millions • Made thousands of users angry (?)
• Built a popular thing • Was unaware of that
popularity • Made someone else millions • Made thousands of users angry • Left with no recourse (?)
Serverless isn't
Popularity without purpose is toxic ☢
⛳ ⛪ Inadequacy ⛳
⛳ ⛪ Inadequacy ⛳
⛳ ⛪ Inadequacy ⛳
I was on a legacy rescue project
I was on a legacy rescue project I was on
a legacy rescue project
I was on a legacy rescue project I was on
a legacy rescue project My kids will inherit it
I was on a legacy rescue project I was on
a legacy rescue project
I was on a legacy rescue project I was on
a legacy rescue project I wanted to be rescued
☹
☹
☹
Can I program anything useful in under 2 months anymore?
to-do apps ✅
Project: Plaintext to-dos
Project: - Task A Plaintext to-dos
Project: - Task A - Task B Plaintext to-dos
Project: - Task A - Task B - Task C
Plaintext to-dos
Project: / Task A - Task B - Task C
Plaintext to-dos
Project: / Task A # Task B - Task C
Plaintext to-dos
Project: / Task A # Task B - Task C
{6/10/2011} Plaintext to-dos
express indignation admit incompetence lessen inadequacy I feel ___________, but
I ____________ . Maybe if I build it, I'll _____________ .
express indignation admit incompetence lessen inadequacy I feel ___________, but
I ____________ . Maybe if I build it, I'll _____________ . I hate all to-do apps
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
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
A quest!
Build a great to-do app… ✅
…in under 24 hours ⏲
doing-it: doing-it app
doing-it: - make a div contenteditable doing-it app
doing-it: - make a div contenteditable - dump it in
localStorage doing-it app
doing-it: - make a div contenteditable - dump it in
localStorage - read from localStorage doing-it app
doing-it: - make a div contenteditable - dump it in
localStorage - read from localStorage - use it to track the rest doing-it app
I did it!
None
None
✅ doing-it
• Finished within 1 day ✅ doing-it
• Finished within 1 day • Renewed confidence ✅ doing-it
• Finished within 1 day • Renewed confidence • Still
works ( Heroku!) ✅ doing-it
• Finished within 1 day • Renewed confidence • Still
works ( Heroku!) • No users ➡ no e-mail ✅ doing-it
• Finished within 1 day • Renewed confidence • Still
works ( Heroku!) • No users ➡ no e-mail • Threw it on GitHub ✅ doing-it
Self-validation
"How do I open-source?" ⭐ ⭐
None
Write (me) some docs, my child.
Send (me) a pull request
⭐ ⭐
⭐ ⭐
⭐ ⭐
⭐ ⭐ Rejected! This is not how I'd do it.
Do you want another boss?
None
I made what I wanted, then flung it online
Can't predict what'll stick
⛳ ⛪ Inadequacy ⛳
⛳ ⛪ Inadequacy ⛳
⛳ ⛪ Inadequacy ⛳
The Thoughtleader's Dilemma
The Thoughtleader's Dilemma • Do interesting work
The Thoughtleader's Dilemma • Do interesting work • Share insights
with others
The Thoughtleader's Dilemma • Do interesting work • Share insights
with others • Stop doing the work
The Thoughtleader's Dilemma • Do interesting work • Share insights
with others • Stop doing the work • Thoughtlead others off a cliff
Test-Driven Development
One day, I started leading thoughts…
google "tdd failure"
None
None
This is "London- school" TDD
☝ This is "London- school" TDD
☝ This is "London- school" TDD It isn't, really
None
None
Discovery Testing
None
None
None
None
None
express indignation admit incompetence lessen inadequacy I feel ___________, but
I ____________ . Maybe if I build it, I'll _____________ .
express indignation admit incompetence lessen inadequacy I feel ___________, but
I ____________ . Maybe if I build it, I'll _____________ . TDD isn't understood
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
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
Simplisafe™ alarm system
Simplisafe™ alarm system
Simplisafe™ alarm system
None
homebridge
homebridge ❓
homebridge ❓
homebridge ❓ Hey Siri, turn on my alarm
❓
Does my TDD process work?
Several hours later… ⏲
Whew!
npm install simplisafe
var simplisafe = require('simplisafe')
var simplisafe = require('simplisafe') simplisafe({
var simplisafe = require('simplisafe') simplisafe({ user: '
[email protected]
',
var simplisafe = require('simplisafe') simplisafe({ user: '
[email protected]
', password: '1234'
var simplisafe = require('simplisafe') simplisafe({ user: '
[email protected]
', password: '1234'
}, function (er, client) {
var simplisafe = require('simplisafe') simplisafe({ user: '
[email protected]
', password: '1234'
}, function (er, client) { client.setState('away')
var simplisafe = require('simplisafe') simplisafe({ user: '
[email protected]
', password: '1234'
}, function (er, client) { client.setState('away') })
var simplisafe = require('simplisafe') simplisafe({ user: '
[email protected]
', password: '1234'
}, function (er, client) { client.setState('away') })
simplisafe
• Followed my own advice simplisafe
• Followed my own advice • It actually went really
well! simplisafe
• Followed my own advice • It actually went really
well! • I went too long without validating my ideas simplisafe
• Followed my own advice • It actually went really
well! • I went too long without validating my ideas simplisafe
Dear technical managers,
Dear former developers,
Everything seems simple at a distance
Pattern recognition yields generic advice
Trust the people closest to the work
⛳ ⛪ Inadequacy ⛳
⛳ ⛪ Inadequacy ⛳
⛳ ⛪ Inadequacy ⛳
⛳ ⛪ Indignation ⛪
I'm a worrier
None
None
None
None
None
None
None
None
☺
Six years pass…
None
None
None
❓
None
None
SPoFaaS
SPoFaaS (single point of failure as a service)
None
None
None
None
None
None
None
None
None
express indignation admit incompetence lessen inadequacy I feel ___________, but
I ____________ . Maybe if I build it, I'll _____________ .
express indignation admit incompetence lessen inadequacy I feel ___________, but
I ____________ . Maybe if I build it, I'll _____________ . security matters
express indignation admit incompetence lessen inadequacy I feel ___________, but
I ____________ . Maybe if I build it, I'll _____________ . security matters am not an expert
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
None
ants
ne_ants
fine_ants
FineAnts.download("vanguard", {
FineAnts.download("vanguard", { user: "janelastname",
FineAnts.download("vanguard", { user: "janelastname", password: "password"
FineAnts.download("vanguard", { user: "janelastname", password: "password" })
FineAnts.download("vanguard", { user: "janelastname", password: "password" })
FineAnts.download("vanguard", { user: "janelastname", password: "password" }) [{
FineAnts.download("vanguard", { user: "janelastname", password: "password" }) [{ id: "12345",
FineAnts.download("vanguard", { user: "janelastname", password: "password" }) [{ id: "12345",
amount: 12.34
FineAnts.download("vanguard", { user: "janelastname", password: "password" }) [{ id: "12345",
amount: 12.34 }]
fine_ants_app http://localhost:3000
fine_ants_app http://localhost:3000
fine_ants_app http://localhost:3000
fine_ants
• I (almost) have a dashboard fine_ants
• I (almost) have a dashboard • Locally encrypted fine_ants
• I (almost) have a dashboard • Locally encrypted •
Put Selenium to good use fine_ants
• I (almost) have a dashboard • Locally encrypted •
Put Selenium to good use • Not a generalizable app fine_ants
No shame in "hobby-grade"
Selfish little toy apps inspired many of us
⛳ ⛪ Indignation ⛪
⛳ ⛪ Indignation ⛪
⛳ ⛪ Indignation ⛪
None
gimme
like stunt doubles Test doubles are
like stunt doubles Test doubles are
like stunt doubles Test doubles are
like stunt doubles Test doubles are ☁
like stunt doubles Test doubles are ☁
like stunt doubles Test doubles are ☁ ✅
None
☁
☁
☁
☁
☁
☁
☁
express indignation admit incompetence lessen inadequacy I feel ___________, but
I ____________ . Maybe if I build it, I'll _____________ .
express indignation admit incompetence lessen inadequacy I feel ___________, but
I ____________ . Maybe if I build it, I'll _____________ . users are in pain
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
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
My entire career may hinge on two or three concepts
None
None
None
None
∞
None
.js
npm install testdouble
http://is.gd/happytdd
https://is.gd/td_vs_sinon
testdouble.js
• Works pretty well testdouble.js
• Works pretty well • Shares what we've learned clearly
testdouble.js
• Works pretty well • Shares what we've learned clearly
• Better than cynicism testdouble.js
Not getting through? Tweak your message
Not winning != Not worthwhile
Criticism is easier than contribution
⛳ ⛪ Indignation ⛪
⛳ ⛪ Indignation ⛪
⛳ ⛪ Indignation ⛪
I emoji
Creativity is serious work
Open source:
You create, Open source:
You create, we depend Open source:
None
None
❤
❤
❤
❤
❤
Hating your own creations
express indignation admit incompetence lessen inadequacy I feel ___________, but
I ____________ . Maybe if I build it, I'll _____________ .
express indignation admit incompetence lessen inadequacy I feel ___________, but
I ____________ . Maybe if I build it, I'll _____________ . exploited & exhausted
express indignation admit incompetence lessen inadequacy I feel ___________, but
I ____________ . Maybe if I build it, I'll _____________ . exploited & exhausted can't escape it
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
Build something no business would want
…or just license everything GPL
…or just license everything GPL
emoruby
❤
❤
❤
❤
❤
❤
❤
❤
❤ ❤▪▪
❤ ❤▪▪
class Heart def wave puts "smiley earth_asia" end end
Heart.new.wave
emoruby ❤
• It's real dumb emoruby ❤
• It's real dumb • Brought me joy emoruby ❤
• It's real dumb • Brought me joy • Zero
issues this year emoruby ❤
It's okay to build things for yourself
None
None
None
It's okay to build things for yourself
It's okay to build things for yourself fun
⛳ ⛪ Indignation ⛪
⛳ ⛪ Indignation ⛪
⛳ ⛪ Indignation ⛪
⛳ ⛪ Inadequacy Indignation Incompetence
⛳ ⛪ Inadequacy Indignation Incompetence
I s you
None
None
None
None
None
None
None
fine_ants
fine_ants
None
Maybe you're right
Creativity isn't for everyone
If you're ,
perfectly content If you're ,
totally fulfilled If you're ,
OK with status quo If you're ,
OK with status quo If you're why change things? ,
OK with status quo If you're why change things? ,
⛱
Negative feels are a symptom
Root cause analysis
Root cause analysis • Wrong tool for the job?
Root cause analysis • Wrong tool for the job? •
Technology-to-practice friction?
Root cause analysis • Wrong tool for the job? •
Technology-to-practice friction? • Work can't offer what you need?
Root cause analysis • Wrong tool for the job? •
Technology-to-practice friction? • Work can't offer what you need? • Internal baggage to get over?
Reflect on your feels
Reflect on your feels
Your async brain
Your async brain
Your async brain
Your async brain
Your async brain
Your async brain
None
❓
❓
None
None
None
None
None
None
None
None
✅
Find your outlet
Find your outlet *
Find your outlet * *it may not involve software
Tomorrow!
⛱ Tomorrow!
Tomorrow!
Test Smells Tomorrow!
I'm @searls—tell me what you think !
We need creative types to help improve the industry.
[email protected]
Know any teams looking for great programmers?
[email protected]
Thank you!
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