Some Principles for Collaborative Remote Software Development
The Agile Zone is brought to you in partnership with Hewlett Packard Enterprise. Discover how HP Agile enterprise solutions can help you achieve high predictability and quality in your development processes by knowing the status of your projects at any point in time.
When I talk to people about working remotely the focus is often on the tools. The tools need to be good, but they generally are now; that problem is gone. I’ve noticed the real challenge is the working relationships and maintaining these even though we are hundreds of miles apart. The stronger these relationships are, the greater the trust, the empathy, and the support between people and the more effective and joyful the experience of working this way can become.
I remember my first days at home. I sat there a little lost, staring at my bookcase, wondering what was missing. Becoming used to these new channels of connection and comfortable with them takes a little time. Oddly the absence of a physical presence can help communication particularly for introverted developers. Too shy to approach someone, but brave enough to message them and ask for a chat, I started to connect more and build my social capital.
Working effectively as a team means considering everyone's needs. Leaving people out of conversations that they would would benefit from creates ill feeling, so my first principle is:
Keep the virtual doors open, make your conversations visible and invitations free.
There are lots of ways to do this. We tend to have a team chat window open and when somebody wants to discuss something they extend an open invite to the team.
One of the tough parts of working remotely is being unable to distinguish between frustration and silence. We sense other peoples’ frustration through their body language and expression. Although webcams help you don’t have the same sensitivity to these changes. My second principle is:
Keep listening for silence. Invite anyone who’s being quiet to contribute. If you are unhappy say so.
Too much talking and no resolution leads to frustration and despondency. We need to deal with it. Invite people to drop out. Suggest an experiment and move on. We often swarm when a large problem presents itself, but it’s just as important to split when the discussion becomes cumbersome. Creativity happens best in small focused groups.
Keep focused. Be mindful of others time. Drop out when frustration kicks in.
At home, it sometimes pays to talk a walk or extend your lunch a bit when the trails are running dry. We generally keep normal hours but if we want to shift them a bit we make sure the team knows what we are up to. Nothing kills trust more than not knowing when someone is coming back. Like the shopkeeper who nips out for a coffee, stick a sign on your virtual door.
Take responsibility for being discoverable, share where you are. When you go for coffee, update your status.
As I mentioned in my last post most of our coding is done in pairs. It’s not so easy to swap driver and navigator when you are remote so sometimes you can navigate for an hour or so. It is easy to get distracted. It kills trust. I’m not so good at this.
Pairing takes trust, if you are becoming disengaged grab the driving seat or go it alone.
Collaborative Development is a tight-rope walk between dialogue and action. When you’re coding distractions can be costly. As the distractor invite others to your conversation and learn to ignore those conversations that your not really needed at. So:
Invite people to conversations. Say “no” if you can’t help and “later” if you’re flowing.
Our team learnt to Attend To Folks’ Needs and develop trusting relationships. It took some time (years?), I think a bit of coaching might help with that. These principles are universal, whether you are sat in a room or separated, but they need to be a little more explicit when we are remote. Collaboration needs to be deliberate.