Transcript

Are you a “creative person”? Why is it that most of us would probably hesitate to answer “yes” to that question?

Stereotypes that paint creativity as a mysterious force for good in the world have incidentally discouraged many of us from practicing creativity in our own lives.

This talk presents a strange theory: what if creativity is more like a chronic illness, one fueled by toxic emotions and character flaws? If nothing else, that would certainly lower the barrier to entry.

Using my own career as a case study, this talk is reflection on how my own shortcomings have served as my inspiration and how creative work has helped me mitigate my personal failings while learning to accept myself.

Or, if you’d rather, this is a talk about 9 whacky side projects involving mustaches and home security systems.

The video above was recorded at SCNA on October 21, 2016, at USC Viterbi School of Engineering.

00:00
This talk is titled how to scratch an itch in 200 repos
00:03
or less. @searls is my real name
00:06
My parents were quite prescient and on-brand back when
00:09
they named me. This is what my face looked
00:12
like in 2011 and thanks to personal
00:15
branding, I'm now stuck with this face forever because you might see it
00:18
from Twitter or Github as my avatar
00:21
Just like Todd mentioned, I co-founded an agency with him
00:22
Just like Todd mentioned, I co-founded an agency with him 5 years ago called
00:25
Test Double. Our mission in life is to improve
00:28
a lot of the stuff about software that sucks, and one of the things that sucks a lot
00:31
is that most engineering teams operate at capacity
00:34
and they don't have enough slack in the system to improve
00:37
things like testing, and quality, and craft. So we come in
00:40
to pair with those teams to add enough capacity so that
00:43
we can all work together to make stuff better. It might sound
00:46
familiar as a business model, it's kind of like consulting except good
00:49
So if your team could benefit from that sort of
00:52
thing, I hope you'll chat with me or Todd tonight or tomorrow
00:55
So, yeah, how to scratch an itch You might be able to
00:58
infer from that title that this is a talk about creativity
01:01
Everyone loves creativity, "yay! creativity!" That's a good
01:04
thing, right, ok, cool, let's talk about creativity. …So what is
01:07
creativity, exactly? It's one of those axiomatic
01:10
concepts that we generally don't interrogate
01:13
or introspect much on, and I forced myself to
01:16
think about this when I was designing this talk and
01:19
The first thing that came to mind is that creativity is a lot like passion
01:22
Passion's hot right now. We got all these passion projects. Look at all
01:25
these passionate logos for passion projects that people have
01:28
made. But personally I don't get on board with a movement
01:31
until I can find a way to engage with a brand
01:34
and its hashtag. So the American Express passion project.
01:37
And it actually serves as a really good example of why
01:40
passion doesn't equal creativity, because it fizzles out
01:43
kind of like domain name registrations
01:46
So the Amex passion project is just gone
01:49
now. So, no, passion isn't quite
01:52
what creativity is. You might say "is creativity art?"
01:55
You certainly—coding feels creative, right?
01:58
We know it's a creative enterprise, but not all of our
02:01
code is art, when I put it up on a screen
02:04
You know, it's mostly functional most of the time. It certainly can
02:07
be art, but it doesn't seem like the best metaphor
02:10
or abstraction. You could say, is creativity vision
02:13
and foresight? If we had a crystal ball where you could see
02:16
where the cloud is and where it's going to go and there might be an
02:19
aspect of that, but that's not in itself building anything
02:22
it's just prognostication, so vision's not enough
02:25
And I thought about this at length to try to
02:28
figure out, "am I creative? are you creative?"
02:31
And if I was forced to think in those terms
02:34
and that popular framing about creativity like filling out a survey
02:37
Are you incredibly passionate? Do you create beautiful things?
02:40
Can you see into the future? Of course most of us would say no
02:43
to all three of those things, so certainly we're not
02:46
creative. That's a really high bar to clear. Creative people
02:49
are these magical unicorns and that's not me, that's not us.
02:52
That's kind of disappointing. We can
02:55
usually at least relate to the idea of a creative spark, right, like we
02:58
have an idea in the back of our heads we're walking down the street and an
03:01
idea occurs and then of course what happens next is we just
03:04
effortlessly create amazing things based on that idea
03:07
Unfortunately, that doesn't comport with my experience. Actually
03:10
I have a—creative ideas, they stress me
03:13
out. That spark, tells me— I'm already really busy
03:16
how am I going to find the time or the capability to go
03:19
and accomplish that thing
03:22
these ideas they sort of scare me, because I don't think I'm—gonna
03:25
have fear, uncertainty, and doubt I'm not going to be able to do them. Where does that spark
03:28
come from? Is there some big dragon breathing fire
03:31
behind me? Should I be running from my ideas or I'm going to burn
03:34
up? I got this fraught relationship with these
03:37
creative ideas in my head, and so I was thinking about my own
03:40
weird relationship with creativity and I realized
03:43
the best metaphor for me is that creativity is a chronic
03:46
illness. Which I know sounds horrifying
03:49
But here me out. Because what happens is I go two weeks
03:52
three weeks, four weeks, and eventually something makes
03:55
me angry, something wells up inside of me
03:58
and then I have an episode of creativity
04:01
and I emit a blog post or a library or a
04:04
framework. And
04:07
the way I think of it is it's like kidney stones
04:10
I'm passing npm modules
04:13
And then I feel a sense of relief
04:16
after. So I've seen this pattern
04:19
in my life, right? I've got all of these negative emotions, this
04:22
toxicity. I'm a really sad, broken individual and
04:25
over the course of my professional life I keep finding these
04:28
ways to shape that into positive outcomes
04:31
and I don't know how that happens, and so this talk is an exploration
04:34
into trying to figure that out, and maybe there's something that you can
04:37
relate to. Because what I've found is that that reframing
04:40
of what creativity is certainly lowers the
04:43
bar, it's like "are you a broken individual? Good! then you
04:46
can be creative, too!" So let's
04:49
wind all the way back to the beginning of my career
04:52
I was working at a big accounting firm, I wasn't very
04:55
competent. I didn't have very much autonomy
04:58
at my job, and I would get ideas like anyone gets ideas
05:01
But I wouldn't be able to act on those ideas, so they actually just
05:04
bummed me out. In fact, eventually the ideas would fade away
05:07
and that would make me feel relieved, because now they weren't stressing me
05:10
out. And it took me years to realize that what I was missing was
05:13
I didn't have an outlet to practice those creative ideas
05:16
To develop a feedback loop, just like we do with coding stuff
05:19
And I learned once I started trying that production
05:22
wasn't necessarily the best creative outlet, either
05:25
Us as developers working at machines
05:28
At work, we might think that this is creativity, building
05:31
ideas, but typically they're other people's ideas
05:34
we're building reports, or mailers, or shopping carts
05:37
and we feel creative, because we did create it
05:40
but because it wasn't our own, it doesn't really scratch the same itch, I don't think
05:43
Separately, we usually
05:46
work on teams and an important part of building software on teams
05:49
(there's me and that's my team)
05:52
An important part about building software on teams is that we're building everything
05:55
to be very consistent and orderly so that any of us can be productive
05:58
in that environment, but creativity is sporadic
06:01
and messy. I might have an idea like "Hey I could pull this
06:04
one package out and that would eliminate the need for these two packages
06:07
Because I could put a factory in front of them and look at this, and this is
06:10
really cool and I could be really proud of the creative thing that I just did
06:13
But from everyone else's perspective, they see the
06:16
system is becoming less stable and less workable. And
06:19
they're worried, and I get mad because they don't appreciate this cool
06:22
creative thing that I just did and then they
06:25
get angry because I keep going off the reservation and disrupting the
06:28
orderliness of the system. A third thing that
06:31
we see happen a lot at our company Test Double is, developers
06:34
who are passionate about what they do, they put a lot of effort
06:37
they tie up their ego in the stuff that \they build and then they hand it off
06:40
they get excited and then it just sits in QA
06:43
or people comment on their pull requests and
06:46
and things take forever and they don't see
06:49
it in front of users and then eventually they just get angry
06:52
because what they did was they ceded control
06:55
of their happiness and their emotional state to somebody else
06:58
and at work that's just not appropriate, because we're not building
07:01
this stuff for our own good
07:04
we need another place to practice
07:07
creativity. So you have to create your own space where that's
07:10
safe. And one morning, I was
07:13
taking a shower. Ideas come to me in the shower, I don't know when they come to you
07:16
but they always come to me in the shower, and I had an idea and
07:19
it made me angry, of course, because ideas are bad like I explained earlier
07:22
and I got so mad at this idea that
07:25
I went and sat at my computer and I hacked at it until I could build a thing
07:28
I felt that relief again, but this relief was
07:31
different. This was like the first green bar
07:34
in the test. This was like "OK, cool, I understand this now"
07:37
And I went from a disgruntled employee
07:40
to a merely gruntled employee because I was starting to learn
07:43
how to be productive with creativity
07:46
And from then on when I got a creative idea
07:49
in the shower, I'd roll my eyes because now I've gotta make time
07:52
for this—maybe there goes my Saturday or my evening or something
07:55
But at least I had a reasoned way to work through it
07:58
And so ever since I started programming
08:01
professionally, I've always had a main project that occupies most of my time
08:04
and most of my focus, but a little project to the side. Whenever I get
08:07
frustrated or I want to play with something or I'm learning something
08:10
I can pull on that thread as well, and I always balance both
08:13
of these things. Of course this comes with risks
08:16
I'm very often burning the candle at both ends
08:19
If I work all weekend because I'm so excited about my side project
08:22
then I come to work on Monday morning, the last thing I want to do is program
08:25
That can be problematic, and
08:28
in the last several years in particular I've spent so
08:31
much time on the road, doing all this open source stuff on top of
08:34
my normal job, that I'm often asking "Why do I do
08:37
this?" And that's where the introspection
08:40
of this talk is—part of why I did this
08:43
talk is that I don't think that I'm that special. I think all of us could be this
08:46
creative and it would save me a lot of time if you all would
08:49
do the talks instead of me
08:52
So when I sat and I
08:55
thought about why is it that I do this
08:58
I'm almost ashamed to admit those sources
09:01
because they're from my childhood, so I've got a few little childhood anecdotes
09:04
The first one's about golf. My dad was actually an amateur
09:07
golfer. One of my first memories is watching my
09:10
dad play golf on TV at an amateur PGA event
09:13
and so in southeastern Michigan, every well-to-do businessperson
09:16
wanted my dad in their foursome, so I spent as a kid
09:19
a ton of time at country clubs with kids that were way richer and
09:22
more world-weary and experienced and knowledgeable
09:25
and well-to-do than me
09:28
that was an important part of my upbringing, because it taught me the
09:31
ever-important skill of feeling inadequate
09:37
Talk about my church a little bit I went to a church that didn't
09:40
necessarily work in its community and serve the poor or anything
09:43
like that. I went to an upper crust white evangelical
09:46
Presbyterian church where I spent years 5
09:49
through 10 of my life learning how to understand very
09:52
intangible concepts and then feel extremely
09:55
strongly about them and argue with passionate rhetoric
09:58
and that was also a really important skill, because I learned
10:01
righteous indignation. Fun fact,
10:04
about me: nobody's ever asked for my opinion, because
10:07
no one's ever needed to
10:10
I can't help but form really strong opinions
10:13
the minute I see something, and that's less fun than
10:16
it sounds. Third thing about my life
10:19
I'm one of those people, like at lunch we were talking about college
10:22
programs. I got a computer science degree
10:25
in college, and I wasn't very good at it
10:28
My professors pulled me aside senior year when I was trying to find a job
10:31
and some of them confided in me that maybe I should find a more
10:34
hybrid role where I'm also talking to people more and maybe
10:37
not trusted with a computer
10:40
and it was through there that I learned this
10:43
real deep-grained incompetence and
10:46
what's funny about all those three things is that clearly they're negative but they have
10:49
flip sides that I think are really valuable to exploit
10:52
The inadequacy leads to me having a bunch of
10:55
people that I aspire to in my life—that I look up to
10:58
The indignation means that I always have something to say
11:01
or a perspective (whether it's valid or not) and
11:04
the incompetence means I don't view myself as a rockstar, I always
11:07
feel like I've got a lot to learn and a lot to improve
11:10
That translates to a means, a motive, and an opportunity
11:13
to exploit creative ideas
11:16
Also, worth mentioning here is this
11:19
these are all markers of tremendous amounts of privilege in my upbringing
11:22
most kids don't have the amount of spare time that I did to
11:25
nurse my existential grief
11:28
to the extent that I have, but through doing
11:31
a lot of creative stuff, I've learned how awesome and how enriching
11:34
and rewarding it can be. And getting back to Todd & I
11:37
forming Test Double, a big reason we did that is because we want everyone to be
11:40
able to have that experience by moving at a sustainable pace
11:43
by being able to build creative stuff in a way that's congruent
11:46
with our normal work life, so that you don't have to be
11:49
working on nights & weekends or particularly
11:52
privileged to be able to enjoy the fruits of creativity
11:55
If you want to talk to us about that
11:58
you can e-mail join@testdouble.com. Our first
12:01
step in our recruiting process is really low-pressure, it's not some sort of
12:04
technical interview at a white board, it's literally a conversation about
12:07
how we work and how you work and whether you'd like to try how
12:10
we work. Just to learn about us and learn a little bit about
12:13
what we've learned about productive, autonomous software development
12:16
So anyway, all these things: really negative
12:19
How does that lead to creative ideas? Well, I
12:22
kind of feel like it's a game of MadLibs™ in my head. This is my user
12:25
story for creativity. I feel
12:28
righteous indignation, but I don't know what I'm doing
12:31
Maybe, if I build something I will feel
12:34
less inadequate. And I have 9
12:37
little anecdotes. 9 little stories of side projects over my career
12:40
that have helped me to mitigate some of that toxicity
12:43
in my heart. And I'm going to start by talking about
12:46
incompetence. Because like I mentioned, I wasn't very good in college and
12:49
I was really worried: why would anyone ever pay me to write software?
12:52
when I can barely learn how to do it? And my library
12:55
at the time where I worked said "Hey, we need a new citation editor"
12:58
on the web. And I thought, you know, I'm
13:01
up to this challenge. I feel like I don't need this
13:04
Computer Science hifalutin stuff, but I also don't know how to
13:07
build apps, either, so maybe if I build it I'll at least
13:10
find a way to survive this profession, and it was a pretty low
13:13
pressure gig, because it was $10 an hour and I could
13:16
spend all summer on it. So I built this thing called
13:19
KnightCite, a little citation editor on the web. It was free
13:22
and I was really proud, I did it. I accomplished a lot
13:25
of my goals. It supports all the major styleguides, dozens
13:28
of sources (the only one that did that). Has an account
13:31
system where you can login, create bibliographies, and export them
13:34
It's got millions of users, and still to this day it's by
13:37
far the most-used piece of software that I've ever written, and
13:40
I made it all up as I went. I didn't read in a book how to do this
13:43
I just had to figure out how to do a reset password
13:46
thing, and I just figured it all out as I went. This, of course
13:49
had some very minor downsides. Like, for instance, it's totally
13:52
insecure.
13:55
It's 100% manual testing
13:58
It produces gigabytes of daily server warnings
14:01
That those poor admins who still
14:04
are, over a decade later, still dealing with
14:07
and it's one 16,000 line-long PHP file
14:10
of just if's and else's and string concatenation
14:13
But
14:16
what had happened to me in my classroom education was it had
14:19
drilled into me this fear that I don't get what's going on
14:22
and paralyzed me from ever practicing any of that creative
14:25
reflex and that creative muscle. So recognizing
14:28
that I needed a safe space where it was OK to make a mess
14:31
and to do that in concert with learning proper
14:34
computer science-y stuff was crucial
14:37
to me even being in this profession
14:40
much less on a stage, talking to you all about it. So that
14:43
certainly lessened my sense of incompetence. The
14:46
other thing at the time, the web was just a really fancy hypercard
14:49
implementation. I didn't feel like a real developer; my friends all worked
14:52
on airplane realtime controls and operating systems
14:55
so the web versus being
14:58
closer to the metal. Like, Uncle Bob told me—is Uncle Bob still
15:01
here today, that you're not a real programmer
15:04
unless you programmed assembly—well, I hadn't really programmed a lot of assembly
15:07
So I didn't feel like a real programmer. And so I
15:10
tried to go native at multiple points in my career
15:13
Maybe on a Saturday, I'd open up Xcode and say, "I'm gonna build an OS X
15:16
app", and i'd look at the documentation and it would confuse me and I'd feel
15:19
stupid, and then I'd wait a weekend and I'd go, and I'd
15:22
find a different part of the documentation and it'd depress me, and I'd feel
15:25
stupid. And then the week after that I would open up Xcode and I'd
15:28
look at a different part—and this outside in, like, "maybe if I just read it all
15:31
and then I'll know how to make native apps." Of course, that didn't go well
15:34
and time kept passing and I just concluded I was
15:37
probably too dumb to make native apps, maybe I just had
15:40
stay on the web. But then one day, a momentous day that a lot
15:43
of us remember: the iPhone was announced. And I thought to myself
15:46
as soon as this thing has an SDK, I'm gonna
15:49
make an app. I really want to build something for
15:52
the iPhone. The only problem was I had no idea what that would be. So I
15:55
got the original iPhone and it changed
15:58
my life, right? It was beautiful, obviously. It's innovative, there's nothing like it.
16:01
I knew from the first day I had it that it was
16:04
life-altering, because I took my wife to a restaurant and I ignored her the
16:07
whole time. And I was, like, "this is
16:10
the future!" Boy was I right
16:13
So, the thing about that was I
16:16
was staring so long, because Edge was so slow
16:19
and I had this one gaming forum I liked to visit, and
16:22
at first it was not very readable, but it took like
16:25
3 minutes to load a single page
16:28
of what were often 50, 60 page-long threads
16:31
so that was unacceptable. But there was no such thing as
16:34
the mobile web at the time. There's certainly no responsive
16:37
design, and so I thought to myself, maybe I could build an app that was like a
16:40
client to this website. Because I felt like the mobile web was a joke
16:43
but I kept failing to learn Cocoa, and so maybe
16:46
if I built something, I'd at least learn how to learn a
16:49
really unfamiliar thing and tackle a new platform
16:52
and I did it. So I started by building a little system that just
16:55
go and fetch the HTML, and then I figured out how to load a library
16:58
like libxml2 and parse all that into an object
17:01
model, and then, you know, I'd find all the media in those
17:04
objects and go and fetch them from the Internet, so I could build a
17:07
UI and have a custom user interface in an iPhone app
17:10
and you know what, it was way faster, and it was legible, and it was
17:13
full-featured, you could log in and edit posts and stuff, it was really neat
17:16
it was also the very first time I ever contributed to open source in a real
17:19
way, and it was so
17:22
cool, because every time that the Facebook app got launched, a
17:25
little bit of my code ran, and when I realized the impact that I
17:28
could have that way, I got addicted to sharing my stuff in
17:31
open source. It was also my very first user group talk, and so
17:34
the only reason I'm here today is because this one app happened to go well
17:37
of course, it was rejected by Apple
17:40
because, sometimes people swear on the Internet. And swearing
17:43
was against the guidelines, which were very prudish at the time
17:46
and so I threw it in the trash. But I didn't care
17:49
I was happy as a clam, because mission accomplished: I'd learned how to learn a thing
17:52
That was the real purpose for that exercise, and
17:55
what I learned there was that learning something simple is pretty easy so
17:58
long as you can fit it inside a day or whatever the bounds
18:01
of that passion is, because it's enough to get
18:04
through a weekend, but when the going gets tough, your motivation
18:07
fizzles. If you try to learn something bigger, that's going to take several
18:10
days, weeks, months, then you really need a purpose
18:13
that's going to push you through those barriers as time
18:16
goes on, or else you'll get distracted, you'll end up with just
18:19
a graveyard of half-finished projects everywhere
18:22
So what I try to do is find the smallest thing I can possibly
18:25
caremad about. Really, like, "I need this project to exist
18:28
and I'm going to just push and drag it over the finish line"
18:31
And that was a lot of valuable lessons, and certainly
18:34
made me feel less incompetent as a developer, because I got to go native
18:37
For a long time, I did Java development
18:40
and Java's a cool language, but I felt like it was
18:43
a little uncool. It was
18:46
certainly not getting a lot of buzz in the mid-aughts
18:49
certainly not like Ruby was. A lot of my friends, they
18:52
seemed really cool, they all worked on Ruby at work
18:55
and the best way I can compare the two languages is via
18:58
Super Mario Kart. You might think of Java
19:01
as being like one of the early courses, just like a really
19:04
wide lane and you can't really mess up that badly
19:07
If you go off the course, you can just drive back
19:10
on and we get that with Java, because it's not a
19:13
very expressive language. The compiler does a lot for you
19:16
the tools do a lot for you. Ruby is more like Rainbow Road
19:19
where it's narrower and faster
19:22
and if you fall off, Lakitu has to pick you up
19:25
and you lose like 20 seconds, and that's reflective of
19:28
dynamic programming and metaprogramming and how
19:31
you don't have the same amazing tooling. And so programming
19:34
even at this point in my career, I felt like I wasn't a very good programmer
19:37
much less dynamic programming. And at the time
19:40
in Ruby, meta-programming— changing at runtime the
19:43
object model, the classes and method definitions
19:46
I didn't even understand how that could possibly work. So I joined
19:49
my first Ruby team completely terrified and surrounded by people who
19:52
were way cooler than me and I thought "I have nothing to contribute
19:55
here" until I looked at their test suite
19:58
Because in Java, we had a pretty formal sense of what
20:01
good tests looked like, and I knew that Rubyists wrote a lot of tests
20:04
But it turns out that they all sucked, and so when I looked
20:07
at those tests, I thought maybe this is a way for me to sneak in
20:10
the back door and actually be relevant. I looked at a test like this
20:13
This is creating a fake dog object and it's saying
20:16
the dog should be called with the method wag and the argument tail
20:19
and then you pass the dog to your subject under test
20:22
and this just looked way wrong to me. First, there's no type awareness
20:25
so you don't know that dog actually responds to wag. Then
20:28
these things are out of order. It's like given-then-when and that feels
20:31
awkward. And the API for making that
20:34
test double and stubbing it was kinda confiusing, so
20:37
I got caremad enough to say maybe
20:40
I hate these mock objects, but if I
20:43
can't metaprogram Ruby, I can't build something to replace them
20:46
so maybe if I build it, I'll at least find a way to fit in
20:49
as a Rubyist. And my whole goal here was just to
20:52
cargo-cult my favorite test double library in Java and implement it
20:55
in Ruby. And it turns out that that didn't work so well
20:58
I learnedl some
21:01
humility in the process that I had to go and actually talk to humans about
21:04
the idioms and conventions in Ruby. I had to really bone up and learn
21:07
how the Ruby object model worked. And then I had to put the time
21:10
in. I took two weeks off for Christmas that year and I spent the whole time
21:13
squirreled away just working on this, which my family
21:16
didn't appreciate. And so what came
21:19
out is this little fun gem called gimme. You pass it a type
21:22
the subject
21:25
It's in the correct order. Here you can say you verify that the
21:28
dog's called with wag and tail in a way that looks like a method
21:31
invocation. And so I was really proud because this had the type awareness I was looking
21:34
for. It preserves the test order. Has a clever, terse Ruby
21:37
like API. Of course, no one adopted it, because nobody
21:40
knew who I was, but I shopped it around at a couple conferences and got people
21:43
like Jim Weirich to incorporate this style into Flexmock
21:46
and now RSpec—which was the first example—
21:49
has incorporated the same style. So I was able to kind-of move
21:52
the needle a little bit. But what that project taught me
21:55
was it's important to get out of the line of fire, right?
21:58
I don't want to try to
22:01
learn how to metaprogram in the most important feature, because
22:04
then I'm on the spot, and everyone's going to call me out as an imposter
22:07
Meanwhile, I learned that working code
22:10
can sell an idea way better than just nitpicking stuff
22:13
if I just come to that team and say "hey your tests suck, because I don't like this
22:16
and this and this", they'd say "what, so?". But if you throw a keyboard at
22:19
the problem and actually build something—a proof of concept—you can reframe the
22:22
discussion around the concrete stuff, and that was how I was able to sell
22:25
that idea. Additionally, if what you're selling is ideas
22:28
the best part is they require no maintenance. Nobody is going to open up a GitHub
22:31
issue at 3am on a Saturday because your idea stopped
22:34
working and so it's true that thoughtleaders
22:37
have more fun. So that made me certainly
22:40
feel less incompetent. A little bit
22:43
about my own sense of inadequacy and how I was able to deal with that
22:46
I practice a thing called Midwestern programming
22:49
So if this is the continental
22:52
US, my general
22:55
stereotyped perception is that people on the east coast, the developers
22:58
there they have serious jobs. They work at universities doing
23:01
high finance, it's very obviously valuable
23:04
work because it creates a lot of money. And on the west coast, your apps
23:07
obviously don't make any money, but they get a lot of attention and
23:10
all the really, really
23:13
popular snacklechat, and other stuff, everyone is sort of…
23:16
but in the midwest, we do a lot of charts
23:19
We have all these blue
23:22
chip companies that have backend office apps that they need
23:25
built that might only have three users, that might
23:28
not be that exciting. So frankly, I'm just not
23:31
great at cocktail parties, when I explain, "Oh, well we're building
23:34
this system that participates in demand-response energy
23:37
markets in various parts of the country", people… their eyes glaze
23:40
over and I heard a certain amount of rockstar envy. I just wanted to build a cool
23:43
thing that I could say in a sentence, people would know what I did
23:46
so I felt like my work wasn't exciting, but I only really knew how to build
23:49
enterprise stuff, so maybe if I built something that was just designed to
23:52
go viral, I'd feel more appreciated
23:55
There was a service called mustachify.me at the time. My friend Aidan
23:58
wrote, and what you do is pass an image and then it would
24:01
use face.com API and put mustaches on the faces
24:04
and I thought "that was cool, but let's go bigger". Like, what could I
24:07
build that leveraged this, so I made a Chrome extension called Must
24:10
Stache. And my friend Cory and I wrote it
24:13
and so basically we would just go to the mustachify service, replace
24:16
all the images on every page in your browser with a mustachified one
24:19
and we though this was really cool, we did it in like 3 hours
24:22
posted to a forum at night, we went to bed. And then the next day we had like
24:25
3000 installs of Pro users so they were visiting 40
24:28
pages an hour, or 42 images per tab and
24:31
we did the back-of-the-napkin math to realize it was like 5 million requests per hour
24:34
and we learned a valuable lesson
24:37
on that first day. It's actually a popular meme right now called
24:40
serverless architecture, because we just destroyed
24:43
Aidan's poor dyno. So we had to go back to the drawing board
24:46
and what we did was we rebuilt it but this time talking directly to the
24:49
face.com API which did the facial recognition and got you JSON
24:52
back. And then with that JSON we'd take our own image and
24:55
then just rotate, transpose, and put it over the images ourselves
24:58
And that was really fun. That was a fun weekend hack
25:01
But I didn't get a ton of attention. In fact time passed
25:04
I forgot all about this thing until I saw in the news that face.com
25:07
was getting acquired for $80 Million by facebook
25:10
that made me—that was surprising. So I went googling
25:13
around my Must Stache thing and saw it had been covered in Tested
25:16
it'd been covered in PC World in print. It
25:19
was on the Verge. You know, the Glamour magazine wrote an article
25:22
about this Chrome extension. And no one ever thought to contact me
25:25
But I felt pretty
25:28
proud that I'd had this impact. And pretty
25:31
annoyed too when I thought about it. I looked at face.com's
25:34
developer forums and almost all the posts were just people using my
25:37
stupid Must Stache thing, and the developers at face.com were
25:40
giving them active tech support. And I thought "but this is violating
25:43
your terms of—ohhhhh, it's so that you hockey stick and can
25:46
show off a ton of usage to Facebook, and I bet you a big
25:49
part of that $80M valuation had something to do with
25:52
my thing. Where's my cut? Well, my cut
25:55
came in the form of face.com shutting down and then me getting a bunch of
25:58
e-mail because all of a sudden, nobody's browser worked
26:01
Because all of the images would just 404
26:04
So that was cool. I built a popular
26:07
thing, yay, but I didn't get to
26:10
enjoy any of that popularity at all, and I may have
26:13
made somebody else millions of dollars [citation
26:16
needed]. But it feels
26:19
that way and I made lots of users angry
26:22
the only time they ever learned about me was after their stuff stopped
26:25
working. And I was left with no recourse
26:28
I didn't have time to build a new face.com, I just had to kind of
26:31
shut down the extension. So I learned in the process
26:34
serverless isn't. Obviously, if you depend on someone else's server
26:37
they can always pull the rug out from you
26:40
That was a valuable lesson. Also, chasing
26:43
popularity without an underlying purpose or value statement is
26:46
toxic. Because, when I did run into a problem, I didn't have
26:49
the time—there was no economic reason or even moral reason
26:52
for me to invest the time to fix it. I was just left, you know,
26:55
with people angry at me. So that sucked.
26:58
But! It did get covered, apparently,
27:01
in the last season of HBO's Silicon Valley where
27:04
they made an AR version of the plugin, so
27:07
that made me feel pretty cool, I guess.
27:10
Another way that I felt inadequate as a developer is that one time I was on this
27:13
legacy rescue project. A big waterfall project. If you don't know these
27:16
terms, by the way, legacy when we use that in software terms
27:19
it means that your kids will inherit it
27:22
and rescue means that you want to be rescued
27:25
So I was on this project for months
27:28
I could barely—my computer was just a memory
27:31
at this point, because I hadn't programmed in so long, I'd forgotten how to program
27:34
I felt like, "could I even program anything in 2 months anymore?"
27:37
I was really feeling kind of despondent and out of touch with myself as a
27:40
craftsperson. And at the time the
27:43
to-do apps were undergoing this renaissance, because it was still
27:46
early in the App Store and there was all these new to-do apps and I didn't really like any
27:49
of them. I kept falling back on this plaintext thing that I did where
27:52
I'd define a project with a colon, and I'd dasherize tasks
27:55
and I'd indicate something's done with a slash or blocked
27:58
with a pound sign, or I'd date it with braces and I
28:01
would just do this instead of using an app, but of course that was inconvenient
28:04
So I was thinking at the time, I feel like I hate all these
28:07
to-do apps, but I've also forgotten how to code so I can't
28:10
built my own. But maybe if I were to try I'd at least be able to restore my
28:13
dignity as a developer. And what I had to do there was I could give myself
28:16
the constraints needed and so I gave myself a little quest
28:19
I said "I want to build a to-do app that's so great
28:22
that I will use this at the exclusion of all the others…
28:25
and I only want to give myself 24 hours."
28:28
Can I still hack it? Under pressure.
28:31
So I built this app called doing-it.
28:34
So in doing-it, you define a project. And I started by just saying
28:37
contenteditable
28:40
dump it into localStorage, read it from localStorage
28:43
and then use the tool to track the rest of the work in the tool
28:46
So I was using doing-it to build doing-it from like minute
28:49
40. So I did it, I built the thing. It's still up at
28:52
todo.testdouble.com if you want to check it out you can
28:55
make a project, it'll autoformat based on the
28:58
the lead character here, so this is me making a couple different things
29:01
I can mark them done or overdue or high priority
29:04
and mark'em all done. And that was a lot of fun, you know I finished it within the
29:07
1 day. Gave me a renewed sense of confidence as a developer
29:10
It still works, thanks to Heroku's free dynos
29:13
No users, so no angry e-mails to
29:16
deal with. That was nice. And I just threw it up on GitHub
29:19
Because that's just the default thing, I just work in the open
29:22
But the purpose of course was just self-validataion that's what
29:25
I wanted to prove myself I could still program, but when I throw
29:28
stuff out into the open, that's just because that's my default, it's not because
29:31
I'm necessarily trying to become an open source star. But I do
29:34
get a lot of people—because I do a lot of open source—come to me and say
29:37
"How do I get into open source", and I think that maintainers struggle with this
29:40
question, because they want to make it sound easy to get involved
29:43
They might say, "write me some docs" or "Send me a
29:46
small pull request or something", and the problem with that of course is that
29:49
it's not the normal creative exchange of ideas. You might
29:52
even submit the pull request, but then most of the time that maintainer
29:55
is gonna get angry and say "this isn't how I'd do it—rejected!"
29:58
or "Change it!" and nobody needs another boss
30:01
right? So if you get into open source
30:04
to be creative, you just create stuff instead
30:07
Because, when you go and talk to open source maintainers, like "how did you get started
30:10
with open source," it was rarely "oh, I started doing docs for this
30:13
one other guy. It was usually "well, I made stuff that I
30:16
wanted, I threw it up on the Internet, and then some of it got popular
30:19
and most of it didn't." And you'll never predict what's
30:22
gonna stick and what's not. The reference to 200 repos is that I've probably
30:25
got like 250 repos that I've started and you've—
30:28
—odds are you've heard of zero of them. You may have heard of two or
30:31
three. But the vast majority is stuff that I just built
30:34
just for the sake of it, and I don't expect to hear about it again
30:37
And it might seem scary to work in the open, like
30:40
you know, people are going to criticize your code, but there's a secret:
30:43
nobody reads code. So
30:46
just don't worry about that. I'm not going to read your code
30:49
So that made me feel a little bit less inadequate
30:52
as a developer. Third one, now that I'm a self-professed
30:55
thoughtleader who talks at conferences a bunch, most
30:58
thoughtleaders get into this line of work, by doing something
31:01
interesting, or observing something interesting. Sharing that insight with
31:04
other people. But then eventually, you stop doing
31:07
the work, and you run the risk of thoughtleading other people straight off
31:10
a cliff. And you don't want to do that
31:13
When it comes to test-driven development, I talk about test-driven development
31:16
a lot. I've talked about it for more years than I've practiced
31:19
it, which is worrying. And one day I decided to start leading
31:22
some thoughts about test-driven development. In fact, if you google
31:25
the phrase tdd failure, this blog post is the top
31:28
result, which I"m particularly proud of
31:31
And I got a lot of attention. And it was the front-page of Hacker News and I was
31:34
in the article I was saying "well this is what London-school test-driven development
31:37
is", and then the guy who actually invented that, Nat Pryce, was like
31:40
"no, it's not, really", and I was like "But I just got 400
31:43
thousand page views saying it was" and now everyone's going to find out that I'm a big
31:46
idiot. And so I was really upset about that, but
31:49
then, being the opportunistic and
31:52
person just seeking the
31:55
validation of everyone else, I decided to pivot and instead
31:58
just rename what I do as its own thing, so I
32:01
call it "Discovery Testing" and I actually built libraries
32:04
and talks around how to practice Discovery Testing as its own school
32:07
of TDD. So much so, that I realized I give a lot of talks
32:10
but I hadn't actually practiced it much
32:13
and I was just full of hot air. And so I felt like TDD, of course
32:16
it's not very well understood. A lot of us try it and fail
32:19
or don't really learn how to apply it consistently, so there's stuff
32:22
to say here, but I've just become a talking head at this point
32:25
And so I realized this last summer, maybe I need to
32:28
start practicing this more on my own and really proving out
32:31
that it really works. I've gotta validate my ideas. So I've got this
32:34
Simplisafe alarm system. It's just a thing where you
32:37
stick it to the wall, and if a door
32:40
opens, an alarm goes off, police come to your house. Simple alarm monitoring
32:43
And I love Apple's HomeKit, because I really love this idea
32:46
of a smart home, like we learned today the Internet of Things
32:49
aside from denial of service attacks
32:52
is also useful for just the convenience
32:55
of controlling your domain. So I have this server called
32:58
homebridge, runs Node.js and
33:01
you can build adapters, so I was thinking I'll build an adapter for Simplisafe
33:04
So that when I'm on my couch I can say "hey Siri, turn on my alarm"
33:07
The idea being, of course, I'd spend 40 hours building
33:10
a thing to save myself 8 seconds the 3 or 4 times that I think
33:13
to use the thing, because programming.
33:16
So the question was: what's this thing in the middle? How do I
33:19
build an adapter? The truth is I had no idea how to build this, and that's
33:22
purportedly what my practice of test- driven development, Discovery Testing
33:25
does. So does my process actually work? And so I actually
33:28
experimented, and several hours in I was very
33:31
relieved to find that I could build a thing and that it actually worked
33:34
So there's this npm module now exists, simplisafe and it's got
33:37
a simple little API. You pass it credentials, you get a
33:40
client back, you can set the state. What was funny was I TDD'd
33:43
this, right, so I was writing tests. And the only credentials I had were the ones
33:46
to my house. And so I had to be really careful in the failure states, because I
33:49
didn't want to send the cops to my house by accident
33:52
And in particular, this got really
33:55
confusing with Travis [CI], because I would upload it to Travis
33:58
continuous integration, and people would send pull requests and it would
34:01
change the beeping in my house and I'd have to make sure all the doors were shut
34:07
But the lesson I learned there, I followed
34:10
my own advice and really practice it. I was relieved to see that it
34:13
went well. But honestly, I'm kind of ashamed because I went so long without validating
34:16
my ideas. And you guys, just by having
34:19
me here today, have given me a platform and I don't want to
34:22
abuse it by just being a talking head. I want to make sure that everything I
34:25
share can potentially really help you grow in your career
34:28
So that was a valuable lesson and I think
34:31
we can apply it to managers, like technical
34:34
managers, former developers, what I've
34:37
been able to generalize from my experience, especially at Test Double, is that everything
34:40
at a distance seems simpler. The people
34:43
actually doing the work, when a developer says this is going to take several more weeks, they're
34:46
closer to it, they see all the complexity, which is easy
34:49
to just hand-wave away when you're operating at a distance
34:52
Additionally, when you have a lot of experience, you tend to
34:55
—we're all pattern-recognition machines and you feed in all these problems and somebody might
34:58
feed you a problem, and you might say "well, yeah, that looks like the 15 other
35:01
things that I did." And you come up with this round, polished idealistic
35:04
solution. But, of course, that's not going to actually map very closely
35:07
to that individual's context. You have to actually trust the people
35:10
closest to the work.
35:13
And so that's been a humbling exercise in a manager role, to not
35:16
just jump to conclusions that I always know best.
35:19
But nonetheless, that was also helpful in me dealing
35:22
with my own sense of inadequacy as I merge into this
35:25
more management role. Let's talk a little bit about indignation
35:28
First of all, I'm a big worrier
35:31
Todd, mentioned I'm really high anxiety. I worry about
35:34
banks, and credit card statements, and finances, and stuff
35:37
and I really wanted a dashboard to handle this all for me and Mint
35:40
was that for a long time. I'd use Mint, I'd see all my finances
35:43
were still there, and I'd feel good. But
35:46
six years in, I had this random thought: you know I wonder how Mint
35:49
is actually secure? How does it actually securely go and get all these
35:52
services? And get all my account updates?
35:55
Of course, what I figured out was that it's just not secure
35:58
it has decryptable versions of all of your passwords
36:01
to all of your banking stuff and doesn't support two-factor auth or anything like
36:04
that. And that's kind of worrisome. It's actually a very popular Internet
36:07
cloud architecture right now called SPoFaaS.
36:10
If you're not familiar with SPoFaaS, it stands for single point of failure as a service
36:16
Another thing we're learning about today, too, with the Internet outage
36:19
So, Mint, Yodlee, if they go away
36:22
then all of your stuff just disappears. You're just giving
36:25
a single point of failure for them to take all your money. So I was stewing on this
36:28
I got angry. I was trying to figure out how do I get off Mint.
36:31
Sure, I could cancel it, but I want to replace it with something better. What could I build
36:34
So I thought: security matters.
36:37
But I'm not an expert. I'm not going to build the next Mint or Yodlee
36:40
and solve this very difficult distribution problem, but I could probably
36:43
just build something for myself and at least personally feel a
36:46
little bit safer. And so I built this gem that I call fine_ants
36:52
In fine_ants you build adapters. So here's an adapter to Vanguard
36:55
I pass it credentials. And because I can run it locally, I can
36:58
actually do two-factor auth in my terminal, so I have two-factor auth set up
37:01
now. And it just downloads all my holdings for all my Vanguard accounts
37:04
And I built a little Rails app for it too that
37:07
runs at localhost, and so it's encrypted on my disk
37:10
And it shows me all of my account holdings and I click that button and it
37:13
launches a Selenium worker to go and
37:16
open browsers to go to all of my banks and stuff
37:19
And I was really proud, because now I've almost got this dashboard that I wanted
37:22
It's locally-encrypted. It's as safe as running it from my own browser
37:25
Puts Selenium for good use to once, instead of just
37:28
really brittle integration tests, and
37:31
and, you know, admitting it's
37:34
not a generalizable app. I mean, you can go and find this stuff on
37:37
GitHub and clone it yourself and run it yourself, and I'd encourage you to try it
37:40
But it's not going to be the next unicorn, billion
37:43
dollar company. But, honestly, there's no shame in hobby
37:46
grade. A lot of times, we're talking about creativity, right? We're talking about
37:49
building stuff. And sometimes just solving your own
37:52
problem is enough. Like these little toy apps like this are often
37:55
what got us into programming in the first place, even if you're just
37:58
solving your own problem, there's no shame in that. So that
38:01
made me feel a little bit less furious
38:04
at the world. Another example, so
38:07
Test Double, our company, right. I've already referred—I used
38:10
the term "test double" a few times, but some of you may not know it. That library
38:13
gimme is actually an example of a test double library. If you don't
38:16
know the term, the word "test double" is supposed to evoke the image of a
38:19
stunt double. But not like a stunt driver in a plane, like
38:22
a stand-in for your tests. So assume you like, maybe
38:25
your app depends on the cloud, so you have to fake that out to make your
38:28
test pass. Well, whatever you did to fake out the cloud is probably
38:31
an example of a test double that fakes that service out
38:34
And in JavaScript, the most popular test double
38:37
library is called Sinon. But when
38:40
I see people use Sinon, most of them don't understand it very well
38:43
Because it's kind of confusing. A lot of people get frustrated
38:46
because it's a huge API, or just angry at the
38:49
fact it's not very opinionated. So I've given
38:52
a lot of thought to making something better than Sinon in JavaScript
38:55
And I decided, you know, a lot of users
38:58
that use Sinon are in pain, but I have to admit I
39:01
can't beat it. It's got like 2 million downloads a month
39:04
But if I build something at least I'll be less grouchy and at least I'll
39:07
have something to hand somebody instead of just more snark
39:10
and whining. And so it was humbling, right, because
39:13
I've built now—this is like the 4th or 5th test double
39:16
library in a different language that I've built and I keep coming back to the same
39:19
saw over and over again. And it's humbling to think
39:22
that my entire career may well hinge on just
39:25
two or three concepts and I keep repeating them, because
39:28
I learn, because I'm passionate about it, and then I build
39:31
something and then I share it, and then I feed back into learning more
39:34
and it's this infinite loop of me iterating over time on just a handful
39:37
of issues, and with Test Double, we're able to
39:40
do that again by building testdouble.js. You can install it on
39:43
npm. To get the npm install, and
39:46
the npm package "testdouble" it works on the frontend and the backend
39:49
There's a screencast on our website called happier tdd with
39:52
testdouble.js you can go watch. We've also got a comparison
39:55
blog post of testdouble vs. sinon and
39:58
what was cool about testdouble is it works, but it
40:01
most importantly, shares all of our opinions about what we've learned
40:04
about test double libraries and good isolation testing over the years
40:07
And it's certainly better than just being cynical and snarky
40:10
about "oh, JavaScript sucks" or "JavaScript testing is this or that"
40:13
A lesson I learned early on is that if
40:16
your message isn't getting through to somebody and they're not hearing
40:19
what you're trying to say, you can conclude one of two things:
40:22
you can either conclude that they're a bozo for not understanding
40:25
you, or that there's something with how you're trying to communicate that's
40:28
failing to convey to them. And if you conclude that they're a bozo
40:31
that's it. You just
40:34
disengage, right? There's no next step. But
40:37
I always assume it's something wrong in how I'm
40:40
trying to communicate, and so I'm always iterating on my message
40:43
and only as a very last possibility do I assume it's
40:46
the listener's fault, because I can't control that at all
40:49
And also, for your library
40:52
to win, not everything else has to lose. Sometimes just doing something that's
40:55
useful for a small group is plenty. Especially if you're able to communicate
40:58
ideas in a way that moves other people forward
41:01
in how they think about something. And certainly criticism
41:04
is easier than contribution. It's really easy
41:07
to be snarky on Twitter and say something sucks, but
41:10
Christian Johansson who made Sinon, he put himself
41:13
out there and it has served a lot of people really well
41:16
and he's a really really nice guy, but I
41:19
spent like two years just shitting on his work on twitter before
41:22
I thought "maybe I should just build something that serves my needs
41:25
instead." So building
41:28
that certainly made me a little less angry about JavaScript testing.
41:31
Another thing you may have noticed is that I like emoji
41:34
I've used a few of them
41:37
in the slides
41:40
And creativity, open source stuff, can sometimes feel
41:43
a little too self-serious and open source feels "you create,
41:46
we depend." Other people start to pull your stuff
41:49
and then all of a sudden they're really demanding
41:52
and it usually starts with: you have an idea, you want to build a thing
41:55
and it's a labor of love and it brings you joy, but then
41:58
eventually companies start depending on it, and criticizing
42:01
or opening issues or acting entitled and trying to get stuff out
42:04
of you for free and that's a big bummer. In fact I know a lot of open
42:07
source maintainers and what's super consistent
42:10
is that they tend to hate their creations in
42:13
proportion to how popular they are, and that just
42:16
seems totally backwards. So I was feeling
42:19
kind of exploited and exhausted at this particular point
42:22
in my career. But I can't just escape open source, I'm not going to
42:25
ragequit GitHub and delete all my stuff and yank all my stuff
42:28
and take my ball and go home. So maybe if I just build something
42:31
new, something fresh, I'll find a fresh start. And the way I did it was, I
42:34
decided I was going to build something that no business could ever want
42:37
To just be creative
42:40
for the sake of creativity. And sometimes, even still, if I build something
42:43
that I worry that a business might exploit, might
42:46
build a business around and cut me out, I'll just license it
42:49
GPL as if troll them, because then that way they have to come
42:52
to me to obtain a commercial license
42:55
This is such a project. I think it is
42:58
GPL'd, called emoruby. So there's not a lot of transpilers
43:01
for the Ruby language, but this one transpiles emoji
43:04
into Ruby code. So here's an example file
43:07
listing of emoruby. This is a class called Heart,
43:10
defining a method called wave, printing out a statement saying hello
43:13
and ending those two things. And then
43:16
Instantiating the heart and calling wave
43:19
So this, if you're not familiar with emoruby, this
43:22
translates to this ruby here, and it totally works
43:25
And it was a lot of fun. So tl;dr what I learned
43:28
on emoruby is that it's super dumb, it's
43:31
just there for fun, it's just there to be joyful. I actually got a lot of
43:34
contributors on it, because they found fun in trying to map
43:37
different keywords and control- flow structures to what
43:40
emoji should that be. But it brought me a lot of joy
43:43
and it's had zero issues opened against it this year
43:46
So it's one of my favorite projects. It's okay to just build stuff for
43:49
yourself. I know some of you are developers here and you're here with your managers,
43:52
hoping they're not looking over your shoulder right now: it's actually OK just
43:55
to build things for fun. The joy of programming is like
43:58
really undervalued and we get too self-serious about our craft
44:01
So that helped lessen
44:04
my sense of indignation. Looking back on all this stuff
44:07
is—I wouldn't recognize myself
44:10
ten years ago, I think, because all of this
44:13
these creative exercises have really changed me as a person and I've actually
44:16
found a way to mature and grow up, and
44:19
I see you there, I'm saying "hey look creative stuff, this is easy" but I've
44:22
also just lambasted you with 12 years of side projects
44:25
and "look at me! look at me! This is a cool thing I built!" I understand
44:28
that might make the bar feel higher, and you know what
44:31
maybe you're right, because it's true that creativity is not for everyone. Here's a
44:34
quick litmus test if you're perfectly
44:37
content. And you're totally fulfilled. And you're OK with
44:40
the status quo, then why would you want to change things? You're right, maybe
44:43
you aren't a creative type. You should just enjoy the beach that you guys have
44:46
not too far from here. But if you have any negative
44:49
feelings at all, our culture right now, we tend to pathologize
44:52
negative feelings as themselves being bad, but often they're just a
44:55
symptom of some different root cause, and if you analyze and
44:58
you're open about that with yourself, you might find that what's
45:01
really bothering you is that you're using the wrong tool for the job, or
45:04
there's friction between the technologies and the practices that you're using
45:07
or work can't offer you what you need, or maybe you just have your own internal
45:10
baggage that you need to get over. And creativity can be a great outlet
45:13
for those kind of root cause problems. And if you reflect
45:16
on how you feel and you feed—you accept—
45:19
those emotions, what's funny is our asynchronous brain will just
45:22
start spitting out ideas and it'll be a big idea generator
45:25
and hopefully, you'll find a way to exercise it.
45:28
And when I tell you, like when you
45:31
feel confused, or when you feel down, or
45:34
upset or scared, all
45:37
of those emotions are the place where all the good stuff
45:40
comes from. Great ideas don't come from people who've
45:43
already got everything figured out, and
45:46
when the bar's that low, you fling over it and hopefully
45:49
wind up in a better place. The important thing is you've gotta find your outlet
45:52
And I don't know what that outlet is for everybody
45:55
In fact it's important for me to mention that that outlet might not have anything
45:58
to do with software. Certainly, if
46:01
my outlet for creativity wasn't software,
46:04
my wrists wouldn't hurt as much and I'd probably get more sun and I'd be in better shape
46:07
So find what that outlet
46:10
is for you, because it may or may not have anything to do with software
46:13
Tomorrow, I was here last year, and the day after SCNA
46:16
was one of my favorite days last year, because I just sat
46:19
on Manhattan beach and watched football and drank with Big Ten football
46:22
from 9am to 3pm which is something I can't do in the
46:25
eastern time zone, so that was really cool. But tomorrow tomorrow,
46:28
we're going to have even more fun, because we're going to be here
46:31
programming stuff. Todd
46:34
my partner and I, we're going to join forces tomorrow and we're doing
46:37
what we call a "test smells", like "code smells" workshop
46:40
it's a really fun, engaging thing where we all talk
46:43
together about things about testing that we hate
46:46
I hope that you come and join, and what we do is
46:49
listen to stories, and we've got this repository of
46:52
30 different types of problematic tests, work through
46:55
those examples and really kind of bring a name to a lot of the different
46:58
antipatterns that we find in tests. I hope that you'll join us, it's a really
47:01
really fun exercise, and it's going to be happening kind of coincident
47:04
with the code retreat and what other activities we have
47:07
tomorrow. So again, my name's @searls
47:10
or Justin, you can call me whatever you like
47:13
I hope you tell me on Twitter what you thought of this talk, any feedback
47:16
you have. Like I mentioned, we're here to
47:19
fix the software industry and to do that we're gonna
47:22
need creative people who want to creatively solve those problems and help
47:25
inspire that in others. If you're interested in joining, our
47:28
team I hope you'll contact us. And if you know any
47:31
teams that are looking for that slack. Looking for some
47:34
outside inspiration, we're always looking for
47:37
additional clients that we can work with. You can reach us at hello@testdouble.com
47:40
or find me or Todd tonight or tomorrow, we'd love to talk to you
47:43
Also got a lot of stickers and business cards we'd like to share
47:46
But, you know, you've been super patient. Like Todd
47:49
mentioned, I'm the only one standing between you and free drinks
47:52
and nobody got up and left, so that's
47:55
really humbling. Thank you so much for your time today.

Follow-up interview

After giving this presentation at NG Conf 2017, I sat down with the famous @EmberSherpa from This Dot Media for a discussion about this presentation and how it fits the context of the JavaScript community as frameworks like Angular, React, and Ember have become more mature. If you’re interested in additional thoughts behind this talk and its implications for open source work, please enjoy this 20 minute interview:

Justin Searls

Person An icon of a human figure Status
Double Agent
Hash An icon of a hash sign Code Name
Agent 002
Location An icon of a map marker Location
Orlando, FL