Thursday, September 24, 2009

One Reason Pair Programming Is Not For The Elite

I hate to do this, because I love pair programming, but I'm going to call bullshit on Obie's 10 Reasons Pair Programming Is Not For The Masses.

A piece on pair programming in the New York Times put Hashrocket in the public eye of Reddit and Hacker News, and it's pretty hard to keep your head clear when the Reddit monkeys swarm you. No doubt the unwashed masses came up with a whole bunch of reasons they didn't like pairing, or didn't respect it, and Obie wanted to answer them. That's why his blog post basically reads like an attempt to rephrase "you're just a bunch of fucking idiots" in very patient, reasonable terms.

I've been at the epicenter of that moron whirlwind many many times, and let me tell you, it's never worth the bother to pay it any mind. So let's skip this boring question, of why exactly all these idiots disagree with Hashrocket. Idiots are never very interesting. What about all the smart people who disagree with Hashrocket?

The interesting question here is: if pair programming is so fantastic, why doesn't every "elite" Rails company use it? It's huge at Hashrocket and Pivotal, but I've never heard DHH talking about it, for example. We didn't do it at all when I was building a very very successful Rails site which I'm not supposed to mention by name, for fear of tarnishing its otherwise pristine brand with the near-Tourette's-syndrome language of this blog.

I tried once or twice to tell people at ENTP to give pairing a shot, and I wasn't completely alone in that - there's an ex-Thoughtworker there, for instance - but I also got a lot of resistance. The main source of resistance: people were so tired of hearing Obie talk about how pairing made his company superior to every other company out there that they weren't even willing to take the idea seriously at all.

A lot of "elite" programmers don't see any point in Agile practices. But "Agile" is a buzzword today, and like any technology buzzword, most people using it don't even know what it means. This has always been a fundamental problem with the tech culture, but Obie's PR is not making things better.

Let's think about the bigger picture. It's not actually very mysterious why the Rails community has a bad reptuation compared to other programming communities. If we're not showing pr0n at our conferences, we're busy measuring our wieners.

Think how much nicer it would be to read a blog post like "10 Surprising Reasons You're Going To Love Pair Programming." And not just nicer - more useful. One very consistent feature of pair programming across organizations is that it really does surprise people who are new to it with just how productive it is, and how much fun.

Obviously the pot is calling the kettle black. For me to call somebody out for wasting time arguing with Reddit and/or Hacker News readers is hypocritical. I admit it. But let me just say it. Here's my open letter to Obie: the reason your first instinct is to write a blog post explaining to these people that they're just a bunch of fucking idiots is because they're just a bunch of fucking idiots.

And it's not even that. They're not only just a bunch of fucking idiots. They're also just a bunch of fucking idiots who are reading your blog because they're too lazy to work and too dumb to win at Desktop Tower Defense or the eyeballing game. I can't blame you for talking down to them. They suck. But the thing is, they're not the only people reading your blog.

There are a lot of other people reading your blog, people who are as smart as you or smarter, and as accomplished as you or more so. And when you tell that vast army of barely literate dipshits that the reason they don't pair program is because they're not as smart as you are, you are saying something true - but you are also telling these other people, these smart people, that the reason they don't pair program is because they are not as smart as you - and let me tell you something: they are. And they know it.

Speaking on behalf of everybody who has ever tried to sell pair programming to a highly skilled, highly intelligent developer who was reluctant or disinterested, I really wish you would shut the fuck up. You're only making good ideas harder to sell. (And that goes double for Haml.)

You're never going to get anywhere telling idiots that they're stupid. Trust me, I've tried it. I have to hope I'm not trying it now. But you can do a lot of damage by saying that anyone who disagrees with you is an idiot, and believe me, I speak from experience there as well. All it takes is one person in the crowd who everybody knows isn't an idiot, and your whole argument becomes bullshit.

Apart from anything else, there's a much simpler explanation. Maybe the big reason more people don't do pair programming is because they've never tried it.

For anyone reading this, if you're in that category, listen to me for a second. As far as Obie's argument that you can't do pair programming at a cubicle, I've done it at a cubicle. Fuck a cubicle, I've done it in a hotel shuttle van in a sleep-deprived delirium in the middle of a goddamn forest in Pennsylvania. He says you need fancy hardware, you don't need fancy hardware. He says it requires great programmers with great personalities, it's not true. I've done it with people I liked and people I didn't like and people I didn't even know. I've done it with brilliant programmers and clueless newbies. I've even done it with hardworking people and lazy people and it all turned out just fine.

Pair programming is for anybody who likes writing good code. Hashrocket didn't invent it, you don't have to pay them any licensing fees, and if you're not a Super Rock Star Ninja Samurai, you can still do it. It doesn't make you better than anybody. It's just a useful technique with beneficial side effects. All you have to do to get started is get started.

Likewise, if you're not pulling our legs, and you seriously think you can't do unit tests because you don't have time to slow down, you have no idea what unit tests are, and you are in for a very pleasant surprise when you finally find out.