I learn best when I work directly with other people.
Books are great. Talks are great. Screencasts are great. I encourage everyone to take advantage of the one-way, work-at-your-own-pace educational resources available, because in the world of software development there are a lot of awesome ones.1
But there’s something those lessons can never give you.
In Zen, there is a notion of Dharma transmission. Dharma, in Buddhism, is the teaching of the Buddha. It is Buddhist wisdom, and it is revered as a holy thing. It is improper to place a book containing Dharma teaching on the ground; instead it is placed on a cushion.
Zen strains of Buddhism tend to take pride in the source of their teachings, tracing their lineage back to the Buddha. To be accepted into this lineage is to receive Dharma transmission. It is not only the learning of facts and sayings; in fact it is not truly those things at all. What is truly transmitted as Dharma is something more abstract. It is akin to a flame passing from one candle to another.
When I pair with someone who’s really good at what they do, I am reminded of this idea of Dharma transmission. There is some ineffable wisdom I receive from the other person, something so embedded in the way they think that it presents itself in everything they do—the way they speak, the way they type, the way they approach a problem. It is in the mind-state of our teachers that the most important teachings of our field reside. It is so fundamental to the arrangement of their mind that they may not be able to name it, any more than a fish can see the water it swims in.
And so this mind-state, our Dharma, is never written down. When we are lucky, we extrapolate it from the words in blog posts and screencasts. But it is nothing compared to what happens when two people sit down and work together. That is Dharma transmission.
So why don’t we all pair all the time?
I worked at Pivotal Labs for over 2 years. We did pair all the time, within our teams. But even at Pivotal, it was hard to pair with someone who wasn’t on your team. You were expected to work a full billable day for your client. If you’re sitting down to really pair with someone outside your team, who’s paying for that time? Billing becomes complicated. So your potential pairs are quite limited, for months at a time.
(Please don’t construe anything in this post as a bash at Pivotal. Quite the opposite. As far as I’m concerned, Pivotal is at the forefront. I want the forefront to go further.)
For the past couple of weeks, I’ve tried to pair with people as much as possible. I’ve managed to pair with one person. Now, to be fair, I haven’t done a great job at outreach, and I’d like to get better at it. Also, Hurricane Sandy messed things up a bit. But the bigger problem has been that people have jobs. My friends can’t take an afternoon to pair with me because they’re being paid to do something else all week long.
I don’t have a job right now, but I’ll have to have one again at some point. When I do, I want to still be able to work with people all over the place. I want to keep the Dharma moving.
But to do that, we need a stronger culture of pairing. A culture in which it’s not only acceptable but expected that as a professional software developer you will pair with other people on their projects, and you will welcome guests to pair with you on yours. A culture in which consulting firms and software-based companies build that same expectation into their structure.
That’s a tall order, but that’s my mission. I would really love your help.