Wednesday, October 5, 2016

Cyber Agility – The Next Frontier

Could Virtual Reality (VR) and Augmented Reality (AR) be tools to enable distributed Agile teaming?
Co-location and pair programming are two of several elements in enabling high-performance agility. Soon, VR and AR could be enablers for a distributed Agile team while still maintaining the same level of high communication bandwidth that was previously only afforded by face to face communication. Before I go into my ideas on how this could work, I’d like to expand on why co-location and pair programming are so important to high-performance agility.

Face to Face Communication and High Performance

The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
In 2001, the signatories of the Agile Manifesto got together to discuss “better ways of developing software”. I find it interesting that most of the manifesto is about people skills, and less about software. For example, “People and Interactions” is a core value and “face to face communication” a supporting principle.
The best way I know of to enabling face to face communication, is being co-located. The tighter the co-location, the more the interactions; hence having Agile teams sitting together in open office configurations.
My friend Mark Pearl pointed out on Twitter that the reason we strive for co-location, is that it is an enabler for collaboration. I'd agree with his assessment.
mark-pearl-twitter-colocation

Pair Programming and High Performance

If a software team were to take on only one Agile practice, then I would suggest pair programming. Seriously! It has the biggest bang for your buck as it helps with:
  • Moving from a group of individuals to a team (because of the bonding)
  • Increasing code quality (pairing is an extreme version of code reviews)
  • Increasing creativity and collaboration (a pair’s thinking power is more than the sum of two individuals)
  • Removing silos (because of knowledge transfer)
  • Improving code consistency (team coding standards)
  • Creating a sense of ownership by the team (collective code ownership and story ownership)
  • Continuous improvement (through coaching and mentoring, your B’s will become A’s over time)
  • Specialist Generalists (pairing on tasks other than ones matching your core competency)
  • Fun! (it’s incredible social)
I have found that pair programming can act as a foundational practice to other high high-performancee practices: merciless refactoring, continuous integration, test driven design/development, refactoring to patterns, DevOps, continuous delivery, coding standards, collective code ownership, clean code, etc.
Unfortunately, I’ve noticed pair programming is considered distastefully by some and is not practiced by many Agile teams. I put this down to either, people who have had a bad initial experience, or, to people having never tried it because it’s unintuitive and uninviting. I’m not going to try and sell you on it here, but will leave you with the advice that if you find yourself in one of these two categories, I hope you get a chance to experience pair programming one day the way it should be practiced.
Pair programming, and mob programming (an extension of pair programming), is easier when your team is co-located. And there is my second argument for co-location: in addition to better communication and collaboration, it makes pair programming a whole lot easier.

Virtual Reality and Extended Reality as Alternatives to Co-location (and office work in general)

While I am a big advocate for co-location and Pair Programming, I could be persuaded toward a distributed team model supported by the new emergent technologies of Virtual Reality (VR) and Augmented Reality (ER).
I think we could use VR/ER to enable distributed Agile teams in the very near future. Here’s what it might look like: your office will be in your home and consist of a keyboard, VR/ER headset and special gloves that you can see where your hands are in virtual space and in relation to your physical keyboard. You have arranged to meet your team for a daily huddle at a certain time and meet in virtual space; in a virtual team meeting room. In this room you can hear and see your team mates; well, digital renditions of them, and yourself. In this room you have access to a story map, an iteration story board, whiteboards, and computers. You proceed to sync up with your team and decide on your pairing partner for the next task. Or, you may even choose to mob program en masse or in a sub group on a task/story.
Once the team has self-organized into pairs or mob(s), they go to a chosen pairing/mobbing room in virtual space that can be customized to their heart’s content. For a pairing example; I may choose to sit in a desert and my pairing partner has chosen a field of poppies. In my reality, my pairing partner is with me in my desert landscape but in their cyberspace, I am in their poppy field. You can decide on whatever environment makes you feel most productive and happy.
Continuing with the pairing example: when I look to my left, I see my pairing partner. I pull up a virtual computer screen in the dimensions, font, colours, and theme that I am most comfortable with along with my preferred IDE (Integrated Development Environment) and keyboard shortcuts. My pairing partner might have something totally different but as long as our IDE’s are in sync, we can look at the same code. Off we go code crafting; free of interruptions to focus on the work at hand in our pair programming session.
Off to one side I have yet another screen that I can use to refer to anything else I may need in this pairing session without switching away from the code e.g. supporting documents, API documents. This would be much like having a laptop next to a pairing station in the real world.
To further this pairing scenario in virtual space: as we are crafting, a green interrupt notification comes up on our chat program. This indicates that one or other of our team mates or pairs has a non-urgent interruption. (There is also urgent and immediate interruptions that would alert us in other colours.) At the next convenient point in our pairing session, we open the chat session with the other pair and see what it is they want. “Hey Ron, which class was it where we…” At this junction we may choose to move to a mob programming room with the other pair, or a white board break out room, or just stay in chat mode. Can you see where this is going?
Working this way in virtual space, I would be on board with trying an experiment with distributed team members all working from home. I’m excited by this new technology and think that as well as Agile software development, most desk jobs will be conducted this way in the near future.
Until then however, I’m sticking with co-location as your best chance for success and high performance because of the higher bandwidth communication it offers and pre-requisite for pair programming. There are certainly some exciting times ahead and I eagerly await to see what experiments Agile teams take on in this space.

Supporting Articles

Pair Programming by James Shore
Sit Together by James Shore

1 comment: