Thoughts on two months of pairing

Previous to joining Pivotal Labs, I didn’t do a whole lot of pair programming.

Hoo boy.

It’s been a little over two months since I started, and the number of hours I’ve spent solo programming since then would all fit in one workday. I’ve had some surprising realizations – about myself, my style, and my abilities – and more than a few DUH moments. This post is more a collection of anecdotes than a coherent essay, but if you’ve wondered what full-time pairing is like, I hope it gives you a few insights.

It does contain some profanity. I blame my co-workers for that.

On Constraints

Pivotal works a strict 8-hour day, in keeping with the agile principle of sustainable pace. But because all projects are paired (you cannot buy the services of a single Pivot – we only come in pairs) everyone has to be in the office at the same times every day. So everyone arrives at 9, everyone takes lunch from 12:30-1:30, and by 6:15 the office is a ghost town.

I knew I’d love the work – and I do – but I thought I’d be fighting the schedule. Nine to six would have been fantastic 10 years ago, but now that I have a husband and two kids…not so much. There isn’t a daycare in the city that stays open past 6, and it’s much harder for me to go to doctor appointments, school events, and all the other kidly activities that are, without fail, held between 9 and 6.

The Punchline

Now that I’m doing it, I love the fixed schedule. At other jobs, around 4pm every day, I’d start wondering about when I needed to leave. I’d try to remember who I was picking up, and when, and then I’d look it up on my calendar, and then I’d text Peter and ask whether there was anything I needed to ask or tell the daycare folks, and then I’d stress about getting enough work done before I had to take off.

There’s none of that anymore. I know exactly when I’m leaving, and since my pair is leaving at the same time there’s no pressure to stay longer to finish something off. When I’m working, I can be completely present. When I’m done, I don’t have to drag a laptop home and check email or fix the build once I get there. I don’t even know how to get into Pivotal’s VPN from home. I walk out of the building at 6:05 with a clear mind and a clear schedule for the rest of the night.

It’s fucking exhilarating.

On Getting Shit Done

Fundamentally, what I love about software development is writing code that people actually use. I love to finish things. So anything that makes me feel like I’m really GSD makes me incredibly happy.

When people talk about pairing, you hear a lot about how it “amplifies” their productivity. I am going to go on record with the truth, however. Pairing does not amplify my productivity. Instead, it erases all the bad habits I have that keep me from being a superstar on my own.

When I’m pairing, I can really get shit done.

By myself, I have a lot of roadblocks:

Rabbit Holes. When trying to figure out some thorny bug by myself, I often follow the wrong line of inquiry too far. I follow it sometimes for the sake of completeness – of knowing with 100% certainty that some factor is not what’s causing the problem – when 90% or even 50% certainty would do. Something in my brain craves completeness, occasionally to the detriment of productivity, and particularly when I am tired (hello, parenthood). I usually don’t notice it when it’s happening. However, if I have to explain to someone else what I am doing, the ridiculousness of it all suddenly becomes obvious and I’m able to break out.

Distractions. If I’m working by myself, I’m on email, I’m on IM, I’m on twitter, oh my tests are running so I’ll check hacker news…and on and on. That time adds up over the day. And of course once I look at my email I’ve switched contexts so going back to my code is another context switch, and even though it may only take a few minutes, that also adds up. It feels amazing to work solidly for four hours at a time on a problem. But somehow when it’s just me, I can’t always keep that focus. I think it’s the addition of the social input and output that lets my frontal cortex actually attend to the problem at hand, without going ooh-shiny all the time.

That, and the guilt trip from my pair when I do wander.

Cheats. If someone’s watching, I don’t take shortcuts. I write the tests first. I refactor code that needs it. I focus on doing the simplest thing that could possibly work, without being sloppy. I make sure I understand what I’m doing before I do it. I’d like to say that I always do these things when on my own…I really would. But the truth is that sometimes I put logic in my view code, because christ, if I move that then I need to put it in a helper and make a new file and add a new spec, and I said I’d be done by the end of the day and it’s 4:30 and no one’s reviewing my code so…I just do it.

But if someone else is watching what I’m doing…I just don’t. That feels incredible.

Too-Clever Syndrome. On the other side, I get excited by knotty technical complexity. I love to dive in and start changing things to see what happens in situations where it would really be better to write some tests first. And, I like pushing the boundaries of the language, but I don’t work on experimental or research code – someone has to read and maintain it – so all the clever metaprogramming is really not suitable.

But it’s so much fun! And I get to revel in how smart I am! It sounds stupid to say that out loud, though. So I don’t even go there.

The Nine-to-Fiver

I often hear programmers – mostly young, mostly single – talk disparagingly about “commodity programmers.” They usually mean people who program at work but spend their free time on other stuff, and aren’t really interested in tech.

Since I became a parent, I’ve turned into that person – the one who needs to leave at a fixed time and can’t work weekends. So for a lot of my peers, that means I’m not “passionate” enough, and that I can’t really be a good engineer. I got that reaction enough times that I started to believe it. Well, fuck that. I know I am amazing at what I do, and I love it. But it’s not my whole life.

Working at a company that really respects the boundaries of my time AND enables me to kick ass and get shit done all day has seriously been a revelation.

Socialitis

On the spectrum of social awkwardness, I fall somewhere between the engineers and the marketing guys. Like many engineers, I miss social cues, don’t make enough eye contact, forget people’s names, and have a hard time making small talk. However, I can fake these skills decently well when necessary, and I’ve noticed that it’s a muscle that I can exercise – the more I do it, the better I get, and the less I have to think about it.

About a month after I started at Pivotal, I went to a UCSD engineering alumni event. At these events, where I am usually the only person not working in Enterprise with a capital E, the social interaction part of the evening is a lot of guys staring at each other’s shoes. In the past I’ve tried to get conversation out of these people, but between their awkwardness and mine it was like pulling teeth. But this time, for some non-obvious reason…it was easy. The people and the shoes were about the same.

It’s me who had changed.