Ever since we had a visit from Woody Zuill several months ago our team has employed the discipline of mob programming for most of our work. That means 3-6 developers in the same room, at the same computer, working on the same problem together. We rotate who sits at the keyboard. The person at the keyboard receives instructions on what to type from those not at the keyboard. At first blush it sounds very inefficient, even wrong. Two initial observations for the uninitiated:
- This way of programming is challenging and feels awkward and clumsy at first.
- This way of programming is the absolute best way for a team to achieve collective code ownership and reach its highest collaborative potential.
Given the spread of the COVID-19 pandemic we were all recently invited to work from home. Now, in these last few months we've become pretty proficient with the whole mob programming thing and I wondered if we would be able to continue collaborating effectively even as we all worked remotely.
Now, lots of smart people already work this way, and have shared what they've learned, but I just wasn't sure it was going to work (silly, I know). Here's what I've since learned:
When you first start mob programming you must learn how to navigate the code indirectly, through someone else's hands at the keyboard. This is a very undervalued and consequently, a very underdeveloped skill for most software developers.
When you first start mob programming remotely you must learn how to navigate even more indirectly. The social distance between you and your fellow mobbers feels wider. No matter how good your video conferencing tool is there will be a slight communications lag, the audio quality will be suboptimal, and you won't always be able to effectively read facial expressions when all you see of the other people is a thumbnail of their face.
The surprising thing is that with patience and practice mob programming (whether on-site or remote) actually works and you and your team actmually become a better programmers as a result of the effort. What you first thought were impediments to productivity were really just invitations to learn new skills and become more effective and collaborative.
You see, when you have a team of developers who have each developed the skill of verbally communicating high-level ideas about software effectively enough for any of the other developers who will be at the keyboard to understand and translate into working source code (and tests!), well, you are in an incredible position to innovate and collaborate. I submit that such a team will deliver way more value than a "team" (air quotes) of individual developers who work in isolation most of the time.
So, if you're hearing about mob programming and are still skeptical, find a few other people that want to try it, watch some talks and videos about it, and dive in! (Also wouldn't hurt to have Woody come train your team...)