Partner Work

Collaboration Policies & Setup

Collaboration is highly encouraged in CSE 333 and you are given the option of completing almost every assignment with a partner (exceptions: hw0, hw1, ex1, ex2, midterm, final).

  • For lecture polls, you are highly encouraged to discuss and work through the problems with your neighbor(s). TAs and Chris will be available to answer questions or may come talk to you during the work time. However, each individual student is expected to vote in via Poll Everywhere in order to earn credit.
  • For exercises, one partner will submit to Gradescope and then needs to add the other partner to the submission by clicking the "+ Add Group Member" link. Note that the partnerships apply per submission, so if you resubmit a newer version of the exercise later, you will again need to add your partner to the submission. Note that the first few exercises must be completed individually.

  • For homework, you will pick one of your Gitlab repos to work in. It is this repo that needs to have the appropriate hw<#>-final tag on it. Your hw files will then be uploaded for you from that git commit to Gradescope. You will need to submit to a Google Form for each hw to let us know which repo you want us to upload from and who your partner is so we can add them to the submission.
    • Each partner will be assessed a late penalty, when applicable, as described in the syllabus.

Add Your Partner to Your Repo

  1. Log on to the and navigate to your repo for CSE 333. On the left menu, hover over "Project information" and then click on "Members".
  2. In the "GitLab member or Email address" box, type in your partner's netid and then select the "Maintainer" role.
  3. Click the "Invite" button and you should be ready to go!

Remove a Partner from Your Repo (When Switching)

  1. Log on to the and navigate to your repo for CSE 333. On the left menu, hover over "Project information" and then click on "Members".
  2. Scroll down to find your former partner's name and then click the red trash can button in their row.

Collaboration Tips & Tricks

Working with a partner does not automatically guarantee a smoother and easier workflow! A common misconception is that working with a partner means that your workload get cut in half. This won't be the case, but that's okay! If each of your workloads ends up at less than what it would have been working individually, then that's a win! The main benefits with working with a partner is the ability to discuss your approach and share code without worrying about violating any academic conduct rules. For 333, in particular, some major gains should be in the reduction of debugging time and catching style issues.


Common Approaches

  • Pair Programming: This is the recommended approach (backed by research!) and means that you'll have two eyes on your code at all times as you work. This does mean that both partners need to be available at the same time, but this can be accomplished remotely via Zoom screen share and git commits for switching drivers.
  • Independent Work with Check-ins: The key to this strategy is frequent communication about progress and issues. The communication needs to be of sufficient frequency and quality to gain the benefits of getting two sets of eyes on both of your work and the ability to brainstorm and work through issues together. This communication could happen (in order of most to least recommended) via short meetings (in person or via Zoom), via detailed git commit messages/logs, or via email.
  • Complete Division of Labor: Unfortunately, this is the most commonly adopted approach by students and also the least effective by far. You are putting a lot of trust in your partner to complete their part on their own without any help, but, more importantly, you are also voluntarily giving up your chance to look over their code and to understand/learn from their part of the assignment! Each individual student is responsible for the expected learning gains from every assignment in the course and choosing to skip parts will only hurt you for the exams and later on when those skills might be needed.

Collaboration Tools

  • git: In this course we use git for version control which is very helpful for sharing code and tracking changes made by partners. Find some tips for managing a repository in our .
  • Zoom: Many of us are quite familiar with Zoom at this point, but as a reminder it is a useful application for working together remotely. Along with the ability to share your screen, you can allow your partner to make on-screen annotations as well as remotely control your code editor window.
  • Whiteboard applications: There are a variety of whiteboard applications available that are useful for drawing and sharing things like memory diagrams. Some applications even support concurrent collaboration such as Google Jamboard. It is useful to be able to save or screenshot your drawings so that you can reference them later.
    Staff favorites: Miro, Figma
  • VS Code Live Share: This extention allows multiple users to easily work on the same code base. One user shares their VS Code workspace and the other users can connect to the workspace via a provided link (more detailed instructions in the link above). Live share works on top of the remote-ssh extention but the extention will need to be reinstalled on the remote machine if you plan on working remotely (i.e. attu). It also includes some communication tools but we don't recommend using them, instead just use Discord or Zoom. Connecting to a remote machine and live-sharing requires a significant portion of your machine's resources and a strong internet connection, meaning depending on your machine, it may run slowly or slow down other applications. It's not perfect but by far the best free collaboration software we have used. Note: terminal(s) can be shared via the sidebar menu and keep in mind that if the link doesn't seem to be redirecting you to the designated workspace, restarting your VS Code and joining the session again will most likely solve your problem.

Best Practices

Establish Expectations Early

Clear and frequent communication is vital to the success of working with your partner. Part of this means establishing expectations early, which might take the form of a short conversation/discussion. Potential topics to discuss include work approach, what your schedules and priorities are for the quarter, approaches that have worked for you in the past, comfort level with topics and tools, submission handling, and late day usage. Remember that you're not trying to impress your partner; being realistic will allow you to formulate a plan that will work for both of you. Expectations do not need to be an exhaustive contract between partners, but having some communication before beginning can alleviate later frustrations and misunderstandings.

Read and Discuss the Spec

The assignment specifications for this course can be quite long with lots of information and tools that can be easy to miss. It is recommended to read the specs on your own first, taking notes on key aspects or areas of confusion, and then discuss with your partner. This is useful for checking each other's understanding prior to writing any code and can save time in the long run.

Be Specific in Your Tasks

When establishing tasks for a work session or dividing work among partners, the more specific you can be the better. As opposed to saying your task is to "finish the assignment", try identifying specific functions/files/features you will work on implementing. This can increase efficiency.

Draw Memory Diagrams

Many of the assignments in this class involve memory manipulation. We highly recommend drawing memory diagrams to assist in debugging assignments (see Lecture 3 for an example). When working with a partner, memory diagrams are a useful technique to convey your thoughts and can help illuminate misconceptions or incongruities between your intent and implementation. You will likely be asked to draw these by staff members in office hours, so best to get in the habit!

Check In and Take Breaks

Regardless of the approach you and your partner follow, taking breaks from working can increase your productivity and reduce frustration. With pair programming in particular, checking in with your partner while you work and taking breaks as needed can greatly improve the experience.

Take Notes as You Work

If you are working without your partner present, write down any question or uncertainty that crosses your mind while working on your code so that you don't forget to get it addressed when you next communicate with your partner. This could be on a physical piece of paper, in a digital document, or directly in your code comments (but don't forget to clean up unwanted comments later!).

Share Successes and Failures

Make sure to share both successes and failures that you encounter with your partner so that you both can learn from your individual experiences and can try to avoid running into the same issues in the future.

  • So instead of just saying "oh, I fixed it," take the time to explain what the problem or misconception was and how you fixed it.
  • Similarly, if there was a part of your solution that you found clever or interesting, make sure to share your excitement and tips with your partner.

Come to Office Hours Together

We understand that student schedules are extremely busy and that sometimes it is not feasible for both partners to attend the same office hours. However, we find that partners that attend office hours together are more efficiently helped and often come out with deeper understanding.