It takes two: How pair programming helped our team become stronger and more confident
You’re driving a car and you take a wrong turn. It’s dark and you don’t have a GPS. You don’t know how you’re going to get to your destination. Now picture the same situation, but you have a friend sitting beside you. Your friend pulls out a phone and helps you find your way.
Two brains are often better than one — and this is why we decided to experiment with pair programming.
Pair programming is an Agile approach where two programmers work together at one computer writing the same piece of code. Let’s return to the car metaphor. The driver is the developer at the keyboard who writes the actual code, while the navigator is the second developer who guides the direction of the code, reviews the code as it is created and focuses on the broader strategic direction of its implementation.
As the Agile Team Lead for CBC’s Analytics & Search team — the team responsible for tracking Canadian behavioural signals on our digital platforms — I’m always looking for ways to increase our productivity. We’re a positive group and work diligently, but I observed a pattern of work spilling over at the end of sprints, leaving some tickets incomplete.
I also noticed that some team members were more comfortable doing analytics-related tasks while others were more comfortable doing our search-based tasks. To rebalance the load and share our knowledge, we decided to experiment with pair programming and mix our development and QA duties. Our goal: reduce task spillover at the end of a sprint and increase knowledge pooling within the team.
While some people are critical of the practice, suggesting it makes coding take twice as long, we found the opposite to be true. By the end of the exercise, our team was more energetic and enthusiastic in reaching our sprint goal.
These were the four main benefits:
1. Increased team collaboration:
Chances are, the majority of developers have faced roadblocks solving problems, only to have a colleague quickly glance over their work and find a solution. Pair programming provides a second set of eyes at all times and facilitates collaboration that leads to creative and efficient solutions.
2. Develop higher quality solutions:
Having both a navigator and driver on a task lets our team members focus on better ways to optimize a solution. Developers bring their different experiences and expertise to generate a wider range of solutions than they would when working alone.
3. Pool team knowledge:
One of the biggest benefits we found was giving our junior team members more exposure to the code base. Our juniors were able to rapidly grow in this environment, and our seniors were exposed to new and innovative perspectives. By sharing QA duties, each team member was given some exposure to every task of a sprint.
4. Productivity and accountability:
We all have times during the day when we get distracted and lose focus, especially when working alone on a task. Sometimes procrastination sets in and we need someone to hold us accountable. With the pair programming approach, both parties hold each other accountable to stay productive, and both parties are able to share the load.
Despite the benefits of this approach, we also found some challenges. Learning to do both QA and development in a pair programming environment requires individuals to be open to working with anyone at any skill level. It requires maturity, patience and a humble environment where egos are thrown aside.
Combining the work of developers and QA testers was a significant learning curve for everyone involved. To address this, we decided to use our 20 per cent time (time dedicated to innovation, learning and reduction of technical debt) to learn the necessary QA tools and programming languages through online courses and knowledge transfer within the team. Looking back, we can proudly say that each member of the team now has the knowledge and skills to both test and develop.
Altogether, experimenting with new approaches has been a positive experience for our team. As a group and as individuals, trying out new concepts and strategies has helped us gain knowledge and experience, grow as developers and QA testers, overcome hurdles and take on bold new challenges. We love the new approaches we took and we feel it is the best way for our team to develop solutions in a collaborative Agile environment.