<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ pair programming - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Browse thousands of programming tutorials written by experts. Learn Web Development, Data Science, DevOps, Security, and get developer career advice. ]]>
        </description>
        <link>https://www.freecodecamp.org/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ pair programming - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Tue, 09 Jun 2026 23:08:19 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/news/tag/pair-programming/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ What is Collaborative Coding? Pair Programming, Mob Programming, and How it All Works ]]>
                </title>
                <description>
                    <![CDATA[ By Andrej Kovacevic Coding can be challenging, but it can become a lot easier if you have the right strategies and tools.  After all, as noted software engineer and writer Joel Spolsky says, "it is harder to read code than to write it." One way to ma... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/collaborative-coding-tips/</link>
                <guid isPermaLink="false">66d45d9bc7632f8bfbf1e3d7</guid>
                
                    <category>
                        <![CDATA[ Collaboration ]]>
                    </category>
                
                    <category>
                        <![CDATA[ pair programming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ teamwork ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Mon, 02 May 2022 20:13:44 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/04/collaborative-coding-tips.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Andrej Kovacevic</p>
<p>Coding can be challenging, but it can become a lot easier if you have the right strategies and tools. </p>
<p>After all, as noted software engineer and writer <a target="_blank" href="http://blogs.perl.org/users/buddy_burden/2013/12/perl-and-me-part-4-a-worthy-program-exceedingly-well-read.html#note1">Joel Spolsky</a> says, "it is harder to read code than to write it."</p>
<p>One way to make your development projects more successful is with collaborative coding. This refers to the process of working on the code with a team or with another developer. In a project that uses collaborative coding, each team member helps build the code and checks it for bugs or errors.</p>
<p>Working in pairs or teams helps finished code contain <a target="_blank" href="https://www.freecodecamp.org/news/how-to-be-a-team-player-in-the-tech-world-c78aa9f4e898/">fewer mistakes</a> and bugs, and this results in better code quality and projects being completed more quickly.</p>
<p>It also enables faster debugging and greater project resiliency, as this setup makes it easier for other developers to take over in case one of the developers has to leave the project.</p>
<p>But collaborative coding won't produce all of these benefits by default. Making them happen comes down to how you implement your collaborative development strategy and how you execute it. Here are four points to consider when doing so.</p>
<h2 id="heading-you-need-a-secure-development-process">You Need a Secure Development Process</h2>
<p>Although having multiple sets of eyes checking a project's code should produce a net benefit for the code's security — it can also introduce a new type of vulnerability into the mix. This is because sharing code through a collaboration platform creates the possibility of a data breach.</p>
<p>Humans, after all, are the weakest link in the cybersecurity chain. So, the larger the team, the greater the odds that someone will make an unforced security error during development. </p>
<p>And things like exposed or stolen login credentials can endanger a project — especially one that is designed to handle sensitive information like banking and personal details.</p>
<p>This means that project managers must choose a collaboration platform that's built with security in mind. Some collaborative coding platforms already have built-in security features, but others do not. And different types of coding projects will call for different feature sets, so there's no one-size-fits-all solution.</p>
<p>There are plenty of collaborative coding platforms that may fit the bill, however. <a target="_blank" href="https://teletype.atom.io/">Teletype</a>, for example, comes with end-to-end encryption and the option to use self-destructing messages. </p>
<p>Another popular option is <a target="_blank" href="https://brackets.io/">Brackets</a>, which comes with data protection when interacting with third-party plugins and has a mechanism for preventing unapproved access and privilege escalation.</p>
<p>Some teams or developers might use established collaboration platforms not specifically designed for coding. Microsoft Teams, for instance, can facilitate casual coding collaboration. And although it's not an inherently insecure system, it has weaknesses that developers can address with an additional <a target="_blank" href="https://www.avanan.com/teams-security">Microsoft Teams Security</a> solution.</p>
<p>These solutions include features like malware protection, URL protection, access control over confidential data, compliance tools, and security alerts – which all improve platform security significantly. </p>
<p>Regardless of the platform you choose, though, it is important to use security tools or to install third-party security solutions that ensure the best possible security for your project.</p>
<h2 id="heading-choose-the-right-platform-for-the-job">Choose the Right Platform for the Job</h2>
<p>It's also important to recognize that security isn't the only consideration when you're choosing a collaborative coding platform. </p>
<p>It's also critical to choose one that will provide every team member with the tools and resources necessary to do their job. The right platform should meet the following criteria:</p>
<h3 id="heading-its-made-for-a-specific-programming-language-or-ecosystem">It's made for a specific programming language or ecosystem</h3>
<p>There are many benefits in using a platform that is created for a specific programming language. First, it most likely has all of the tools necessary to efficiently work on a project in a particular language. And it won't have unnecessary features added to cater to other requirements and preferences.</p>
<p>A language-specific platform is also designed with best practices in mind for developers working with particular languages or frameworks. So, for example, when working with dynamic programming languages such as Go, Ruby, and Python, it is preferable to use a platform like <a target="_blank" href="https://aws.amazon.com/cloud9/">Cloud9</a>.</p>
<h3 id="heading-its-fast-to-setup">It's fast to setup</h3>
<p>Ideally, everyone involved should already be familiar with the collaborative coding platform that you'll use. But if this isn't the case, it's important to choose one that is easy to learn with minimal to no configuration involved. </p>
<p>A platform that requires IDE, server, terminal, codebase, and library configuration along with other setup procedures is not the most suitable option for live coding between pairs or teams of developers.</p>
<h3 id="heading-it-should-have-a-customizable-user-interface">It should have a customizable user interface</h3>
<p>Programming is a heavily detail-driven job and developers tend to have their own preferences when it comes to the user interface so they can work easily and conveniently. </p>
<p>Forcing everyone to use a platform they are not comfortable with is not a good way to proceed with collaborative coding. So it helps to have the option to modify the UI or dashboard to some extent.</p>
<p>The bottom line is that the collaborative coding platform should be easy to use for everyone. Developers may be highly skilled people, but not everyone is a master of everything. Those who are collaborating should agree on a platform and working arrangement that works for everyone.</p>
<h2 id="heading-define-clear-team-roles-at-the-outset">Define Clear Team Roles at the Outset</h2>
<p>We can categorize collaborative coding into three general setups: </p>
<ul>
<li>pair programming</li>
<li>mob programming, and </li>
<li>code sharing. </li>
</ul>
<p>And understanding the inner workings of each of these setups is important, as different coding projects require different setups. </p>
<p>But it's equally important to understand the roles of the team members in each setup and to define them before beginning to code.</p>
<p>As the phrase suggests, <a target="_blank" href="https://www.freecodecamp.org/news/things-ive-learned-from-pair-programming-interviews-35a4db7d7443/">pair programming</a> involves two participants. Usually, one serves as the driver and the other acts as the navigator. The driver writes the code while the navigator reviews the output. </p>
<p>In this setup, the driver is responsible for the tactical aspects of the job while the navigator sets the strategic direction of the code. The two may then switch their roles to have a more thorough look at what they have produced.</p>
<p><a target="_blank" href="https://searchsoftwarequality.techtarget.com/definition/mob-programming">Mob programming</a> is similar to pair programming but involves more than two people. To avoid making it a chaotic or disorganized arrangement, it is also important to have the driver-navigator role assignments. </p>
<p>It is slightly more complicated, though, because there are more than two developers who have to agree on how to assign the driver-navigator roles. This means that clear communication and mutual respect are crucial.</p>
<p>The code-sharing setup does not require a driver-navigator dynamic. Instead, the collaborating developers only share their respective code to allow each other to review, modify, debug, or add to each other's code. </p>
<p>This is the type of collaboration that open source developers tend to rely on because it allows newcomers to participate at will and existing developers to pause their work whenever they need to.</p>
<p>The participants here may work on the code together in real-time or asynchronously. What's important is that they have a reliable system for version control. </p>
<p>That's where version control systems like <a target="_blank" href="https://git-scm.com/">Git</a> excel. They help teams to avoid doing duplicate work and make sure that all developers are reviewing, revising, or adding to the latest version of the code at all times.</p>
<h2 id="heading-create-skill-balanced-teams-for-best-results">Create Skill Balanced Teams for Best Results</h2>
<p>While some would consider collaborative coding as an <a target="_blank" href="https://www.smashingmagazine.com/2020/04/collaborative-coding-ultimate-career-hack/">opportunity to learn</a> from more experienced and proficient coders, that doesn't mean every collaborative project is conducive to that. </p>
<p>This is because for certain types of projects, having too much of a disparity in the skill level of team members can grind the whole project to a halt.</p>
<p>This is a problem that feeds one of the biggest criticisms of collaborative coding as a development method. When team members must contribute as equals but lack the skills to keep up, progress stalls. When time is of the essence, creating a skill-balanced team is the only option.</p>
<p>That said, collaborative coding can be an opportunity for collaborative learning, but only when deadlines aren't involved. In that scenario, team members can take their time to learn from the work of their more experienced peers. And in the end, everyone benefits from the experience.</p>
<p>But if the goal is to make the project a collaborative learning endeavor, it is important to make that clear from the get-go. Otherwise, the more experienced developers could feel like they've been duped into providing training instead of getting the project done. And that never ends well.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>The advantages of collaborative coding are undeniable — but there are drawbacks to consider too. </p>
<p>So, before deciding to go into the collaborative route, it is important to carefully scrutinize the pros and cons as they relate to a specific project. </p>
<p>And for developers who wish to try their hand at collaborative coding, it's a good idea to get familiar with the popular tools and platforms used for such projects beforehand. That way, both the project planners and team members will get the most out of the collaborative process — but without encountering some of the issues that it can entail.</p>
<p><em>Featured photo by snowing 12 - stock.adobe.com</em></p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ The Psychology of Pair Programming ]]>
                </title>
                <description>
                    <![CDATA[ By Chris Cooney Behaviours and skills exhibited by the very best pair programmers. I know this is serious business but this pair are off the chart cute. Dr. Sallyann Freudenberg is a software engineer and psychologist who has spent some serious time... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/the-psychology-of-pair-programming-86cb31f9abca/</link>
                <guid isPermaLink="false">66c3622ae4cb1ff6521c828f</guid>
                
                    <category>
                        <![CDATA[ pair programming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ General Programming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ psychology ]]>
                    </category>
                
                    <category>
                        <![CDATA[ software development ]]>
                    </category>
                
                    <category>
                        <![CDATA[ tech  ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Wed, 15 May 2019 16:49:51 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/0*9E8SEVmwWC403red.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Chris Cooney</p>
<h4 id="heading-behaviours-and-skills-exhibited-by-the-very-best-pair-programmers">Behaviours and skills exhibited by the very best pair programmers.</h4>
<p><img src="https://cdn-media-1.freecodecamp.org/images/RrUpk9-2eHvHQJDzyFt2SH3fWOEEmzEnzQq3" alt="Image" width="800" height="569" loading="lazy">
<em>I know this is serious business but this pair are off the chart cute.</em></p>
<p><a target="_blank" href="https://twitter.com/SalFreudenberg">Dr. Sallyann Freudenberg</a> is a software engineer and psychologist who has spent some serious time observing the behaviours of high performing software teams. <a target="_blank" href="https://salfreudenberg.wordpress.com/2013/06/08/pair-programming-and-expertise/">Her blogs</a> contain a wealth of information for any software professional looking to sharpen their skills.</p>
<p>As an engineer with no psychology background whatsoever, I couldn’t help but think — this is some really, <strong>really</strong> good stuff. It’s accessible, easy to understand and clear. I thought… perhaps I’ve picked up the wrong career? <em>Maybe I’m a psychologist!</em> So I read a little Freud and <strong>oh my god the horror</strong>, so I’m definitely still an engineer and have no interest in psychology any more. Also I can’t look my mother in the eye.</p>
<p>Anyway, after many hours of repetitive strain injury-inducing labour, here is what I have produced. A collection of tips, based on the work of Dr. Freudenberg. My hope is that you’ll use this as a primer, an appetiser if you will, before diving into Dr. Freudenberg’s work and developing a more full understanding. Let’s get started.</p>
<h3 id="heading-take-regular-breaks">Take Regular Breaks</h3>
<p>Easy one to open up with. I know I sound like your mother when you were young. She warned you against square eyes. Well she was wrong about the square eyes thing but she was right about taking a damn break once in a while.</p>
<p>Regular breaks are well understood <a target="_blank" href="https://www.psychologytoday.com/ca/blog/changepower/201704/how-do-work-breaks-help-your-brain-5-surprising-answers">in psychology</a>. In the context of pair programming, they:</p>
<ul>
<li>Prevent context from building up too much. Breaks break things up.</li>
<li>Lower the cognitive load and enable longer overall pair programming sessions.</li>
<li>Make you happier!</li>
</ul>
<p>Of all the basic sins I see, this is the most common. Five hour meetings with no time budgeted for breaks. “Powering through” isn’t always the answer. Sometimes, going for a coffee or a beer (depending on how stuck you are) can provide the answer too. If you’re interested, there is a <a target="_blank" href="https://www.amazon.ca/Slack-Getting-Burnout-Busywork-Efficiency/dp/0767907698">brilliant book</a> about slack time that gives a much fuller answer to this topic.</p>
<h3 id="heading-push-the-keyboard-dont-take-it">Push the keyboard, don’t take it</h3>
<p>The keyboard, in Dr. Freudenberg’s research, was the physical component of control. Engineers would pass the mouse around freely in Canada, but the keyboard was held sacred. In high performing pairs, the driver would volunteer control of the keyboard. It would never be taken. From this, we can glean a simple rule for both the driver and the navigator.</p>
<h4 id="heading-the-driver-learn-when-to-pull-over">The Driver — learn when to pull over.</h4>
<p>The example from Dr. Freudenberg’s research illustrates this.</p>
<blockquote>
<p>Example 1 (Anna is navigating, Ben is driving):</p>
<p>Anna: “If you…..go to….”</p>
<p>Ben: (sliding the keyboard over to her) “(You) drive….it’s easier”.</p>
</blockquote>
<p>The driver is aware of the most effective way to communicate and is happy to relinquish control when needed. Don’t let your ego cling to the keys. Hand it over when necessary.</p>
<h4 id="heading-the-navigator-dont-disempower">The Navigator — don’t disempower.</h4>
<p>When you’re watching, watch. Drop hints, be friendly, but don’t force control out of the driver’s hands. It creates resentment. Treat that keyboard carefully.</p>
<p>The driver is often seen as the position of power in the pair, but the navigator has the ability to derail the whole exercise by hijacking the keyboard when things get tricky. With great power comes great responsibility.</p>
<h3 id="heading-have-somewhere-to-draw">Have somewhere to draw.</h3>
<p>A whiteboard is the gold standard here. A nice, big, clear space to draw all over. Words are great and all but nothing beats a bunch of wonky boxes and not so straight lines.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/ct72TcZmLkLp1oyy5DsENTxdmOkNs4smCG9Z" alt="Image" width="600" height="364" loading="lazy"></p>
<p>In Dr. Freudenberg’s research, a key finding was the use of scribbled on diagrams in high performing pairs. The creative act of writing the diagram sparks thoughts and jogs memories. They were far more powerful than pre-existing diagrams, which seemed to be more useful when seeking a holistic view of multiple teams and systems.</p>
<p>Sometimes things are difficult to convey without a hastily drawn picture. If you don’t have a whiteboard, use a notepad. In one example, Dr. Freudenberg observed someone tracing a diagram with their finger. Drawing sparks joy people!</p>
<h3 id="heading-invite-spontaneous-outside-help">Invite spontaneous outside help</h3>
<p>So there you are, working through a problem. An API that needs consuming and saving into a database. You debate, discuss and start writing. Nothing is working and you don’t know why, but if you can just focus… just a little longer. A few more uninterrupted hours.</p>
<p>Then… Bill from the payments team leans over and asks you about something you just said.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/8kGylhd3H1rhkSACPLEAZKU72luwwVE8ONT0" alt="Image" width="800" height="533" loading="lazy">
<em>Oh my <strong>GOD</strong> Bill</em></p>
<h4 id="heading-but-bill-has-got-a-good-point">But Bill has got a good point.</h4>
<p>“Hey, that endpoint actually uses a different model to the other APIs”, Bill mutters, acutely aware of the thunderous look in your eyes. You could be mad at Bill, but the truth is, he was right to stop you. You were about to write some broken-ass code. Is Bill the enemy? No. Your way of working is.</p>
<p>Interruptions are going to happen, especially when you’re building the wrong stuff. The truth is, Bill just saved your bacon. In Dr. Freudenberg’s research, this kind of open communication was welcomed by high performing pairs. It increased knowledge transfer and made for a much more efficient pairing.</p>
<p>So go apologise to Bill. He just saved you a bunch of time and fresh grey hairs.</p>
<h3 id="heading-preserve-context">Preserve Context</h3>
<p>The problem with the previous scenario was the context. Maybe Bill could use some personal boundaries training, but if it wasn’t Bill, you know it’d be Sandra from the Ops department. Bloody Sandra…</p>
<p>That complex clockwork of context in your minds eye is only available in your living room. In the workplace, you’re gonna need to talk and not always on your own terms. Dr. Freudenberg explains that software engineers need to operate at multiple levels of abstraction at the same time, constantly flitting in and out of levels of detail. This creates problems when building up large, complex images in your mind. How do the high performing pairs deal with this?</p>
<h4 id="heading-lists-you-silly-goose">Lists, you silly goose</h4>
<p>The key is to keep focused on what you’re doing. When you find new things, put that down in writing. The items in the list form little flags, reminders of questions and facts you’ve unearthed. This means you can remain focused on the problem at hand and not lose track of the discoveries you’ve made along the way.</p>
<p>The next time James from HR comes in to tell you to stop high fiving strangers in the lobby, your context won’t be obliterated. You might be slowed down for a moment, but glance down at those sweet lists. You’re back in the matrix.</p>
<h4 id="heading-and-one-more-thing-about-lists">And one more thing about lists</h4>
<p>Before you go all sharpie-pro on your checklist, Dr. Freudenberg has one more finding. More often than not, lists are not revisited. They’re written and discarded. It’s essentially just a bit of ephemeral storage for your brain. Don’t worry about neatness. Worry about getting your ideas on to something more permanent than the jelly in your head and protecting the current object of your focus.</p>
<h3 id="heading-share-the-burden-with-tag-team-pairing">Share the burden with tag team pairing.</h3>
<blockquote>
<p>Coffee number seven. This damn test won’t go green, no matter what you try. You decided to swap when it did, so you’ve been driving for well over an hour. You’re tired, your partner is bored and progress has all but stopped. Soon, you’ll go home and drink whiskey like any 90s American action hero.</p>
</blockquote>
<p>We’ve seen this a thousand times. Individuals investing too heavily in the problem and refusing to review their goals. Often it’s pride, sometimes it’s sheer belligerence. To combat this, Dr. Freudenberg found that as well as specified goal points, high performing pairs would “tag” one another in.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/-17UEw01ar9Xn6WdzaiUUroZ6P3nRYZAnu31" alt="Image" width="800" height="457" loading="lazy">
<em>Avoid steroids… but other than that, these guys provide some good pairing role models.</em></p>
<p>This makes intuitive sense, right? In the ring, if S<em>tone Cold Steve Austin</em> is growing tired, you know he is gonna tag <em>The Rock</em> in (my wrestling knowledge is pretty out of date). If you’re running out of juice, it should be a legitimate reason to change drivers. Don’t trip and fall into the death march.</p>
<p>Follow Dr. Freudenberg <a target="_blank" href="https://twitter.com/SalFreudenberg">on Twitter</a>! I do and you should too. Also, the source material for this article (including all relevant academic sources) is available on <a target="_blank" href="https://salfreudenberg.wordpress.com/2013/06/08/pair-programming-and-expertise/">Sal’s wonderful blog</a>.</p>
<p>While you’re at it, <a target="_blank" href="https://twitter.com/chris_cooney">follow me on twitter</a>. I’m regularly blogging about the work of other, smarter people.</p>
 ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
