Skip to main content
Pixel art lecture cover divided into three sections. Left 'The Solo Myth': overwhelmed developer with stack of hats on head, surrounded by thought bubbles asking about Frontend, Backend, Security, Testing, Ops, Design, with crossed-out '10x Engineer Myth' label and ~1000 lines indicator. Center 'Building Bridges': diverse team of five sitting around table with two pizzas (two-pizza rule reference), Grace Hopper with basketball icon, others with brain/neuron, DNA helix, and gear icons, speech bubbles saying 'Have you considered...?', 'I can help with that!', 'What if we...?', 'Let's pair on this!', complexity formula n(n-1)/2 above, golden communication threads connecting team members. Right 'Scale and Success': top shows autonomous vehicle with cross-disciplinary experts (wrench/mechanical, brain/AI, robot icons) and ~10M+ lines indicator, middle layer shows wiki book, magnifying glass, PR reviews checklist, chat bubbles, bottom shows four small diverse teams in teal/orange/purple/blue boxes, foundation displays 'HRT: Humility, Respect, Trust' with Team Contract document. Bottom tagline: 'No One Builds Alone.'

CS 3100: Program Design and Implementation II

Lecture 22: Teams & Collaboration

©2026 Jonathan Bell & Ellen Spertus, CC-BY-SA

Highlights of Survey Results

How are you feeling about CS 3100?

Bar chart showing responses to 'Q1: How are you feeling about CS 3100?' (select all that apply), from 295 respondents. The most common response was 'Like I'm keeping up but not sure I understand everything deeply' (174), followed by 'Worried I'm falling behind' (113), 'Engaged and challenged in a good way' (100), 'Overwhelmed' (96), 'Frustrated with the difficulty' (70), 'Like I'm learning a lot' (61), 'Confident in my understanding' (52), and 'Bored / under-challenged' (22).

Why not office hours?

Bar chart showing responses to 'Q7: Why not office hours?' among those who rarely or never attend (select all that apply). The most common reason was 'I used AI tools instead and they were sufficient' (109), followed by 'I didn't need help' (81), 'The times didn't work for my schedule' (80), 'I felt intimidated or uncomfortable asking for help' (75), 'By the time I realized I needed help, it felt too late' (74), 'I wasn't sure if my question was worth asking' (73), 'I tried once and it wasn't helpful' (37), 'Other' (17), and 'I didn't know office hours were available / didn't know how to join' (7).

Asking for help is an important skill and being wrong is okay

  • It's natural to feel reluctant to ask questions, but...
  • You will need to ask questions to succeed at your co-ops.
  • It's also vital if you are doing research.
  • Ask yourself what you think of people who ask questions or make mistakes.

One of my (many) recent mistakes

Screenshot of a Discord conversation. Ellen Spertus posts at 6:54 PM on 2/22/2026: 'I'm not able to get Copilot working in VSCode, even though I can see on GitHub that I have Copilot Pro.
I verified that I'm logged into that GitHub account in VSCode. I see GitHub Copilot Chat in my output pane, and I've installed the GitHub Copilot Chat extension. I see 'GitHub Copilot Chat' as
an option in the Output pane, but when I try chatting, the LLM choices do not include Copilot.' A nested thread labeled 'Copilot in VSCode, 5 Messages' is shown. Amit Shesh replies at 7:01 PM:
'Copilot is the tool. My understanding is that the model is not Copilot, but things like GPT.' Ellen Spertus replies at 7:01 PM: 'Oh! Thank you!'

Exercise: Tell someone you don't understand something

  • "I have no idea what Prof. Spertus is talking about half the time."
  • "I spent a whole lecture wondering why Ellen was talking about some guy named Jason."
  • Now it's your turn. Your confession doesn't have to be true.



Credit for exercise: Prof. Judy Goldsmith, University of Kentucky

Concerning responses

  • Two Boston students said this class sometimes makes them want to die.
  • Getting good grades or a job does not cure depression.

  • An Oakland student wrote: "I feel like the teacher isn't understanding and blames any lack of knowledge on yourself instead of her teaching."
  • Thank you for sharing your feelings.
  • That is not how I feel about students.
  • I am sorry for giving you that impression and hope you will give me another chance.

Learning Objectives

After this lecture, you will be able to:

  1. Explain key advantages of working in a team and sharing information with your team
  2. Describe the stages of team formation and strategies for establishing productive working agreements
  3. Describe the HRT pillars of social interaction and strategies for resolving team conflicts
  4. Seek and receive feedback effectively
  5. Write clear and specific GitHub issues, pull requests, and comments
  6. Ask technical questions effectively

