To Pair or Not to Pair

My objective on Wednesday was to make further progress on the Paypal integration. Things getting in the way of that included blogging, sending out emails, scrums, coordination sessions, and needing to pick the kids up from school at short notice. Bit of scrappy day, but now that I’m running Premium Plus pairing sessions on Sundays, I need to be able to help my wife out in a fix during the week.

I did manage to complete my process of sending emails one by one manually to every AgileVentures member. There were 2920 of them before I was on the Ruby Rogues podcast, and that’s more than a free-tier mailchimp account can handle. I resolved to grit my teeth and email each person individually to tell them about how our new Premium plans are taking us on the road to financial stability and my commitment to blogging about the process. I did semi-automate the process as I’ve blogged about before, using a script that takes an email template and lanches a Thunderbird editor, filling in email, subject, first name etc. I then review the email visually, adding personal notes, potentially even changing it completely depending on my relationship with the individual.

It takes me about 20 minutes each day to send 100 emails. So I guestimate that I’ve burned about 10 hours in the process. I’m sending the emails directly from my personal account so I end up with the message in my sent folder, so I can easily refer back to whoever I’ve sent to, and responses from AV members come straight back to me. I’ve had 50 or so productive email conversations from these emails that have gone out, 2 unsubscribe requests, and at least 10 people sign up as premium members; so overall I’d say it’s probably been worth it. That said I’m glad to finish it and create more time for coding. Having completed the run, I used the new User deactiviation functionality to delete the two users who requested to unsubscribe, and then I took the entire set of remaining users and invited them to Slack to ensure that everyone had got an invite, because there had been periods where the invitation system was offline. The slack client slowed under the strain of processing nearly 3000 invites, but to its credit it all worked, and it looks like 150 or so folks who’d never been invited got invitations finally. Yay!

As the new greeter bot welcomed them into Slack, I did a coordination session with Matt and Michael where we helped Matt sort out Redeemify Heroku issues using Heroku fork, and sorted node weirdness as Michael applied some fixes to the botmock framework. We had a bit of a review of the WSO board, but I didn’t make any progress on the PayPal side. In my lunch break I did manage to complete chapter 5 of the code samples in the new RSpec book that I’m reviewing. Maybe I should ask the guys at Pragmatic Programmers if they’re interested in a book on “Agile Software Project Management with Volunteer Contributions”, or maybe it should be “Open Source Agile Software Project Management”?

So then I was dragged away from the computer to pick up my twin boys. I managed to get back in time for the Kent Beck scrum, where it was great to see Susanna reporting in on the SHF project. I told Michael and Matt that I really had to focus on the PayPal integration in the final programming hour of my day, and that I was going to be moving fast and so there wouldn’t be much room for participative pair programming. Matt went off to experiment with the drie free tier and Michael joined me in the hangout. I managed to write out a list of all the stuff that needed doing (in approximate priority and dependency order), filling Michael in to where Matt and I had got to:

  • [ ] add sad path for PayPal
  • [ ] sponsor via PayPal
  • [ ] have generic support for plans
  • [ ] make PayPal work for all plans
  • [ ] refactoring our domain model to store plan entities and represent everything properly and consistently
  • [ ] allowing users to upgrade themselves through the WSO interface
  • [ ] displaying all the plan options and upgrades effectively
  • [ ] refactoring card details update to different controller
  • [ ] move SubscriptionsController#upgrade to SubscriptionsController#update

In the background I was being distracted by all the new people coming into Slack, but I managed to add a sad path for PayPal and get that PR in, but not much else. Michael and I ended up having a detailed conversation about the relative merits of him and I pairing. It was an opporutnity to say some things I’d been thinking recently like, how when we used to pair on the LocalSupport project a couple of years back (when I was teaching at HPU) it had been lots of fun. More recently we seemed to be more in conflict and more irritated with each other. It’s entirely possible that it’s me that’s changed. I’m watching savings that could go on my children’s future University education being gradually wittled down as I try to get AgileVentures to financial stability. I am not necessarily coming from the most relaxed place at the moment. Unlike when we used to pair on LocalSupport and I had a stable income from HPU and the whole thing was a learning project, I really want to move fast to the point where the code in WSO is bringing home the bacon.

I mean, I’m skeptical about the value of a University education for my kids (maybe I should send them to a bootcamp?), but I’ve got a lot on the line here. It’s a strange setup in some ways with both Michael and I being volunteers. If we were both salaried employees at a company I’d see ensuring that we were pairing with a certain frequency was critical. We’ve had frank and open discussions before. I have three monitors at home which means I can easily be looking at documentation while Michael drives on code, but he has a single laptop, so if I’m driving he only sees my screen, and if I flip back and forth between code and terminal and browser too fast, it can be very difficult for him to follow what I’m doing, particularly with hangout lag. We’ve talked about Michael getting another monitor, but we are of course very resource constrained. In a company context I’d have ordered him an additional monitor several weeks back. I can get frustrated when Michael is driving in that he’s not using keyboard shortcuts, or not laying out his screen so that he can see tests, app code and terminal output at the same time, and I often feel like it’s a struggle to get him to change his approach. I think we’ve both adjusted and compromised our styles over the process of working together, but my fear is that we’re not pairing as productively as we could at the moment.

Also in a company of any size I’d be pushing towards heavy pair rotation so we were both learning and growing from our interaction with multiple others. I really do believe in the benefits of pairing for spreading knowledge across a team, for providing additional perspectives, and for quickly leveling up junior developers. That doesn’t mean that every pairing session is productive, and it doesn’t mean that every pairing match is right for the task at hand. Michael was then very reasonably asking what I wanted him to do? And my response was that I wasn’t asking him to do anything. He’d already committed several weeks back to try to be more patient, and I committed yesterday to try to be less sensitive, but neither of us can magically change our personalities or situations. I wasn’t sure if I had a coherent point, but was glad we were able to have the discussion so that I could tell Michael how I was feeling. I said that the key thing was that I thought there would be times in the coming weeks where I didn’t have the mental space for a long debate about the relative merits of one approach over another, and where I would need to move fast and so drive in more of a solo mode.

Is that me shooting myself in the foot? Maybe the solution is an alternative like rotating more frequently, say every 10 minutes? What I feel at the moment is that I’ve got a pretty clear idea of what needs to get done and I can do it fast, and sometimes I feel like I’m fighting to get Michael to understand my point of view, and he’s getting irritated and angry with me in the process and I end up feeling quite unpleasant and don’t look forward to our next session. Conversely Michael was saying yesterday that I don’t give ground easily enough. Clearly in any relationship there’s always room for both sides to make concessions. Relationships and pair programming are all about making compromises.

It feels like there are two extremes of pairing. There’s coding with a partner where you’re totally focused on the learning, and there’s coding where you’re totally focused on making progress. In the Premium Plus and F2F sessions I can feel like I can be totally focused on the learning and if we get some progress that’s great, but I’m totally relaxed about it. Outside of those sessions, and at the moment, I feel like the progress on WSO has to take priority, particularly when I’m burning £1000’s a month in this undertaking. AgileVentures started as a utopian free pairing framework, and maybe the introduction of Premium pairing is spoiling that. Or maybe we’re growing up? Or maybe it’s just like life generally is; just messy.


Originally published at: