How Effective are Pair Programming Tools for one-on-one Collaboration with Students and Colleagues?

Introduction

The practice of pair programming is a software development methodology that involves two programmers working jointly on one workstation to accomplish a shared objective. The two programmers involved in the pairing exercise work together to solve a single problem, with one functioning as the driver whose primary task is to write the code, while the other acts as the observer responsible for proposing potential improvements to the code and thinking strategically about the big picture.

The driver and observer’s roles are often rotated at predetermined intervals to keep the pairing exercise productive and engaging. This periodic rotation of roles is intended to prevent one of the programmers from becoming overly exhausted or unfocused during the task. The benefits of pair programming are to generate well-designed and standardized code while improving productivity, knowledge-sharing, and collaboration among team members. It also facilitates rapid problem-solving and reduces the probability of code errors. Moreover, it allows team members to learn from each other, share expertise and knowledge, and develop better communication skills.

The pandemic forced many software developers to transition to remote work, resulting in the need for technological advancements to facilitate remote software engineering workflows. One such innovation was an extension known as “Live Share,” which was developed specifically for remote pair programming. The following video shows the workflow of the “Live Share” extension.  It also highlights several main features:

Live Share Features

Applying LiveShare to Teaching

Since the process and workflows are very similar, I aim to delve into the effectiveness of utilizing this extension for connecting with students on a one-on-one basis as well as collaborating with colleagues on teaching materials. It is worth noting that these use cases are not the primary focus of the extension. Nevertheless, I am interested in exploring the potential benefits of using the “Live Share” extension in the following scenarios:

Scenario 1: Collaborating with Colleagues

A computer science coach is tasked with helping her computer science teachers create materials for their classes. In order to accomplish this, she uses the “Live Share” extension to work remotely with a teacher to develop and refine class materials in real time. Using this strategy, teachers and coaches can more effectively foresee problems and ensure students have the support they need to succeed.

One of the key benefits of using “Live Share” in this context is the ability to work together on specific problems that students may encounter during class. For example, if there is a coding assignment that many students are struggling with, the teacher and coach can collaborate in real-time to find possible solutions and prepare debugging strategies for anticipated student problems. This can be incredibly valuable, as it allows the teacher to work through issues quickly and efficiently, ensuring that students are able to keep up with the pace of the class.

Scenario 2:

A group of five students in a class are working on a programming assignment, and the teacher monitors their progress remotely while giving live feedback. The teacher uses “Live Share” and connects to her each of her student’s IDEs remotely.  During the live session, the teacher can monitor the progress of each of her students while giving feedback using the chat functionality.  She is also able to help students debug by writing hints into their code whenever they’re stuck.  Furthermore, she is able to insert breakpoints for her students remotely to help them with the debugging process.

By examining the potential advantages and limitations of utilizing the “Live Share” extension in these scenarios, we can gain a deeper understanding of its potential as a tool for enhancing remote teaching and learning in the field of computer science. The following video shows a high-level workflow of a teacher connecting remotely with a student as an observer and engaging in a short lesson:

Remote Teaching with LiveShare on Visual Studio Code

General analysis:

During my two-hour experience with “live share,” I was pleasantly surprised by the tool’s exceptional features that aides in code reviews and debugging. The tool allows multiple programmers to work simultaneously on the same codebase, which proved to be immensely helpful, particularly when dealing with intricate problems. It streamlines the process, making it more efficient and allowing for effective team collaboration. Whether you are working on a problem concurrently with a team member, seeking feedback on your code, or looking for debugging help, this tool will certainly prove to be beneficial.

One standout feature that I came across was the capacity to share a command-line terminal. This feature, among other things, enables remote users to access the local database of the driver, which is extremely useful for troubleshooting issues that may arise during pair programming or mob programming. The real-time collaboration aspect of this feature allowed multiple developers to work together on a data model simultaneously.

Limitations and Final Thoughts

It’s worth mentioning that the extension “live share” was initially created for pair programming. As a result, some of the difficulties I have experienced when using it for teaching may be due to the fact that it was not designed for this specific use case. However, some limitations are still worth discussing when using the app for teaching purposes.

The lack of an integrated voice connection feature can be a challenge. While users can rely on external tools like Zoom, having a built-in audio feature for real-time problem-solving during code reviews or debugging would be more convenient. Although many users have requested that this feature be returned on the extension’s website, there are currently no plans.

Secondly, the observer’s IDE cannot access the driver’s debugger. While this limitation makes sense from a pair programming perspective, it poses a challenge when using the app as a teaching tool since debugging is an important part of teaching new programmers an environment or language.

Finally, setting up the extension requires technical knowledge, which can be difficult for students who lack technical proficiency. It is challenging to differentiate between a local and a production server, particularly when teaching languages or frameworks that involve local servers. Therefore, the app is best suited for teaching relatively simple languages like Python to semi-technical students rather than beginners.

Collaborating on Git!

Introduction

Background and Motivation

Git is the industry-leading version control system that streamlines software development and helps teams collaborate more efficiently. It provides a wide range of features to track changes, manage projects, store code, resolve conflicts, create branches/rollbacks and keep an eye on contributions from each team member. Its excellent performance, security, scalability and many implementations make it the standard version control system today. It also has powerful integrations within modern integrated development tools to help coordinate tasks such as code reviews merging or scheduling efficiently amongst multiple developers.

To my surprise, I discovered that when it comes to the fundamentals of Git, many second-year software engineering students are completely lost. They lack the collaboration skills needed for a successful project and don’t understand how crucial requesting proper merges is with this online tool. Instead of utilizing proper merge requests for documents through Git’s powerful online tooling capabilities, these same students are emailing their work in and waiting for manual merges from leaders, which disregards best practices and overlooks useful commands available at their disposal.

Overview

This project aims to equip second-year post-secondary computing science students with the basic knowledge and confidence necessary for working on team projects with an introduction to Git. Through specific workflows that reflect real-world situations, students will experience how software developers can use Git efficiently, effectively, and ethically when collaborating in a group setting. As most have no prior exposure upon starting their course in Software Engineering at my school – this proposed lesson provides them with an invaluable opportunity before participating in more extensive collaborations later in the course.

ISTE Standards

The exercise is developed to align with the International Society for Technology in Education standards for students.  These standards promote students taking charge of their learning by giving them a voice and encouraging the process to be led by them. This creates an empowering environment in which they can reach new levels of achievement.

ISTE 2 Digital Citizenship

By exploring the Git-suggested workflows, students will gain a valuable understanding of working and collaborating ethically in teams. We’ll ask them to consider their rights as content producers on this platform while respecting its privacy rules, by making sure they use public/private repositories appropriately and only grant necessary access when needed. This is in alignment with ISTE standard 2a. “Students cultivate and manage their digital identity and reputation and are aware of the permanence of their actions in the digital world.”, 2c. “Students demonstrate an understanding of and respect for the rights and obligations of using and sharing intellectual property.” and 2d “Students manage their personal data to maintain digital privacy and security and are aware of data-collection technology used to track their navigation online.”

ISTE 1 Digital Citizenship

By using Git, students have the ability to interact with one another and merge their efforts on a project. This allows them to share feedback within the team and quickly implement it into their development cycle for greater overall productivity. This is in line with ISTE standard 1b. “Students use technology to seek feedback that informs and improves their practice and to demonstrate their learning in a variety of ways,” and 1c, “Students understand the fundamental concepts of technology operations, demonstrate the ability to choose, use and troubleshoot current technologies and are able to transfer their knowledge to explore emerging technologies.”

ISTE 7 Digital Citizenship

Broadly stated, ISTE standard 7 states, “Students use digital tools to broaden their perspectives and enrich their learning by collaborating with others and working effectively in teams locally and globally.” This collaborative exercise will enable students to hone their skills remotely, allowing them to experience working with peers from different backgrounds globally, the exercise centers around this core standard.

Backwards Design

We utilize the backwards design principles to create a successful learning experience (Wiggins & McTighe, 2005). This process involves three distinct stages. Firstly, our goals are aligned with accepted content standards and curriculum expectations to identify desired results. Secondly, acceptable evidence is established in order to validate that these objectives have been achieved, emphasizing knowledge over activities or covered material alone. Finally, we plan instructional experiences and instruction based on what learners need to achieve their goals.

Stage 1 Identify Desired Results

Establish Goals:

There are two main departmental learning outcomes based on this exercise:

  1. (LO1a) Students will be introduced to team processes and cooperative programming and understand their pros and cons.
    • Students will understand the use and workflows of using Git as a collaboration tool.
    • Students will collaborate on a document.
  2. (LO2a) Students will understand how to communicate effectively within a team.
    • Students will decide on a workflow for conflict resolution.

Essential Questions:

The provocative questions that foster student inquiry, understanding and transfer of learning:

  • How can you resolve conflicts or disagreements with a spouse or significant other?
  • Why is it important to communicate in any relationship?
  • Why is it essential to collaborate instead of working alone in a software development setting?

Understandings:

Students will understand

  • The general workflow of Git.
  • Why it is essential to use a collaboration tool in software development.

Knowledge:

Students will know the following:

  • What a Git repository is, and what it’s used for
  • The basics of collaborative development
  • The Git conflict resolution process

Skills:

Students will be able to:

  • Fork a project
  • Push updates to branches
  • Merge branches
  • Create merge requests
  • Communicate with teammates over git

Stage 2 – Assessment Evidence

The following are acceptable evidence of learning. We will assess the following via the six facets of understanding outlined by Wiggins (Ch4). To demonstrate mature understanding, students: can explain, can interpret, can apply, can empathize, have perspective, and have self-knowledge of the concepts.

Performance Tasks: what would be sufficient and revealing evidence of understanding?

  • Students can create a branch for their own work (can apply)
  • Students can create a pull request and communicate via the Git interface with the team. (can apply)
  • Students can fork a project from a Git repository (can apply)
  • Students can add text to a document and push it to a repo on Git (can apply)
  • Students can create a merge request and communicate with others in a team. (perspective)
  • Students can resolve conflicts in a file to make a finalized merged document (perspective, can apply)
  • Students can remove a committed document and erase history (can apply)

Other Evidence Required: What are the types of evidence required by Stage 1 desired results?

Academic Prompts:

  • A merged finalized document on the main development branch: Students will add a short profile about themselves and their development background on a pre-existing document.  They will request to merge their part into the main document and deal with any conflicts. The result is a text document that contains background profiles about each of the members of the team. 
  • Properly merged commit tree on a new Git repository after the assignment. The commit tree on the newly created repository should resemble standard merge practices on Git and have evidence of proper communication between teammates.
  • Students can write proper Git messages to communicate a commit or a merge appropriately (empathy)

Quiz and Test Items:

  • Explain the Git conflict resolution process (can explain)
  • Explain Git branches and when to use them (can explain)
  • Describe forking, merging, rebase, revert, and reset (can explain)

Student Self-assessment

  • Students will reflect on improvements to adopt within their groups for a more complex document (self-knowledge).
  • Justify the current workflow and explain other workflows students could have taken to arrive at the same results (self-knowledge).

Stage 3 – Learning Experiences

These exercises are designed to get creative juices flowing and facilitate collaboration between team members. They provide specific workflows and reflections so students can see the bigger picture. They are assessed through the WHERETO standard (Wiggins, 2005):

  • Where is it going?
  • Hook the students
  • Explorer and Equip
  • Rethink and revise
  • E2xhibit and evaluate
  • Tailor to specific needs
  • Organize for maximum engagement and effectiveness

In the classroom (Optional)

Provide each group with a poster board and have students write a brief paragraph on the poster board highlighting their common interests. Each student should write their programming experience and name on individual pieces of paper. Then, manually combine the individual papers with the poster board to create a single poster representing the group. (W,H,O)

Reflect on the following question: What difficulties might arise if we attempt to concurrently write on the poster board? (R)

Setup

Read 1.3-1.8 in the Pro Git Book (W)

  1. The students will complete a survey about their previous exposure to Git, command line tools, and teamwork. The exercise will begin at a different stage depending on their past experience. (W)
    • Students who lack prior experience will be required to install Git. (T)
    • Students who have some familiarity will need to configure Git. (T)
  2. An experienced student will serve as the repository owner. They will fork (or download) a markdown file for a pre-existing project description template from a repository and transfer it to a new repository accessible by the entire team. (E, T)
  3. Reflect on the following question: What are other ways that step 2 could have been accomplished? What are the advantages and disadvantages of each? (R, E2, O)

Experience 1: Git Basics as an individual developer

Read 2.1-2.5 in the Pro Git Book (W)

  1. Students will create a new markdown file that includes their answers to the self-assessment survey. (H, E, T)
    • They will view the changes that they have not committed yet.
    • They will commit their changes. (E)
  2. Students will practice un-staging a commit and re-staging it. (E, E2)
  3. Students will examine their remote and push their work to the main branch. They will check the main branch on the repo and see the results. (H, O)
  4. Reflect on the following question: What will I do if I have staged a change but want to amend it? What if I have committed a change but want to amend it? (R)
Figure 1: Results of Experience 1 on Git

Experience 2: Git Branching

Read 3.1-3.4 in the Pro Git Book (W)

  1. The students will generate a new working branch and switch to it. (E)
  2. In the shared markdown file, students will insert a section introducing themselves. This section should highlight their strengths, developer background, interests, and sociocultural background. (E, T)
  3. They will then commit and push these changes to their branch. (E, O)
  4. Reflect on the following question: With respect to the classroom exercise, what issues may arise during this phase? What is the definition of “stashing”? (R)
Figure 2: Results of Experience 2 on Git

Experience 3: Merge Request

  1. Students will initiate a merge request. (E)
  2. They will then wait for feedback from other group members, with every member expected to participate. (E)
  3. Finally, they will merge their branch into the main branch. (H, O)
  4. Reflect on the following question: What should you look for when a group member creates a merge request? What type of feedback would be constructive and supportive to the group member? (R, E2)
Figure 3: Result of Experience 3 on Git

Reflection

This backwards design process was a great way to carry out this exercise. Evaluating the facets of understanding made it apparent that most assessment evidence centred around application, which makes sense since learning software is fundamental here. Incorporating an empathetic and reflective component into activities could also encourage students to think strategically about how Git can be used in collaboration and why they should use it as part of their software engineering coursework. Ultimately, my hope is that these exercises will promote better comprehension of using Git for future projects.

Issues with Remote Agile Software Development

Introduction

The Agile methodology is a software development approach that prioritizes flexibility, collaboration, and iterative delivery. It involves breaking down the development process into smaller segments called sprints that typically last 1-4 weeks. The focus is on teamwork, communication, and daily stand-up meetings to keep everyone informed. Agile emphasizes individuals and interactions over processes and tools, making it a popular approach in modern software development (Agile Manifesto, 2001). However, the sudden shift to remote work has impacted the personal nature of this model.

During the COVID-19 pandemic, companies like Google, Tesla, Microsoft, and Twitter implemented remote work policies to protect their employees. As the pandemic subsides, these companies are asking their employees to return partially to in-person work, which has sparked a debate about the advantages and disadvantages of remote versus in-person work arrangements. To investigate the impact of remote work policies on team culture and productivity, several studies have examined various aspects of agile development, including onboarding, client and team dynamics, and work-life balance. Some studies suggest that remote software development can be just as effective as in-person development, while others have found that it can lead to decreased productivity and challenges in communication and collaboration.

In this article, we will discuss these findings in the context of the ISTE standard for students 1.7c: “students contribute constructively to project teams, assuming various roles and responsibilities to work effectively toward a common goal.”

Remote Team Dynamics and Development

Mob (or pair) programming is a collaborative approach to agile software development where a group of developers work together on the same task. One person acts as the driver and writes code on the computer, while the rest of the team acts as navigators and provides input, gives suggestions, and thinks strategically about the future. This approach has many benefits, including improved code quality, increased knowledge sharing, and faster problem-solving. It is considered fundamental to the success of many teams, as it aids in solving complex problems by working together. However, Nolan (2021) found that during the pandemic, there was a significant decrease in pair programming and mob programming activities, which significantly impacted companies with a mob programming culture. Without this collaboration, productivity may remain constant, but it could lead to bug fixes or a more complex redesign of features in a later development stage. This is because mob programming allows a development team to consider the big picture while developing a feature, enabling them to see the forest from the trees.

Scrum is another crucial process in agile software development. It involves short daily meetings held by a team to stay synchronized and on track. While many studies have argued that these meetings have little impact on productivity and meeting deadlines (Miller, 2021; Butler, 2021), other studies have found that distractions during virtual scrum meetings can be problematic. For example, Butt (2021) found that team collaboration decreases as there are fewer discussions about user stories or project complexities, and team members may become distracted by emails during these meetings. This can limit the effectiveness of the agile approach. Additionally, attendance at scrum meetings is decreasing, which can be a significant problem as these meetings are crucial for the team’s synchronicity, development progress, and the long-term success of a project, regardless of progress in other areas.

Team meetings are a valuable learning opportunity, particularly for junior development team members. During these meetings, developers can work together, receive feedback from colleagues, share knowledge and experience, and develop confidence in their abilities (giving them a “seat at the table”). While some aspects of this learning experience can be replicated online, Schwartz et al. (2022) demonstrated that remote meetings result in different cognitive processes than in-person meetings. Specifically, certain brain-behaviour associations arise only during live idea exchanges, indicating that specific neurobiological processes underlie human co-presence and are more beneficial for learning than remote meetings.

A goal of the agile development process is client satisfaction. However, according to a survey by Butt (2021), developers reported a decrease in remote collaboration with customers due to issues such as scheduling conflicts, slow internet speeds, and availability to discuss the project. As a result, most of the feedback from the client was received via email or on story cards. Furthermore, 76% of clients reported dissatisfaction with remote meetings with developers due to delayed project delivery times, increased costs, output not meeting their needs, fewer meetings with developers, and overall lower satisfaction with the work.

Hiring and Onboarding

During the pandemic, tech companies experienced a surge in hiring to meet the demand for developers with work-from-home abilities. To ensure a high-quality candidate experience, the virtual hiring process had to be reworked. To aid in the selection process, companies increased the number of staff involved and added more interviews. The technical interview process, which often involves whiteboarding and other in-person techniques, also had to change to a remote and less desirable setting. Candidates found it challenging to envision the company culture during online interviews, while interviewers struggled to assess non-verbal communication, like body language. Furthermore, candidates with better internet connections tended to be implicitly favoured, as highlighted by Fiechter et al. (2018).

The pandemic has affected how software development teams introduce new hires to their company. Rodeghero et al. (2021) conducted a study on 267 new hires at Microsoft. They found that most were onboarded remotely and never had the chance to meet their colleagues in person, as most meetings were conducted with cameras off. This created a challenge for new hires in building strong social connections with their team and feeling comfortable approaching anyone for help. Additionally, since new developers come from different backgrounds and have different levels of experience, a standard approach to onboarding was found to be ineffective. The researchers suggest that onboarding processes should prioritize team communication, encourage camera use during meetings, assign an onboarding buddy and mentor, support different onboarding speeds, and provide up-to-date documentation on company workflows.

Finally, Team managers can face several challenges when working on new projects with new teams. One such challenge is facilitating effective collaboration and problem-solving among team members. This is particularly true for challenging projects that require creative and innovative solutions. While many remote tools are available for brainstorming and problem-solving, research by Nolan et al. (2021) suggests that initiating new ideas without in-person interaction can be more challenging and may benefit from co-located interaction. When team members are physically located in the same space, it is easier to share ideas, build rapport, and collaborate effectively. They can have unplanned discussions and engage in informal brainstorming sessions.

Work/Life Balance

