{"id":14483,"date":"2023-08-30T13:53:24","date_gmt":"2023-08-30T10:53:24","guid":{"rendered":"https:\/\/railsware.com\/blog\/?p=14483"},"modified":"2024-12-12T13:10:45","modified_gmt":"2024-12-12T10:10:45","slug":"what-is-pair-programming","status":"publish","type":"post","link":"https:\/\/railsware.com\/blog\/what-is-pair-programming\/","title":{"rendered":"What is Pair Programming and How to Practice it in a Remote Team"},"content":{"rendered":"\n<div class=\"intro-text\">Pair programming is one of the most controversial and widely debated agile development practices. Some engineering teams swear by it, while others remain skeptical of its benefits. But is pair programming worth the time and effort, or is it just another overhyped engineering trend? In this post, we dive into the pros and cons of pairing sessions, explain the different roles and pairing types, and share tips from our own experience with remote pair programming.<\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"2400\" height=\"1260\" src=\"https:\/\/railsware.com\/blog\/wp-content\/uploads\/2021\/11\/featured_image.jpg\" alt=\"\" class=\"wp-image-16506\" srcset=\"https:\/\/railsware.com\/blog\/wp-content\/uploads\/2021\/11\/featured_image.jpg 2400w, https:\/\/railsware.com\/blog\/wp-content\/uploads\/2021\/11\/featured_image-360x189.jpg 360w, https:\/\/railsware.com\/blog\/wp-content\/uploads\/2021\/11\/featured_image-1024x538.jpg 1024w, https:\/\/railsware.com\/blog\/wp-content\/uploads\/2021\/11\/featured_image-768x403.jpg 768w, https:\/\/railsware.com\/blog\/wp-content\/uploads\/2021\/11\/featured_image-1536x806.jpg 1536w, https:\/\/railsware.com\/blog\/wp-content\/uploads\/2021\/11\/featured_image-2048x1075.jpg 2048w\" sizes=\"auto, (max-width: 2400px) 100vw, 2400px\" \/><\/figure><\/div>\n\n\n<h2 class=\"wp-block-heading\">What is pair programming?<\/h2>\n\n\n\n<p>&nbsp;Pair programming is an activity where two developers work simultaneously on the same coding task. It\u2019s an <a href=\"https:\/\/railsware.com\/blog\/what-is-agile-product-development\/\">agile software development<\/a> concept that originates from <a href=\"https:\/\/en.wikipedia.org\/wiki\/Extreme_programming\">Extreme programming<\/a> methodology, first popularized in the 1990s.<\/p>\n\n\n\n<p>Practically speaking, pair programming is based on the four-eyes principle or the idea that \u2018two heads are better than one.\u2019 When developers write code in pairs rather than alone, they can collaborate on tasks, share knowledge, discuss ideas in real time, and problem-solve on the go. The goal is to create better quality code, unify the development team, and create a more robust, innovative product overall.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How does it work?<\/h3>\n\n\n\n<p>Traditionally, two developers shared a single computer and took turns writing or reviewing code. However, an <a href=\"https:\/\/www.terminal.io\/state-of-remote-engineering?&amp;utm_source=srereport&amp;utm_medium=webbanner&amp;utm_campaign=7013u000000nb59aae&amp;utm_content=srereport\">estimated 66%<\/a> of global software engineers now work remotely, meaning modern-day pair programming sessions often occur online.<\/p>\n\n\n\n<p>In a remote pair programming session, one developer shares their screen (displaying the IDE or code editor) and writes the actual code. Meanwhile, the other developer provides guidance on what to write or reviews what is being written. That\u2019s the basic dynamic. However, variables like the style and types of pairings often affect the structure, flow, length, and purpose of a pair programming session.<\/p>\n\n\n\n<p>At Railsware, we\u2019ve been practicing pair programming since our inception. Over the past 16 years, we\u2019ve seen the positive effects that pair work has had on individuals, the team, and the company overall. It\u2019s what inspired our software agency to expand this practice to other software development activities and internal functions.<\/p>\n\n\n\n<div class=\"post-quote no-pad\" style=\"display: flex; position: relative; margin: 0 50px;\">\n<div class=\"post-quote-mark\" style=\"position: absolute; font-size: 100px; top: -52px; font-family: sans-serif; color: #4ba9e7; right: 0px; font-weight: bold;\">\u201c<\/div>\n<div style=\"color: #666; padding-right: 40px;\">\n<p>A job of an engineer isn&#8217;t just to write code. You also spend time planning your work, discussing solutions, debugging, testing, evaluating requirements, and many other things on which you spend your workday.<\/p> \n<p>In my experience, we practiced pairing on almost all of these activities, and it worked well.<\/p>\n<p>&nbsp;<\/p>\n<\/div>\n<div style=\"display: flex; flex: 1 0 auto; flex-direction: column; font-weight: bold; color: #333333; align-items: center; text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"size-thumbnail wp-image-11983\" src=\"https:\/\/railsware.com\/blog\/wp-content\/uploads\/2021\/11\/artur-termenji-author.png\" alt=\"Artur Termenji comments about pair programming\" width=\"180\" height=\"180\">\n<p>&nbsp;<\/p>\n<h4>Artur Termenji<\/h4>\n<p style=\"margin-bottom: 0; color: #999;\">Full Stack Engineer<\/p>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n\n\n\n<p>P.S. We share our experience with building sustainable <a href=\"https:\/\/railsware.com\/blog\/remote-collaboration-at-railsware\/\">remote collaboration workflows<\/a> in a separate post.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Code review vs. pair programming<\/h3>\n\n\n\n<p>Code (or <a href=\"https:\/\/railsware.com\/blog\/pull-request-review-from-a-railsware-engineers-perspective\/\">PR reviews<\/a>) and pair programming are completely different practices (although equally important to the <a href=\"https:\/\/railsware.com\/blog\/lean-software-development-guide\/\">Lean software development process<\/a>, we\u2019d argue).<\/p>\n\n\n\n<p>Usually, a PR review is carried out asynchronously. An engineer checks the pull request submitted by one of his teammates, and either approves it, or informs their teammate of any issues that require attention.<\/p>\n\n\n\n<p>On the other hand, pair programming takes place in real time and isn\u2019t exclusively focused on code analysis. Engineers don\u2019t systematically review each line of code that is written during a session, although they do pay close attention to the quality of the work being produced.<\/p>\n\n\n\n<p>Sometimes, depending on the seniority of engineers, pair-programmed code is approved and merged on the spot. But it\u2019s also common for pull requests that were shaped during a pairing session to undergo an independent code review.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Types of pairing in pair programming<\/h2>\n\n\n\n<p>There are three main types of pairings, made up of the following roles:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Expert<\/strong>: a programmer proficient in the project\u2019s tech stack, codebase, and domain knowledge.<\/li>\n\n\n\n<li><strong>Novice<\/strong>: a newcomer, someone with little or no programming experience, and\/or unfamiliar with a particular technology\/domain.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"577\" src=\"https:\/\/railsware.com\/blog\/wp-content\/uploads\/2021\/11\/1_1520-x-1140_What-is-Pair-Programming-1024x577.jpg\" alt=\"\" class=\"wp-image-16504\" srcset=\"https:\/\/railsware.com\/blog\/wp-content\/uploads\/2021\/11\/1_1520-x-1140_What-is-Pair-Programming-1024x577.jpg 1024w, https:\/\/railsware.com\/blog\/wp-content\/uploads\/2021\/11\/1_1520-x-1140_What-is-Pair-Programming-360x203.jpg 360w, https:\/\/railsware.com\/blog\/wp-content\/uploads\/2021\/11\/1_1520-x-1140_What-is-Pair-Programming-768x433.jpg 768w, https:\/\/railsware.com\/blog\/wp-content\/uploads\/2021\/11\/1_1520-x-1140_What-is-Pair-Programming.jpg 1520w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Popular pair programming styles<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Driver\/Navigator<\/h3>\n\n\n\n<p>This style mimics motorsport where the Navigator sets the course and the Driver follows their instructions. So, in pair programming, the Driver controls the keyboard and writes code based on the Navigator\u2019s guidelines.<\/p>\n\n\n\n<p>The biggest advantage of this style is that it enables the pair to assess an issue on both a micro and macro level: the Navigator concentrates on the bigger picture while the Driver works out the details. For best results, the Navigator should provide broad instructions, and let the Driver decide how to implement the solution.<\/p>\n\n\n\n<p>The Driver\/Navigator style can be successfully applied by all pairs we described earlier. It is most effective in the Expert-Novice pair dynamic, where the Expert takes the role of the Navigator.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Ping-pong<\/h3>\n\n\n\n<p>Teams who follow the Test-Driven Development technique often use the ping-pong pairing style. Here\u2019s how it works: One developer writes a failing test and the other writes the implementation to make it pass. Then they refactor the code together (if necessary), and repeat the cycle.<\/p>\n\n\n\n<p>Usually, the pair switch roles throughout the session, especially if they are both Experts and have an equivalent skill level. This style works well for all kinds of pairings and can be very effective when two Experts pair together.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Tour guide<\/h3>\n\n\n\n<p>Here, one programmer assumes the role of a \u2018Tour Guide\u2019 and the other becomes an \u2018Observer.\u2019 The Tour Guide writes the code and explains his <a href=\"https:\/\/railsware.com\/blog\/decision-making-frameworks\/\">decision-making process<\/a>, while the Observer watches the screen and listens.<\/p>\n\n\n\n<p>After a short coding round, the Observer is invited to comment on both the written code and decisions made by their pair mate. Once they have refactored the code, or resolved any issues or misunderstandings, the pair move on to the next coding round.<\/p>\n\n\n\n<p>This style is ideal for Expert\u2013Novice pairs. When the Expert is the Tour Guide, they can run an onboarding session without constant interruptions, yet easily provide opportunities for the Novice to ask questions and contribute. When roles are reversed (Novice as the Tour Guide), the Expert gets to understand the junior developer\/newcomer\u2019s thought process and provides feedback in between rounds.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Strong pairing<\/h3>\n\n\n\n<p>This style is best suited for Expert-Novice pairs, where the Expert essentially tells the Novice what to do. It\u2019s helpful for scenarios when a senior developer needs to teach a junior how to solve an issue \u2018the right way.\u2019 It also pushes the Expert to consider the <a href=\"https:\/\/railsware.com\/blog\/idea-screening\/\">viability of their idea<\/a> while they\u2019re in the process of explaining it.<\/p>\n\n\n\n<p>However, because this style is heavy on the \u2018thinking out loud\u2019 aspect of pairing, Experts may struggle at first. Engineers typically work alone and make decisions on the fly, not always considering the \u2018why\u2019 behind their choices. As such, strong pairing tends to push engineers out of their comfort zones.<\/p>\n\n\n\n<p>Lastly, unlike all the rest of the styles we\u2019ve discussed, the Novice is always the Driver in strong pairing scenarios, and the Expert is always the Navigator. They never switch roles.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Unstructured<\/h3>\n\n\n\n<p>In unstructured pairing sessions, programmers don\u2019t follow any fixed collaboration style. Oftentimes, these meetings are ad-hoc, initiated when an engineer is dealing with a persistent bug or tricky task and needs help from a trusted peer.<\/p>\n\n\n\n<p>During the session, they may switch roles occasionally and prefer not to follow any plan\/agenda. Most unstructured sessions happen between Expert-Expert pairs. On the other hand, this style isn\u2019t well-suited to Novice-Novice pairs, who have less experience in running pairing sessions and would benefit from following set rules.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Benefits of pair programming<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Better solutions are produced<\/h3>\n\n\n\n<p>Again, when it comes to problem-solving, two heads are usually better than one. Whether the pair is tackling a stubborn bug or discussing improvements to the system architecture, engineers can discuss the issue in real-time and brainstorm ideas as they go.<\/p>\n\n\n\n<p>Certain pair programming styles (like Driver\/Navigator) also ensure that an idea or piece of code is examined from two perspectives: the big picture, and the smaller details of implementation. In our view, this empowers engineers to create smarter, more well-rounded solutions.<\/p>\n\n\n\n<p>Tip: For finding solutions to larger, more complex problems, our product teams often use the <a href=\"https:\/\/railsware.com\/bridges-framework\/\">BRIDGeS framework<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Faster onboarding and knowledge sharing<\/h3>\n\n\n\n<p>Development teams can\u2019t afford to spend weeks waiting for a newcomer to get familiar with the codebase and documentation. Left alone, a new team member may lack context and struggle to complete their first assigned tasks. That\u2019s why it\u2019s more efficient for an Expert (say, a senior developer) to initiate a pairing session with the newcomer at the beginning of the onboarding period, and dedicate a couple of hours to knowledge-sharing e.g. explaining shortcuts\/intricacies in the documentation, providing product context etc.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Prevents the accumulation of technical debt<\/h3>\n\n\n\n<p>A gradual build-up of <a href=\"https:\/\/railsware.com\/blog\/reduce-technical-debt\/\">technical debt<\/a> can be detrimental to any project, and development teams must work together to prevent it. In our experience, pair programming makes it easier to spot the seeds of tech debt. With two pairs of eyes on the screen, engineers are better equipped to identify (and fix) bugs as they appear. And since the thinking\/writing process involves more than one engineer, code quality and structure also improve.<\/p>\n\n\n\n<div class=\"post-quote\" style=\"display: flex; position: relative;\">\n<div class=\"post-quote-mark\" style=\"position: absolute; font-size: 100px; top: -52px; font-family: sans-serif; color: #4ba9e7; left: 0px; font-weight: bold;\">\u201c<\/div>\n<div style=\"display: flex; flex: 1 0 auto; flex-direction: column; font-weight: bold; color: #333333; align-items: center; text-align: center; margin-right: 50px;\"><img loading=\"lazy\" decoding=\"async\" class=\"size-thumbnail wp-image-11983\" src=\"https:\/\/railsware.com\/blog\/wp-content\/uploads\/2021\/11\/igor-dobryn-author.png\" alt=\"Igor Dobryn on disadvantages of pair programming\" width=\"180\" height=\"180\">\n<p>&nbsp;<\/p>\n<h4>Igor Dobryn<\/h4>\n<p style=\"margin-bottom: 0; color: #999;\">Full Stack Engineer<\/p>\n<\/div>\n<div style=\"color: #666; padding-right: 40px; margin-bottom: 10px;\">\n<p>From a business perspective, there are two things that matter the most \u2013 code quality and speed of code delivery.<\/p> \n<p>When the team does PR reviews, engineers get feedback from their teammates. But pair programming goes one step further \u2013 it allows engineers to get feedback during the process of writing code, so they can improve their work on the fly!<\/p> \n<p>Not only does this practice save time, but having two sets of eyes on the code ensures that engineers deliver high-quality work week after week.<\/p>\n<\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Helps programmers stay focused<\/h3>\n\n\n\n<p>In a well-structured pairing session, each programmer is expected to contribute (on some level) to the task\/discussion at hand. The constant back-and-forth of these sessions means there are fewer opportunities for distraction: Slack notifications, emails, phones, etc. Additionally, pairing sessions are often dedicated spaces for resolving blockers or difficult tasks. Two engineers can put their heads down and potentially solve a problem within 2 to 3 hours, rather than over several days. For optimal efficiency, companies can often use <a href=\"https:\/\/desktime.com\/guide-to-monitoring-employees\" target=\"_blank\" rel=\"noopener\" title=\"\">employee tracking<\/a> software to monitor and manage their pairing sessions.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Promotes collective code ownership<\/h3>\n\n\n\n<p>When developers regularly work together on a single task, it fosters a sense of shared ownership of the codebase. Collective ownership also boosts accountability, making engineers less likely to take shortcuts or allow sub-par code to slip through the cracks.<\/p>\n\n\n\n<p>On top of that, pair programming usually gives team members the chance to work on different parts of the product, not just the elements they personally created. This prevents the so-called <a href=\"https:\/\/en.wikipedia.org\/wiki\/Bus_factor#:~:text=7%20External%20links-,Definition,disappearing%20suddenly%20from%20the%20project.\">\u2018bus factor\u2019 effect<\/a>, where the team is left in the dark after a key player leaves the project.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Effective tool for hiring&nbsp;and retention<\/h3>\n\n\n\n<p>When hiring a new team member, we usually run a &#8216;full day&#8217; interview where one of our engineers coordinates a pair programming session with the candidate. This type of collaboration helps us assess the candidate&#8217;s strengths and weaknesses, and understand how they communicate ideas, cope with feedback, and respond to imperfect requirements, tech debt, etc.<\/p>\n\n\n\n<p>Meanwhile, we find that pair programming helps us retain the best talent too. In the realm of remote work, having a good pair mate reduces the risk of people leaving as they feel more connected to the team and, in turn, the company. Using any of the <a href=\"https:\/\/www.joinblink.com\/intelligence\/alternatives-workplace-from-meta\" target=\"_blank\" rel=\"noopener\" title=\"\">Meta Workplace alternatives<\/a> can make this connection even stronger by supporting seamless collaboration and communication. A pairing session isn&#8217;t just about coding. It&#8217;s also about those shared &#8216;aha&#8217; moments, small talk, offering a helping hand, bonding over mutual frustrations, and all the other stuff that builds team spirit.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Drawbacks of pair programming&nbsp;<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Consumes additional time and resources<\/h3>\n\n\n\n<p><a href=\"https:\/\/collaboration.csc.ncsu.edu\/laurie\/Papers\/XPSardinia.PDF\">One study<\/a> found that paired-up engineers spend 15% more time on a single task than if they completed it alone. So, while pair programming comes with a cost, we believe it\u2019s pretty minimal. In our experience, investing in a paired session allows us to save the same amount of resources (or even more) on the QA process, as the code produced in that setting is of higher quality and contains fewer defects in the end.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">It requires practice<\/h3>\n\n\n\n<p>Pair programming should never replace solo work; it should only complement it. But it may take practice and persistence to reach a point where pairing up feels natural to you. Practicing the art of thinking out loud, and working on your active listening skills, can help ease the transition.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">It\u2019s not for everyone<\/h3>\n\n\n\n<p>An engineer\u2019s capacity to enjoy pair programming often depends on their personality. Some people prefer working alone, while others thrive in a collaborative setting. Not to mention, it can be stressful working in an environment where you have to maintain a high level of concentration over a prolonged period, even when breaks are factored in.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">It\u2019s exhausting<\/h3>\n\n\n\n<p>Not only can pair programming be stressful for some, but it\u2019s a fairly exhausting activity too. Working side by side, commenting on every step, explaining technical concepts and decisions, finetuning the details \u2013 all of these things make pairing sessions extremely taxing. Beginners often struggle with the mental exhaustion that pairing brings, but as with anything else, the more you do it, the less difficult it becomes.<\/p>\n\n\n\n<div class=\"post-quote no-pad\" style=\"display: flex; position: relative; margin: 0 50px;\">\n<div class=\"post-quote-mark\" style=\"position: absolute; font-size: 100px; top: -52px; font-family: sans-serif; color: #4ba9e7; right: 0px; font-weight: bold;\">\u201c<\/div>\n<div style=\"color: #666; padding-right: 40px;\">\n<p>I find that pair programming is incredibly beneficial when I feel non-productive, blocked, and generally low mentally. Pair work makes me more energized and motivated to solve problems.<\/p> \n<p>It&#8217;s easier when you share the problem with someone. I also believe that the right balance of pair work and working alone might prevent burnout.<\/p>\n<p>&nbsp;<\/p>\n<\/div>\n<div style=\"display: flex; flex: 1 0 auto; flex-direction: column; font-weight: bold; color: #333333; align-items: center; text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"size-thumbnail wp-image-11983\" src=\"https:\/\/railsware.com\/blog\/wp-content\/uploads\/2021\/11\/artur-hebda-author.png\" alt=\"Artur Hebda on advantages of pair programming\" width=\"180\" height=\"180\">\n<p>&nbsp;<\/p>\n<h4>Artur Hebda<\/h4>\n<p style=\"margin-bottom: 0; color: #999;\">Full Stack Engineer<\/p>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Common misconceptions about pair programming<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>It reduces team productivity. <\/strong>Again, while a major study indicates that the productivity of a single programmer is slightly reduced, pairing sessions can actually help the rest of the dev team save time (e.g. fewer bugs for QA to find, a smaller backlog to tackle). And <a href=\"https:\/\/www.cs.utexas.edu\/users\/mckinley\/305j\/pair-hcs-2006.pdf\">another study found<\/a> that novice-novice pairs were more productive than novices who worked alone.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"379\" src=\"https:\/\/railsware.com\/blog\/wp-content\/uploads\/2021\/11\/pair-programming2.png\" alt=\"\" class=\"wp-image-16509\" srcset=\"https:\/\/railsware.com\/blog\/wp-content\/uploads\/2021\/11\/pair-programming2.png 640w, https:\/\/railsware.com\/blog\/wp-content\/uploads\/2021\/11\/pair-programming2-360x213.png 360w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><figcaption class=\"wp-element-caption\">Image credit: <a href=\"https:\/\/vincentdnl.com\/\" title=\"\">Vincentdnl<\/a><\/figcaption><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>It\u2019s only suitable for mentoring juniors. <\/strong>We believe any engineer, regardless of their experience, can benefit from a pair programming session. Even veterans of the project or company might be surprised by how much they can learn from a peer. In a nutshell, regular knowledge sharing helps engineers grow professionally and strengthens relationships between teammates.<\/li>\n\n\n\n<li><strong>It\u2019s a form of micro-management. <\/strong>Pair programming isn\u2019t about double-checking the quality of someone\u2019s work. And participants shouldn\u2019t ever feel as though someone is looking over their shoulder, waiting for them to make a mistake. On the contrary, sessions should be supportive, educational, open-minded spaces where engineers aren\u2019t afraid to slip up or voice their opinions.<\/li>\n<\/ul>\n\n\n\n<p>We delve deeper into our hands-off team management approaches in the posts <a href=\"https:\/\/railsware.com\/blog\/holacracy-in-action-how-each-railswarian-can-influence-company-strategy\/\">Holacracy in Action<\/a> and <a href=\"https:\/\/railsware.com\/blog\/authority-responsibility-accountability\/\">Balance Between Authority, Responsibility, Accountability<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Do\u2019s and don\u2019ts of pair programming<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1014\" height=\"1024\" src=\"https:\/\/railsware.com\/blog\/wp-content\/uploads\/2021\/11\/2_1520-x-1250_What-is-Pair-Programming-1014x1024.jpg\" alt=\"\" class=\"wp-image-16505\" srcset=\"https:\/\/railsware.com\/blog\/wp-content\/uploads\/2021\/11\/2_1520-x-1250_What-is-Pair-Programming-1014x1024.jpg 1014w, https:\/\/railsware.com\/blog\/wp-content\/uploads\/2021\/11\/2_1520-x-1250_What-is-Pair-Programming-356x360.jpg 356w, https:\/\/railsware.com\/blog\/wp-content\/uploads\/2021\/11\/2_1520-x-1250_What-is-Pair-Programming-768x776.jpg 768w, https:\/\/railsware.com\/blog\/wp-content\/uploads\/2021\/11\/2_1520-x-1250_What-is-Pair-Programming.jpg 1521w\" sizes=\"auto, (max-width: 1014px) 100vw, 1014px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Pro tips for pair programming sessions<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Keep talking.<\/strong> Many programmers aren\u2019t used to thinking out loud, and they may dislike the practice at first. However, constant communication is key. If an engineer (particularly the one leading the session) stops talking, then that\u2019s a sign something has gone wrong.<\/li>\n\n\n\n<li><strong>Keep listening.<\/strong> Pair programming should be give-and-take, not a lecture. So, even the leader of the session should make an effort to listen to their pair mate\u2019s ideas and opinions. But don\u2019t let the meeting get sidetracked by interruptions \u2013 if you disagree with your peer, pause your work and discuss the issue separately.<\/li>\n<\/ul>\n\n\n\n<p>Check out our post on <a href=\"https:\/\/railsware.com\/blog\/product-manager-communication\/\">effective communication<\/a> for some universal tips on how to avoid misunderstandings at work.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Avoid refactoring or doing other coding tasks during breaks.<\/strong> Again, regular breaks prevent burnout and are an important element of pairing sessions (especially remote ones). Don\u2019t skip or work through them. Instead, chat with your pair mate, grab a coffee, or take a short walk before the next round.<\/li>\n<\/ul>\n\n\n\n<div class=\"post-quote\" style=\"display: flex; position: relative;\">\n<div class=\"post-quote-mark\" style=\"position: absolute; font-size: 100px; top: -52px; font-family: sans-serif; color: #4ba9e7; left: 0px; font-weight: bold;\">\u201c<\/div>\n<div style=\"display: flex; flex: 1 0 auto; flex-direction: column; font-weight: bold; color: #333333; align-items: center; text-align: center; margin-right: 50px;\"><img loading=\"lazy\" decoding=\"async\" class=\"size-thumbnail wp-image-11983\" src=\"https:\/\/railsware.com\/blog\/wp-content\/uploads\/2021\/11\/artur-hebda-author.png\" alt=\"Pair programming best practices\" width=\"180\" height=\"180\">\n<p>&nbsp;<\/p>\n<h4>Artur Hebda<\/h4>\n<p style=\"margin-bottom: 0; color: #999;\">Full Stack Engineer<\/p>\n<\/div>\n<div style=\"color: #666; padding-right: 40px; margin-bottom: 10px;\">\n<p>I don\u2019t do more than 2 or 3 hour-long sessions a day, and I still find those days exhausting. But they also make me feel like I&#8217;ve achieved more than I could have done on my own.<\/p> \n<p>Having a single session longer than 3 hours a day would be too much for me.<\/p>\n<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Tools for pair programming sessions<\/h2>\n\n\n\n<p>Railsware is a remote-first company with our teams spread out over 25 countries. Despite the distance (or, rather, because of it) we practice pair programming regularly and rely heavily on it during our knowledge-sharing, hiring, and <a href=\"https:\/\/railsware.com\/blog\/onboarding-process\/\">onboarding processes<\/a>.<\/p>\n\n\n\n<p>Over the years, our engineers have tested different tools, and stuck with:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Visual Studio Code<\/strong> with <strong>Live Share plugin<\/strong>. This IDE and plugin combo allows developers to write code together by sharing parts of the code without sharing the whole repository access. We use it during \u201cfull-day interviews\u201d with candidates who aren\u2019t a part of our ecosystem.<\/li>\n\n\n\n<li><strong>RubyMine<\/strong> with <strong>Code With Me plugin<\/strong> is our engineers\u2019 go-to choice for remote pair programming sessions.<\/li>\n<\/ul>\n\n\n\n<p>For screen sharing, we mainly use:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Slack huddle<\/strong>. A handy tool that allows you to highlight text on the shared screen.<\/li>\n\n\n\n<li><strong>Zoom<\/strong> uses less bandwidth, so it\u2019s more suitable if your <a href=\"https:\/\/blog.internxt.com\/starlink\/\" target=\"_blank\" rel=\"noopener\" title=\"\">internet connection<\/a> isn\u2019t very reliable.<\/li>\n<\/ul>\n\n\n\n<p>If your team is distributed as ours, we\u2019d also recommend the <a href=\"https:\/\/tuple.app\">Tuple app<\/a>. Additionally, for coding work that doesn\u2019t require an open browser, try using ssh with tmux, especially when working at lower bandwidths.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Final thoughts<\/h2>\n\n\n\n<p>Our software agency practices pair programming to solve project blockers, validate promising candidates, onboard new team members, share expertise, and distribute knowledge within the team. Although not without its vices, we believe the net benefits of pair programming far outweigh the drawbacks \u2013 especially when the practice is applied to remote working environments. Our last piece of advice? Don\u2019t knock pair programming til you\u2019ve tried it!<\/p>\n\n\n\n<p>Curious about our other software development processes and approaches to product building? Check out our <a href=\"https:\/\/railsware.com\/services\/\">product development services page<\/a> for a closer look.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pair programming is one of the most controversial and widely debated agile development practices. Some engineering teams swear by it, while others remain skeptical of its benefits. But is pair programming worth the time and effort, or is it just another overhyped engineering trend? In this post, we dive into the pros and cons of&#8230;<\/p>\n","protected":false},"author":58,"featured_media":16507,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[3],"tags":[],"coauthors":["Artur Termenji"],"class_list":["post-14483","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development"],"acf":[],"aioseo_notices":[],"categories_data":[{"name":"Engineering","link":"https:\/\/railsware.com\/blog?category=development"}],"post_thumbnails":"https:\/\/railsware.com\/blog\/wp-content\/uploads\/2021\/11\/featured_image.jpg","amp_enabled":true,"_links":{"self":[{"href":"https:\/\/railsware.com\/blog\/wp-json\/wp\/v2\/posts\/14483","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/railsware.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/railsware.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/railsware.com\/blog\/wp-json\/wp\/v2\/users\/58"}],"replies":[{"embeddable":true,"href":"https:\/\/railsware.com\/blog\/wp-json\/wp\/v2\/comments?post=14483"}],"version-history":[{"count":25,"href":"https:\/\/railsware.com\/blog\/wp-json\/wp\/v2\/posts\/14483\/revisions"}],"predecessor-version":[{"id":18637,"href":"https:\/\/railsware.com\/blog\/wp-json\/wp\/v2\/posts\/14483\/revisions\/18637"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/railsware.com\/blog\/wp-json\/wp\/v2\/media\/16507"}],"wp:attachment":[{"href":"https:\/\/railsware.com\/blog\/wp-json\/wp\/v2\/media?parent=14483"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/railsware.com\/blog\/wp-json\/wp\/v2\/categories?post=14483"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/railsware.com\/blog\/wp-json\/wp\/v2\/tags?post=14483"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/railsware.com\/blog\/wp-json\/wp\/v2\/coauthors?post=14483"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}