
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?

Why not office hours?

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

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.
- If you feel that way, get help. See Find@Northeastern.
- 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:
- Explain key advantages of working in a team and sharing information with your team
- Describe the stages of team formation and strategies for establishing productive working agreements
- Describe the HRT pillars of social interaction and strategies for resolving team conflicts
- Seek and receive feedback effectively
- Write clear and specific GitHub issues, pull requests, and comments
- 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:
| Actor | A5 Service Responsibility | Group Project GUI Component |
|---|---|---|
| Librarian | Collections, import, search | Library View, Import Interface, Search |
| Cook | Step-by-step navigation | Recipe Details/Editor |
| Planner | Shopping 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"

Brooks' Law

“Adding manpower to a late software project makes it later.”
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?


Why Man-Months are Mythical

Brooks' Law: Communication Overhead Grows Quadratically

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.”
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)

“Engineering is easy. People are hard.”
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.
| Concept | What It Is | Why It Matters |
|---|---|---|
| Issues | Tracking system for bugs and features | Keep track of progress |
| Commits | Snapshots of code | Enables collaboration |
| Continuous Integration (CI) | Automated tests that run on every commit | Catches bugs before they reach users |
| Pull Requests (PRs) | A proposal to merge your changes into the shared codebase | Creates a checkpoint for review |
| Code Review | Teammates read and comment on your code before it's merged | Catches 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:
- Go to login page
- Enter username "testuser"
- Enter password "p@ss#word!"
- Click "Sign In"
- Nothing happens, no error displayed
Expected: Error message or successful login
Environment: Chrome 120, macOS 14.2
See Pawtograder issues.
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

How GitHub Displays Commits

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

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:
- Create a branch for your feature
- Write and commit your code
- Push and open a Pull Request
- CI runs automatically
- Teammates review your code
- Address feedback, update PR
- 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...

What Criticism Can Feel Like

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?

My Experience: The five stages of dealing with a code review
- Disbelief: "How could someone find so much to complain about in my code?!"
- Anger: "How dare someone suggest that a hash-map of hash-maps isn't an efficient way of storing data?"
- 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."
- Depression: "There was so much wrong with my code. How can I show my face to the person who reviewed my code?"
- 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

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

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

Let's see if we can do better...
Tuckman's Stages of Team Formation

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
| Step | Action | Example |
|---|---|---|
| 1 | Establish shared facts | "The build broke at 11 PM. Here's the commit." |
| 2 | Express feelings, not accusations | "I felt stressed when..." not "You always..." |
| 3 | Never presume intent | Assume good faith until proven otherwise |
| 4 | Remain calm | If triggered, step away and return later |
| 5 | Fight forward, not back | Focus on solutions, not blame |
| 6 | Escalate appropriately | Bring 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.
- Say "thank you" before responding — it creates space between reaction and response
- Ask clarifying questions — "Can you give me an example?"
- Reflect before reacting — you don't have to agree immediately, but don't dismiss
- 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
