As I write this I have an iPhone 6S+ that is not working correctly because
of decisions made by developers and maybe even some managers. Apps randomly
lock up when I click on some links, but not all of them. It's a known issue
and one of my friends who works at Apple (Hi Dave) has told me they are working
on a fix.
Naturally I used Twitter to rant about it and said "developer laziness and shitty
attitudes about testing is why my phone doesn't work correctly now." I stand
by this statement 100% because I have seen time and time again what happens
when deliberate choices about not having formalized, repeatable testing for your
application are made. A might-as-well-be-broken phone is one of those.
As is expected, some people disagree with me. In fact, one person wrote a blog
post accusing me of "test shaming"
and outlined why they are currently in a position to not write tests.
Zach and I had a long private conversation about his blog post. We disagree on
many of the points he made in his blog post, and I won't share all of what we
talked about but I wanted to address some things.
My mother, as some of you know, is a retired high school teacher who taught
special education courses to her students. She had a saying that her students
hated to hear from her that she would use when people started complaining about
their problems: "We're choosers, not losers".
Zach's blog post is full of the choices that he has made and is making but he
is trying to frame it as if they are not choices at all but immutable
constraints on his life. They are choices. Nothing more. Sometimes the choices
you are presented with suck. But realize they are choices because that lets
you focus on them in a different way.
The choices of his that I totally agree with are the ones where he is putting
his family first. I never advocate just stomping out of a job with no backup
plan. The plan I always advocate is "stay in your job while you look for
something better". Don't mistake Zach as being lazy or some other nonsense.
I just disagree with some of his other choices.
Programming is hard. Changing cultures is hard. Not everyone can do it. Hell,
I don't do it all the time successfully. But I stay focused and try to make
First, I have a day job where I am required to do what my boss tells me or else
there are professional consequences. I don't work in academia, I'm not a technical
manager, I am not some kind of testing architect. I work with teams of developers
to figure out ways to write tests that give us high confidence that services
that can be used by millions of people work correctly. The stakes are high and
I like the challenge.
I have worked at exactly one place where I was told that tests were a waste of
time. Not long after being told that I put into motion plans to leave. I left,
I still have a good career, and that company is gone and dead. If you find
yourself continually working for people like that, the problem is how you are
deciding to take those jobs.
Zach asked me if I would turn down a job if it was awesome but they didn't do
any testing. The answer is 100% yes. Lack of testing is usually the tip of the
iceberg of suffering you will be slammed into at a job like that. Organizations
that commit to testing tend to have other attributes that are extremely useful
when shit goes wrong, which it will.
Testing is not a line item on a time card. It is something that you Just Do as
part of programming. You are informally testing things any way, so why not hold
onto those tests and make them more permanent. One of these days I need to talk
to a manager who tells their developers that they are not allowed to write tests,
if only to write their arguments down so I can refute them as the bullshit they
It is not career suicide to have strong opinions about the positive value of writing
automated tests for code and be willing to suffer some short term pain because
of it. I made it work because it's what I wanted and I was not afraid of any
lasting consequences. Again, there has been no shortage of people who have asked
me to come work for them because of these traits. If you care about these things,
others will notice. They will ask you to come work for them too.
My commitment to testing since 2006 is not some kind of Pyrrhic crusade. It has
not ruined my career -- in fact it has done quite the opposite.
The old argument about how testing doesn't add to the bottom line is one that I
have shown to simply be not true. Bugs that make it into production cost more
to fix than bugs found by tests when the developer is working on code. Failure
to understand this is major error on the part of testing critics everywhere.
If you are unable to quantify how much mistakes in production code cost you
when compared to what your developers' time costs you, that's on you.
Whenever I switch jobs, I do not do it lightly. I too have a family and a long
stretch of underemployment due to stubbornness would harm my family. But switching
jobs frequently does not hurt your career. I've had 12 jobs in 18 years -- do you
see me having problems getting new jobs and making more money with each position?
This type of argument aimed at me ignores the early part of my career where I
busted my ass working for people while building up the skills on my own time so
I could do want I wanted. As if my early employers let me spend my work day writing
books or preparing conference talks. All done after work.
Finally, when I talk to people about why they should test it is not from a
throne of bones in an ivory tower. I have gone in there and worked hard to
change cultures to be more open to testing. I have written countless tests and
helped developers build their skills. I have worked hard to leave places in a
better state than when I got there.
I am not asking for your approval. My message is not condescension but a reminder
to take ownership of what you do and your choices. 10 years ago I did not imagine
I would be in this position, but I do not regret anything that has happened
along the way. There have been some bad choices, but there were choices I made
with an understanding of the consequences to me, my family, and my career.
It's true the world isn't always the way we want it. The best way for it to stay
that way is to choose to. We're not losers, we're choosers. I want you to choose
a path that leads to success.