In a survey conducted by Miller (2021), which included over 2000 software developers, it was found that many developers experienced an increase in scheduled meetings, group member notifications, and ad-hoc meetings, while also experiencing a decrease in the quality of meetings and their ability to collaborate with team members. Despite efforts by numerous teams to use social engagements to support their members, 74% of respondents still reported feeling a lack of social interaction in a work-from-home environment.

According to another study by Bulter et al. (2021) conducted at Microsoft, the impact of remote work varied based on individual roles, characteristics, and sociological factors. Individuals who are visually impaired or communicate through body language face unique challenges with remote communication since it relies heavily on visual cues. Additionally, neurodivergent professionals may prefer to keep their videos off during meetings as specific activities that help them remain stimulated or calm down may be misconstrued or cause distractions for other attendees. The study also found that remote work provided flexibility during the pandemic but blurred the boundary between work and personal life in problematic ways. Non-work distractions increased, while work-related distractions decreased, leading to a sense of social and collaborative isolation for most workers in their study.

Conclusion

Remote agile software development requires different skills and tools than in-person development. Teams must rely on virtual communication tools like video conferencing, instant messaging, and collaborative software platforms to stay connected and productive. This presents several challenges that must be addressed to maintain productivity, quality, and customer satisfaction. Developers and team managers must navigate obstacles such as remote collaboration difficulties, new team onboarding, and the need for social connection and support. Additionally, the impact of remote work on individual workers varies, with factors such as role, characteristics, and sociological factors playing a significant role. Overcoming these challenges requires a multi-faceted approach, including promoting team communication, encouraging social interaction, providing mentorship and support, and adapting the onboarding process to meet individual needs. By addressing these issues, remote agile software development teams can continue to thrive in the face of the ever-evolving challenges of the modern software development environment.

References

Nolan, A., White, R., Soomro, M., Dopamu, B. C., Yilmaz, M., Solan, D., & Clarke, P. (2021). To Work from Home (WFH) or Not to Work from Home? Lessons Learned by Software Engineers During the COVID-19 Pandemic. Communications in Computer and Information Science, 14–33. https://doi.org/10.1007/978-3-030-85521-5_2

Schwartz, L., Levy, J., Endevelt-Shapira, Y., Djalovski, A., Hayut, O., Dumas, G., & Feldman, R. (2022). Technologically-assisted communication attenuates inter-brain synchrony. NeuroImage264, 119677. https://doi.org/10.1016/j.neuroimage.2022.119677

Fiechter, J. L., Fealing, C., Gerrard, R., & Kornell, N. (2018). Audiovisual quality impacts assessments of job candidates in video interviews: Evidence for an AV quality bias. Cognitive Research: Principles and Implications3(1). https://doi.org/10.1186/s41235-018-0139-y

Butt, S. A., Misra, S., Anjum, M. W., & Hassan, S. A. (2021). Agile Project Development Issues During COVID-19. Lecture Notes in Business Information Processing, 59–70. https://doi.org/10.1007/978-3-030-67084-9_4

Agile Manifesto. (2001). Manifesto for Agile Software Development. Agilemanifesto.org. https://agilemanifesto.org/

Miller, C., Rodeghero, P., Storey, M.-A., Ford, D., & Zimmermann, T. (2021). “How Was Your Weekend?” Software Development Teams Working From Home During COVID-19. 2021 IEEE/ACM 43rd International Conference on Software Engineering (ICSE). https://doi.org/10.1109/icse43902.2021.00064

Butler, J., Czerwinski, M., Iqbal, S., Jaffe, S., Nowak, K., Peloquin, E., & Yang, L. (2021). Personal Productivity and Well-being — Chapter 2 of the 2021 New Future of Work Report. ArXiv:2103.02524 [Cs]. https://arxiv.org/abs/2103.02524

Rodeghero, P., Zimmermann, T., Houck, B., & Ford, D. (2021). Please Turn Your Cameras On: Remote Onboarding of Software Developers during a Pandemic. IEEE Xplore. https://doi.org/10.1109/ICSE-SEIP52600.2021.00013