The Question This Lecture Answers

Team projects rarely fail because of technical skill. They fail because of collaboration.

Today you'll learn:

  • The principles that make collaboration work (HRT, scalable knowledge)
  • The practices that professional teams use (CI, PRs, code review, issues)
  • The agreements that prevent conflicts (team charters, shared expectations)

These separate teams that ship from teams that implode.

Looking Ahead

  • Midterm

    • Practice midterm distributed today
    • In-class review, next Monday
    • Exam, next Wednesday, March 18
  • Assignment 5

  • Group project

Introducing A5: Designing Services for Your Team (Individual Assignment)

A4's RecipeService bundled everything into one interface—scaling, conversion, import, search. That was intentionally problematic. A5 asks you to fix it by designing services aligned with actors:

ActorA5 Service ResponsibilityGroup Project GUI Component
LibrarianCollections, import, searchLibrary View, Import Interface, Search
CookStep-by-step navigationRecipe Details/Editor
PlannerShopping lists, scaling, export(Feature Buffet options)

Same architecture, CLI → GUI: Your A5 services become the foundation for the group project. Each teammate's GUI component consumes specific services—clean boundaries = parallel work without conflicts.

I will discuss on Wednesday how to approach the assignment. I recommend reading it before then.

Team Project: CookYourBooks GUI

You've met your team. Here's what you'll build together:

What you're building:

  • Full JavaFX GUI for CookYourBooks
  • Each team member owns one core feature:
    • Library View (browse cookbooks)
    • Recipe Details/Editor
    • Import Interface (OCR integration)
    • Search & Filter
  • Plus shared infrastructure and "Feature Buffet" extras

The timeline:

  • Now:
    • Team Charter (due Friday, March 13)
    • Final individual assignment (due Thursday, March 19)
  • March 26: Design Sprint (wireframes, personas)
  • April 9: Checkpoint 1 (core features)
  • April 16: Checkpoint 2 (Feature Buffet)
  • April 20: Final submission

The structure:

  • One spec, released upfront
  • Incremental delivery required
  • Code review on all PRs

This lecture: The principles, practices, and agreements you need to succeed.

The Myth of the "10x Engineer"

Left: an exhausted lone 'superhero' programmer juggling architecture, UX, testing, deployment, and support tickets simultaneously, dropping most of them. Right: a calm team of 5, each handling one area expertly. A red X crosses out '10x' over the hero; a green checkmark appears over the team.

Brooks' Law

Fred Brooks
Adding manpower to a late software project makes it later.
Fred Brooks

David.Monniaux CC BY-SA 3.0

Fred Brooks managed the development of IBM's System/360 computers and wrote The Mythical Man-Month (1975) to share what he learned about large software projects.

Poll: Why do you think adding staff to a late software project makes it later?

Cover of The Mythical Man-Month by Frederick P. Brooks, Jr.
Poll Everywhere QR Code or Logo

Why Man-Months are Mythical

Dilbert comic strip: Boss asks 'How long will your project take if I add two people?' Engineer responds 'Add one month for training, one month for extra complexity, and one month to deal with their drama.' Boss says 'But after all that...' Engineer finishes 'They'll be as useful as this meeting.'

Brooks' Law: Communication Overhead Grows Quadratically

Four panels showing communication paths growing quadratically: 2 people with 1 path (clean), 4 people with 6 paths (busy), 8 people with 28 paths (tangled web), 16 people with 120 paths (total chaos).

Amazon has the two-pizza rule: Teams should be small enough (5-8 people) to be fed by two large pizzas.

Conway's Law: Teams Shape Architecture

Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations.
Melvin Conway, 1967

Translation: Your software's architecture will mirror your team's structure—whether you plan for it or not.

Example: Three teams working on one app → three separate services that need integration

Inverse Conway: Design the team structure you want to match the architecture you need

Debugging Teams (HRT)

Cover of the book 'Debugging Teams: Better Production Through Collaboration' by Brian Fitzpatrick and Ben Collins-Sussman
Engineering is easy. People are hard.
Bill Coughran, former SVP of Engineering at Google

The authors (Google engineers) present a strategy with three pillars:

  • Humility
  • Respect
  • Trust

Pillar 1: Humility

You are not the center of the universe (nor is your code!). You're neither omniscient nor infallible. You're open to self-improvement.

Without Humility:

  • "I'm never wrong about code."
  • "I don't need to ask—I'll figure it out myself."
  • Refusing to acknowledge bugs you introduced
  • Taking criticism of code as personal attacks

With Humility:

  • "My mistake—let me fix it."
  • "I don't know, but I'll learn."
  • Accepting that your code can be improved
  • Being willing to change your mind

Humility isn't self-deprecation—it's honest self-assessment and openness to growth.

Pillar 2: Respect

You genuinely care about others you work with. You treat them kindly and appreciate their abilities and accomplishments.

Without Respect:

  • Ignoring teammates when they speak
  • Taking credit for others' ideas
  • Dismissing suggestions without consideration
  • "Whatever..." or "That's a dumb idea."

With Respect:

  • Listening to understand, not just to respond
  • "Great idea, Sarah!" — giving credit
  • Assuming competence and good intentions
  • Valuing contributions different from yours

Respect isn't just politeness—it's treating teammates as capable and valuable colleagues.

Pillar 3: Trust

You believe others are competent and will do the right thing. You're OK with letting them drive when appropriate.

Without Trust:

  • Hovering over teammates, checking every keystroke
  • Rewriting others' code without discussing it
  • Requiring approval for every small decision
  • "Let me just do it myself—it'll be faster."

With Trust:

  • Delegating without micromanaging
  • Giving space to make (and learn from) mistakes
  • Discussing before rewriting someone's work
  • Trusting teammates to ask for help when needed

Trust isn't blind faith—it's giving people the benefit of the doubt and room to grow.

HRT in Practice: All Three Together

Humility

  • Admit when you don't know something
  • Accept that your code can be improved
  • Be willing to change your mind
  • Recognize others' valuable perspectives

Respect

  • Give credit where it's due
  • Listen to understand, not just to respond
  • Assume competence and good intentions
  • Value contributions different from yours

Trust

  • Delegate without micromanaging
  • Give space to make and learn from mistakes
  • Don't rewrite others' code without discussion
  • Trust teammates to ask for help when needed

⚠️ Not everyone who talks the talk walks the walk.

How Professional Teams Ship Code

Modern software teams don't just write code—they have processes to keep the codebase healthy.

ConceptWhat It IsWhy It Matters
IssuesTracking system for bugs and featuresKeep track of progress
CommitsSnapshots of codeEnables collaboration
Continuous Integration (CI)Automated tests that run on every commitCatches bugs before they reach users
Pull Requests (PRs)A proposal to merge your changes into the shared codebaseCreates a checkpoint for review
Code ReviewTeammates read and comment on your code before it's mergedCatches issues, shares knowledge

You'll use all these in your group projects. Let's understand each one.

Anatomy of a Good GitHub Issue

Bad issue

Title: "Unable to login"

Body: "It doesn't work. Please fix."

Good issue

Title: "Login fails silently when password contains special characters"

Body:

  1. Go to login page
  2. Enter username "testuser"
  3. Enter password "p@ss#word!"
  4. Click "Sign In"
  5. Nothing happens, no error displayed

Expected: Error message or successful login

Environment: Chrome 120, macOS 14.2

Commits: Saving and Sharing Your Work

Version control lets teammates work on the same codebase simultaneously—without overwriting each other's changes.

What is a commit?

  • The unit of change in Git
  • A snapshot of your work at a point in time
  • Ideally represents one logical change
  • Includes a message describing what and why—make it meaningful:
    • fix bug
    • WIP
    • Add regex validation for password special characters
    • Display error toast when login validation fails
    • Fix silent login failure #106

Include issue numbers for mutual links.

Keep the first line of the commit message brief (≤50 chars) for display on GitHub.

How GitHub Displays Commit Messages

Screenshot of main github page for a repo with commit messages to the right of folder names.
These include the folder '.github/workflows' and message 'Add canvas sync' and
the folder 'assignments' with the message 'Note bug in handout test'

How GitHub Displays Commits

Screenshot of cs3100-public-resources commit 773e455, showing a change to line 631 of a lecture

Continuous Integration (CI)

You've been using CI all semester—the autograder that runs when you push code.

What CI does:

  • Runs automatically when code is pushed
  • Compiles the code
  • Runs all tests
  • Reports pass/fail status

In professional teams:

  • CI runs on every Pull Request
  • Code can't be merged if CI fails
  • "The build" = CI passing
  • "Breaking the build" = your change caused CI to fail

When the build is broken, nobody on the team can merge their work until it's fixed.

That's why it's best to work on a branch...

Git Branching: Working in Parallel

Git branching diagram: Green 'main' branch timeline with commits. Blue 'feature-search' splits off early, adds commits, merges back. Purple 'fix-login-bug' splits off later from a more recent point on main, merges after. Side callout explains merge conflicts.

Pull Requests: The Gateway to Shared Code

A Pull Request (PR) is a formal proposal: "I'd like to merge these changes into our shared codebase."

The workflow:

  1. Create a branch for your feature
  2. Write and commit your code
  3. Push and open a Pull Request
  4. CI runs automatically
  5. Teammates review your code
  6. Address feedback, update PR
  7. Once approved + CI passes → merge

Why not just commit to main?

  • Protects the shared codebase
  • Creates a review checkpoint
  • CI catches issues before merge
  • Discussion happens in one place
  • Easy to revert if needed

You can look at Pawtograder PRs

Code Review: Teammates Read Your Code

Before your PR is merged, teammates read your changes and leave comments.

What reviewers look for:

  • Does the code work correctly?
  • Is it readable and maintainable?
  • Does it follow team conventions?
  • Are there edge cases not handled?
  • Are there tests?

Why teams do this:

  • Catch bugs before they reach users
  • Share knowledge across the team
  • Maintain quality and consistency
  • Mentor junior developers
  • Document design decisions

Poll: What do you want to hear from someone who reviews your code?

A. This code is perfect!
B. You should make all these changes...

A three-panel webcomic titled 'Hackles' by Drake Emko and Jen Brodzik. In the first panel, a
brown anthropomorphic dog sits at a computer thinking about finally finishing some code, imagining
it will earn appreciation for being a masterful example of recursion and elegance. In the second
panel, the dog is surrounded by admiring anthropomorphic coworkers — a fox, a rabbit, and a large
grey dog — who call the coder a genius, a hero, and award a medal for exemplary coding skills. In
the third panel, the fantasy ends as a pink pig leans over and sarcastically asks if the coder is
done yet, saying it is about time the stupid code was finished. The brown dog thinks 'Back to reality...'

What Criticism Can Feel Like

ASCIIVille by Todd Presta cartoon with title 'The Peer Code Review'.
A terrified person is strapped to a round board with knives being thrown at him.

Revised poll

What do you want to hear from someone who reviews your code?

Would you like to be a better programmer today than you were yesterday?

Would you like your mistakes to be caught early?

Who makes mistakes?

Meme with Bell Curve template in which the low IQ person, crying average IQ person,
and high IQ person all say 'I make mistakes'

My Experience: The five stages of dealing with a code review

  1. Disbelief: "How could someone find so much to complain about in my code?!"
  2. Anger: "How dare someone suggest that a hash-map of hash-maps isn't an efficient way of storing data?"
  3. Bargaining: "Maybe if I add the comments the reviewer requested in one file, I won't have to fix the tricky Unicode issues in another."
  4. Depression: "There was so much wrong with my code. How can I show my face to the person who reviewed my code?"
  5. Acceptance: "Wow, my code is a lot better due to the feedback. This is a useful process, although I bet it's occasionally painful for everyone."

Remember: You Are Not Your Code

A cartoon communicating the message that you are not your code.
In the middle is the not-equals sign (!=).
On the left is a framed picture labeled 'YOU'.
On the right is a framed picture labeled 'YOUR CODE'.

Source: Brian W. Fitzpatrick and Ben Collins-Sussman BY-NC-SA 3.0

The Underlying Message

The top half of the meme has caption 'code is good' and shows Pedro Pascal pointing with a serious expression.
The bottom half has the caption 'but it can be better' and shows Pedro Pascal with his hand outstretched and a friendly expression

Applying HRT to Code Review

❌ Without HRT
✅ With HRT
"This is wrong. Use a HashMap instead."
"Have you considered a HashMap? It gives us O(1) lookups instead of O(n)."
"Why would you do it this way?"
"I'm curious about this approach—what led you to this design?"
"This whole function needs to be rewritten."
"I'm having trouble following this function. Could we pair on simplifying it?"
(silence)
"Nice refactor on the error handling!"

Same technical goals. The HRT version treats the author as a capable colleague, not a subordinate to be corrected.

Team Dynamics

Two pie charts comparing group project lessons.
Left chart titled 'What group projects are supposed to teach you'
shows roughly equal slices for Communication, Responsibility, Collaboration,
and Teamwork. Right chart titled 'What group projects actually teach you'
shows one massive dark slice labeled 'Trust no one' taking up approximately
85% of the pie, with tiny slivers for Communication, Responsibility,
Collaboration, and Teamwork. Credit: endlessorigami.com

Let's see if we can do better...

Tuckman's Stages of Team Formation

Four stages of team formation as a journey: Forming (blue, polite strangers with name tags), Storming (red, arguing with lightning bolts, marked NECESSARY), Norming (yellow, team around agreement document with rainbow), Performing (green, team working smoothly as meshing gears with star/trophy).

Conflict is normal and part of the process.

Team Charters Accelerate Norming

Explicitly discuss and document expectations before conflicts arise:

  • When are we available to work together?
  • How do we prefer to communicate?
  • How do we handle deadlines?
  • What does "done" mean for our work?
  • How will we divide work and make decisions?
  • What do we do when someone is blocked?

Example conflict prevented: A team member who starts work early and one who works best under deadline pressure can negotiate expectations upfront—rather than discovering the mismatch mid-project.

For this class: Your team charter is live now—it's your first team deliverable.

Your First Team Deliverable: The Team Charter

This is not a formality—it's the foundation for everything that follows.

What you'll establish:

  • Communication norms (when, where, how)
  • Working hours and availability
  • How you'll divide work
  • How you'll make decisions
  • What "done" means for your team
  • How you'll handle missed deadlines

Why it matters:

  • Surfaces conflicts before they happen
  • Creates shared expectations to reference
  • Accelerates your team through "storming"
  • Gives you something to point to when things go wrong

Completing Your Team Charter (due: Friday, March 13)

Step 1: Schedule a team meeting this week

  • Everyone should be present for this conversation
  • Don't just divide up sections and merge—discuss together

Step 2: Have the awkward conversations

  • "What hours do you actually work?" (not what sounds good)
  • "What happens if someone misses a deadline?"
  • "How do we decide when we disagree?"

Step 3: Be specific, not aspirational

  • ❌ "We'll communicate regularly"
  • ✓ "We'll post daily updates in Discord by 9 PM"

HRT in action: Approach this with humility ("my preferences aren't the only valid ones"), respect ("everyone's constraints matter"), and trust ("we'll all follow what we agree to").

Conflict Resolution: Six Steps

StepActionExample
1Establish shared facts"The build broke at 11 PM. Here's the commit."
2Express feelings, not accusations"I felt stressed when..." not "You always..."
3Never presume intentAssume good faith until proven otherwise
4Remain calmIf triggered, step away and return later
5Fight forward, not backFocus on solutions, not blame
6Escalate appropriatelyBring in a neutral third party if stuck

Accountability: Be Someone Your Team Can Rely On

  • Own your commitments: If you say you'll do something, do it—or communicate early if you can't. Don't wait until the deadline.
  • Take responsibility for outcomes, not just effort: "I worked hard on it" isn't the same as "it's done and working."
  • Support team outcomes: If a teammate is struggling, offer help before being asked. The team succeeds or fails together.

Accountability builds trust. When teammates can count on you, the whole team moves faster.

🤔 How did my admitting mistakes and apologizing change your opinion of me?

Receiving Feedback Without Defensiveness

Your instinct may be to explain, defend, or minimize. Resist.

  1. Say "thank you" before responding — it creates space between reaction and response
  2. Ask clarifying questions — "Can you give me an example?"
  3. Reflect before reacting — you don't have to agree immediately, but don't dismiss
  4. Follow up — tell them what you changed. It encourages future feedback.

The discomfort is the point. If all feedback feels good, you're only hearing from people who tell you what you want to hear.

Key Takeaways: What Separates Teams That Ship

Team projects rarely fail because of technical skill—they fail because of collaboration. Here's what makes the difference:

Principles

  • HRT: Humility, Respect, Trust
  • The discomfort of feedback is the point
  • We hold you accountable to these

Practices

  • CI catches bugs before they spread
  • PRs create review checkpoints
  • Issues and code review share knowledge
  • Scalable communication beats O(n²)

Agreements

  • Team charters accelerate norming
  • Your first deliverable isn't code—it's alignment
  • Fight forward, not back

Your first deliverable: The team charter is due March 13. Apply these principles this week with your new team.

Bonus Slide

Four-frame Work Chronicles cartoon with 2 characters: a person standing and a person sitting at a laptop (Bob).
Frame 1: Person 1: Bob, all your commit messages say 'small changes'!
Frame 2: Person 1: Next time, please write a meaningful commit message.
Frame 3: Bob looks around thoughtfully with the phrase 'meaningful message...' repeated around his head.
Frame 4: Bob types: git commit -m 'What if life is full of care. If we have no time to stand and stare...
URL: workchronicles.com