Pair programming is a popular technique in which two software engineers work together at the same workstation, by sitting in front of the same computer or by screen/keyboard/codebase sharing in real time. I’m practicing Pairing already for a few years with excellent outcomes but also with some tradeoffs. Today I would like to focus on tradeoffs. Recently I had feedback talks with my team members about tradeoffs related to pairing. In discussions, they provided lots of insights from last few weeks of pairing together. Based on these discussions and my experience I formed a few open questions:
- how to maximize pairing benefits and avoid issues like being too exhausted, brain melted, etc.?
- how to let 3rd person jump in (in same feature team) and understand technical issues of the project?
Trade-offs
Based on this questions we can separate a few tradeoffs related to constant pairing:
- super exhausting
- not flexible (working hours, daily rhythm breaking, blocking)
- knowledge transfer only between both pairing mates
Ideas
In discussions with my team members I collected a set of ideas which address some of the tradeoffs listed above:
Pairing only on kickoff - of structure/architecture then splitting
Cons:
- none
Pros:
- this will let decide together about the architecture and structure of the project, about serious blockers come from development
- then split on particular tickets based on agreed structure & contracts
- this will reduce stress level and exhaustion
- this will let us work in a more flexible way while staying in sync
- this will provide better performance and velocity
Live reviews - without specific time constraints or rules, an extended version of GitHub PR reviews
Cons:
- will require more time
- will need the context switch
Pros:
- will give a chance to discuss the technical decision with full understanding of decision context
- will provide better quality reviews (than just code style, used tips&tricks, etc.)
Small posts - where you can show cons/pros and share your experiences and lesson learned
Cons:
- will require some time to prepare it
Pros:
- let us present our point of view and lesson learned without running long, live and unstructured debates
- will structure out thoughts
- will be a perfect base for retrospecting our self
Wrap up meetings - workshops/presentations/live coding for all technical teams, once per 1 or 2 weeks, to share architecture and technical shifts and lesson learned
Cons:
- will require some time to prepare for it
- will need some time to participate
- will be difficult to avoid unstructured debates or discussions
Pros:
- will make technical knowledge transfer between tech teams
- we will have a chance for discussion
Once per month Technical All Hands - for the whole business department/company to present our work and share outcomes with non-technical team members, with a focus on business value)
Cons:
- will require some time (we already doing it)
- I’m still not sure how to structure discussions or open questions with the large audience
Pros:
- it’s increasing transparency
- giving more context
- let us focus more on business value than the technical aspects
- allow us to collect feedback
More Async way - Async Remote
Cons (and Pros)
- will require more communication on dedicated slack channels
- will need more structured discussion focused on a well-defined outcome (when will be difficult to achieve the outcome we can write a post about the subject)
- will persist one-to-one discussion outcomes to rest of the team (as summary similar to “Meeting minutes”)
- will increase the number of channels, but it will be more structured on oriented on the subject (vs. discussion on Engineering channel)
Conclusion
Pairing is an individual experience, limited by personal preferences, working style, and personality. Founding good pairing mate isn’t easy and requires building the trustful and respectful relation, after years of working together some mates can almost read your mind. Like every technique have own trade-offs. Provided ideas are not ultimate answers, they are instead set of ideas about how to make pairing a more enjoyable experience and more beneficial for all of us.