My Authors
Read all threads
On the camerata today, a question came up, and I want to share my answer here, because that answer is a major motivation for all of my content. The simple question: "If TDD is so wonderful, why isn't it universal accepted practice?"

geepawhill.org/camerata
For the last four years, I have turned my attention heavily to generating new content. I still actively code and coach, but far less than I did a decade ago. It was around that time that I asked myself that very question.
I didn't ask it, in particular, about TDD, but about the basic sociotechnical practices we in the early XP community found so successful. TDD was certainly included in that bundle, but wasn't the only thing. You can take this answer of mine as applying to most of what was there.
At that time, I'd been doing, teaching, and coaching these practices for ten years, in full faith that they were so powerful they would eventually come to define our software trade, maybe not forever, but certainly for a long while, until we could come up with something better.
And I was frustrated with our progress. That's putting it far more mildly than the language I actually feel. So I began working my way through explanations. Some of them were, I now feel, wrong. Many more were not wrong, exactly, just too "proximal", not encompassing enough.
I'm going to cut to the chase, giving the answer I now believe, at the highest level, accounts for this. Then I'll look at some of the alternatives I either discarded altogether or coalesced upwards to that high level.
The "marketplace of ideas" has not raised the incredibly successful and powerful XP technical practices to universal endorsement because that marketplace has been so distorted and attenuated by the wild double-explosion of technical advance and economic demand that began in 1980.
These extraordinary forces -- I won't say unique because I don't know enough history to say that with certainty, but certainly extraordinarily rare -- have prevented the normal "marketplace of ideas" to do its normal job. I'll illustrate each force with just a one-off, & move on.
Technical advance: In 1969, we put 3 guys in a can & sent them 250,000 miles into airless space, to land on a large rock, get out, look around, get back in, and come home.

Your smartphone is about 3000 times more powerful than the computers we used to do that amazing feat.
Economic demand: When I joined the trade in 1980, there were fewer than 100,000 professional developers in the world. Four decades later, there are 25 million. There's one unique website for every 5 people on the planet. Software's in computers, phones, cars, clothes, fridges.
Spoze you accept this idea, that those are extraordinary forces, and that they necessarily shaped the trade in myriad ways. What might some of those ways be?
Here's one: the doubling rate for geeks, about every 5 years, means that at any given time, more than half of all the people who write software for money have been doing it for less than five years.
Find anyone who's been in a skilled trade for 20-30 years. Ask them how much they understood when they'd only been in for 1, 2 or 5.

Ask a plumber, a doctor, a car mechanic, a therapist, a writer, a carpenter, a news announcer, a teacher. You'll get laughter & great stories.
Here's another: Few non-geeks grasp the sheer complexity of the systems they use and we make. Even many professionals don't truly appreciate this.
Find a non-geek watching a youtube video on her phone. Ask how many "programs" -- separate creations by separate teams in separate places at separate times -- are involved. Most will guess that's single digits, the smart ones double digits. It's more like several *thousand*.
Here's another: The educational system for all those geeks entering in the trade has, with very few exceptions, in no way prepared them for the realities of that trade. I don't mean they teach professional programming poorly, I mean they don't teach professional programming.
The two most central aspects of pro programming are 1) collaboration and 2) brownfield work. Both are almost entirely ignored in a CS degree. (In their defense, many CS departments know this and are doing it on purpose: they see professional programming as a separate discipline.)
Here's another: Executives and managers are desperate for talent, but they can't find it, so they have to use workarounds. Those workarounds actually slow the identification & development of the very talent they wish they had.
Rule after rule, meeting after meeting, micro-management a Burger King wouldn't use on teenagers. The only carrot they got is money, and the company down the street outbids them as soon as the geek gets any skill. Average employment tenure for a developer is 2 years.
And another: Because no one knows what's working for them, or what might work for them, ludicrous intellectual property policy keeps geeks from being able to practice on or learn from real-world situations other than their own.
Learners see the to-do list app a thousand times. Public mentors have to rework and anonymize material. No serious professional programming *can* be shared, except for open source, which requires incredible dedication and persistence, even apart from possible pedagogical value.
So.

Well.

Gosh.

Kinda dark, innit?
And you know, yeah, it's not all vaseline-lensed brightly-lit fluffly clouds. But there are *far* darker versions of this explanation...
"Managers are despots." "Developers are lazy." "Customers are idiots."

"Type [Whatevers-Not-Mine] is full of evil, stupid, lazy, cheap, awful, corrupt people, and we are helpless to do anything about it."
And that, that last little bit, the belief in helplessness. That's the part I want to do something about.
TDD's like many other activities in that it has to be experienced, not only to be learned, but to have its value be revealed. The distortions we've discussed in the marketplace of ideas actively reduce even the possibility of getting that experience.
And the greatest impact of those distortions is the learned helplessness, the idea that, whatever experience you're having right now, that's "just the way it is".
Anyway. Yeah. I'm disappointed that my style of XP isn't universal. I been at this for twenty years, and at times, I still feel I've barely moved the needle. But there are reasons for that, real reasons. When I overlook that, I can get more than a little sullen & resentful.
To my friends advocating in the trade, for TDD or anything else, I'd say: don't give up.

It's not you, it's us. It's not the subject of your advocacy, it's us. It's not the style of your advocacy, it's us.
To my friends learning in the trade, on TDD or anything else, I'd say: don't give up.

Seek experiences over bullet points. Take every chance to *try* a thing.

Above all, don't assume what's going on now for you is "just the way it is".
And for my friends, well, and my enemies, and everyone in between, I'd say: don't give up.

The problems we're working on are *hard*, really *hard*. That's what's so cool about them, and so cool about us.

We can't change what we don't try to change.
Thanks for reading. Peace. Out. Here's today's pitch: I have a town-hall meeting Friday afternoon (EDT). A short talk, on Putting the Human in Change, followed by an active discussion. Seats are limited for a lively interaction, so sign up now:

geepawhill.org/town-halls
Missing some Tweet in this thread? You can try to force a refresh.

Enjoying this thread?

Keep Current with GeePaw Hill

Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

Twitter may remove this content at anytime, convert it as a PDF, save and print for later use!

Try unrolling a thread yourself!

how to unroll video

1) Follow Thread Reader App on Twitter so you can easily mention us!

2) Go to a Twitter thread (series of Tweets by the same owner) and mention us with a keyword "unroll" @threadreaderapp unroll

You can practice here first or read more on our help page!

Follow Us on Twitter!

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just three indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3.00/month or $30.00/year) and get exclusive features!

Become Premium

Too expensive? Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal Become our Patreon

Thank you for your support!