Introduction to Software Engineering · Chapter 01
Lab-01: Software Development Challenges
Your team forms, agrees how it will work and creates the repository that will hold every lab of the semester. You analyse one real software failure against Brooks's essential difficulties, take a first look at ITC Club Hub (problem statement, stakeholders, five ways the project could fail) and build the smallest C++20 program with CMake. The challenge estimates your team's communication overhead and how to reduce it.
Setup
20 min- Tools (every member). Git, a GitHub account that shows your real name, a C++20 compiler (GCC 13, Clang 17 or Visual Studio 2022 or later) and CMake 3.28 or later. An editor: VS Code with the C/C++ extension, CLion or Visual Studio. Check the versions and set your Git identity to the e-mail address verified on GitHub, otherwise your commits will not be linked to your account.
git --version # 2.40 or later cmake --version # 3.28 or later g++ --version # GCC 13+ (or: clang++ --version, or cl in a VS Developer prompt) git config --global user.name "Chan Dara" git config --global user.email "dara@example.edu" # the e-mail verified on GitHub - Team. Form a team of 4 to 5 students (or use the instructor's list). Sit together, in person or on a call, for Tasks 1 and 4.
- Inputs. Lab-01 is the first lab, so there are no earlier deliverables. It uses only the inputs below and produces the inputs that every later lab reuses (team charter, repository, problem statement, stakeholders, the
clubhubbuild).Input Where What you need from it Fallback if missing Team list Instructor, first class Who is in your team Form a team of 4 to 5 yourselves and tell the teaching assistant (TA) before the end of the class. Product definition Case-study brief (next step) Users, features, business rules, personal data, rhythm, roles Always available; it is the product definition for this course. Failure-case list Task 3 The case your team analyses If the instructor has not assigned one, pick one from the list and tell the TA, so that neighbouring teams differ. Chapter 01 slides Chapter 01 Essential difficulties, n(n-1)/2, cost of change, technical debt, roles, team charter example None needed. - Case-study brief. The box below is the complete product definition for this lab; wherever a step says "the case-study brief", it means this box.
Case-study brief: ITC Club Hub
- Purpose
- An application for the student clubs of the Institute of Technology of Cambodia (ITC): clubs publish events, students register for them, organisers check attendance and administrators see what happens across clubs.
- Users and roles
- Student: browses events, registers, cancels, receives a reminder. Club leader: registers a club and publishes its events. Organiser: checks registered students in at the door and sees attendance. Administrator: approves clubs and sees a monthly activity report across clubs.
- Main features
- Club registration and approval · events with title, date and time, location, capacity and description · browse, register and cancel · reminders · check-in and attendance · monthly activity report.
- Business rules
- Capacity cannot be exceeded (a waiting list is a Should feature) · a student cannot register twice for the same event · cancellation closes 24 hours before the start · events in the past cannot be registered for · only approved clubs can publish events.
- Personal data
- Student ID, name, e-mail, phone (optional), club membership, attendance records.
- What you build
- Analyse and model the full system as a web and mobile application; implement its core in C++20: the domain model, the business rules and a command-line front end, with CSV or JSON file storage. Code in namespace
clubhub; layoutCMakeLists.txt,src/,include/clubhub/, latertests/and.github/workflows/ci.yml. - Team roles
- One Product Owner who liaises with the client (the instructor or a TA plays the client), a Scrum Master who rotates each sprint, the other members Developers. Everyone writes code.
- Rhythm
- 15-week semester: one lab per week in one team repository (
lab01/…lab11/) · midterm in week 8 · Sprint 1 in weeks 9 and 10 · Sprint 2 in weeks 11 and 12 · project submission and demo in week 14 · final exam in week 15.
- Deliverables of this lab. By the end, your repository looks like this (branch
lab-01):clubhub-<team-name>/ ├── README.md # Task 2 (team table, layout, build command) ├── .gitignore # Task 2 (C++ / CMake) ├── LICENSE # Task 2 (placeholder until Lab-03) ├── CMakeLists.txt # Task 5 ├── include/clubhub/banner.hpp # Task 5 ├── src/banner.cpp # Task 5 ├── src/main.cpp # Task 5 └── lab01/ ├── team-charter.md # Task 1 ├── decisions.md # Task 1 (decision log) ├── failure-case-analysis.md # Task 3 ├── problem-statement.md # Task 4 ├── stakeholders.md # Task 4 ├── failure-risks.md # Task 4 ├── README.md # Task 5 (Record what changed) └── communication-overhead.md # Challenge - Conventions. Every Markdown file starts with a title, a version (
v0.1,v1.0) and a date. Commit messages start with the lab and task:Lab-01 task 3: root causes. Commit your own work from your own account; when two people wrote something together, add aCo-authored-by: Name <email>line to the commit message.
Form the team and write a team charter
Easy 45 min · led by a facilitator you chooseGoal
Agree, in writing, who is in the team, which role each member plays, how you work together, which channels you use and how you decide. The charter answers now the questions that otherwise cause conflict in week 10.
Steps
- Choose a facilitator (keeps time, makes sure everyone speaks) and a scribe (writes the file). Choose a short team name without special characters; it appears in the repository name (Task 2) and in the program banner (Task 5).
- Create
lab01/team-charter.mdfrom the starter (write it in a shared editor for now; Task 2 commits it). Fill Members and roles: full name, GitHub username, role for Sprint 1 (exactly one Product Owner, one Scrum Master, the rest Developers) and one shared hat per member from the Chapter 01 roles (business analyst, UX designer, tester, DevOps engineer). Do not write student IDs or phone numbers in the repository. - Write the Scrum Master rotation for Sprint 1 and Sprint 2 (two different people) and state that the Product Owner stays the same all semester.
- Write at least five working agreements that someone could check: a time, a number or an observable action ("every pull request is reviewed by one other member within 24 hours on weekdays", not "we communicate well").
- Fill Communication channels: which channel for chat, for work items (GitHub Issues), for files (the repository) and for meetings, with the expected response time.
- Fill Decision rules for product questions, technical questions and deadlocks, and create
lab01/decisions.mdwith its first entry: the team name decision (date, decision, who decided, alternatives). - Leave the Agreed by list empty: in Task 2 each member adds their own name in their own commit.
Starter template
# Team charter · <team name> (v1.0, 2026-__-__)
## Members and roles
| Member | GitHub | Role (Sprint 1) | Shared hat |
|--------|--------|-----------------|------------|
| | @ | Product Owner | |
| | @ | Scrum Master | |
| | @ | Developer | |
Scrum Master rotation: Sprint 1 = ______, Sprint 2 = ______.
The Product Owner stays the same all semester.
## Working agreements
1. TODO (checkable: a time, a number or an observable action)
2. ...
## Communication channels
| Purpose | Channel | Expected response |
|---------------|------------------|-------------------|
| Chat | | |
| Work items | GitHub Issues | |
| Files | this repository | n/a |
| Meetings | | |
## Decision rules
- Product questions:
- Technical questions:
- Deadlock (no agreement after __ hours):
- Where decisions are recorded: lab01/decisions.md
## Agreed by
<!-- each member adds "- Name, date" in their own commit (Task 2) -->
# Decision log · <team name> (v0.1, 2026-__-__)
| # | Date | Decision | Decided by | Alternatives considered |
|---|------|----------|------------|-------------------------|
| 1 | | Team name "..." | vote 4-1 | ... |
Expected output (excerpt of team-charter.md)
Members and roles: 5 rows, 1 Product Owner (Chan Dara), 1 Scrum Master
(Sok Sokha), 3 Developers; hats: business analysis, testing x2,
DevOps (build, CI), UX sketches.
Scrum Master rotation: Sprint 1 = Sok Sokha, Sprint 2 = Keo Malis.
Working agreements (6), e.g.
3. Every pull request is reviewed by one other member within 24 h
(Mon-Fri); the author merges after approval.
5. Anyone blocked for more than 2 hours posts in the chat.
Decision rules: product -> PO decides after hearing everyone;
technical -> consensus within 24 h, else majority vote;
deadlock -> ask the TA at the next lab session.
- The Product Owner should be someone who enjoys talking to people and can say "not now" to a feature; it is not a boss role. Slide 21 of the chapter lists what each role produces.
- Test each working agreement with the question "how would we notice that someone broke it?". If you cannot answer, make it more concrete.
- Decision rules need a time limit; otherwise "consensus" means the discussion never ends.
- Everyone develops. The shared hats only say who looks after an extra concern (testing, the build, the user experience).
Acceptance checklist
Create the team repository
Easy 45 min · led by the member with the DevOps hatGoal
Create the one repository the team uses all semester, with the agreed layout, and prove that every member can push: each member makes at least one commit from their own account.
Steps
- The DevOps-hat member creates an empty GitHub repository named
clubhub-<team-name>(lowercase, hyphens), with the visibility the instructor asks for, and invites the other members (role Write) and the TA. Leave branch protection off for now; it is switched on when the CI pipeline exists (Chapter 08). - Clone it and create the skeleton on
main:README.mdand.gitignorefrom the starters, aLICENSEfile containing only the placeholder lineAll rights reserved until the team chooses a licence (Lab-03)., and an emptylab01/.gitkeep. CommitLab-01 task 2: repository skeletonand push. - Create the lab branch that will carry all remaining Lab-01 work:
git switch -c lab-01thengit push -u origin lab-01. - The scribe of Task 1 adds
lab01/team-charter.mdandlab01/decisions.mdonlab-01, commits and pushes. - Every other member clones, runs
git switch lab-01andgit pull --rebase, adds their own row to the Team table inREADME.mdand their own line under Agreed by inteam-charter.md, then commits and pushes from their own account. One member at a time, or pull again before pushing. - Check the history:
git shortlog -sn --alllists every member, and on GitHub each commit shows the member's avatar (the e-mail matches their account).
Starter files
# .gitignore for a C++ / CMake project
# build output
build/
out/
cmake-build-*/
CMakeCache.txt
CMakeFiles/
cmake_install.cmake
compile_commands.json
Testing/
# compiled files
*.o
*.obj
*.a
*.lib
*.so
*.dll
*.exe
*.pdb
# editors and operating systems
.vs/
.idea/
*.swp
.DS_Store
Thumbs.db
# ITC Club Hub · Team <team name>
An application for the student clubs of the Institute of Technology of
Cambodia. Course project, Introduction to Software Engineering.
## Team
| Member | GitHub | Role (Sprint 1) |
|--------|--------|-----------------|
<!-- each member adds their own row in their own commit -->
## Repository layout
| Path | Content |
|------|---------|
| `lab01/` ... `lab11/` | Documents of each lab |
| `include/clubhub/` | Public C++ headers (namespace clubhub) |
| `src/` | C++ sources |
| `tests/` | Unit tests (added in a later lab) |
## Build
cmake -S . -B build
cmake --build build
Expected output
$ git shortlog -sn --all
3 Heng Vanna
2 Sok Sokha
1 Chan Dara
1 Keo Malis
1 Lim Piseth
$ git log --oneline --graph --all
* 5c1e9a2 (HEAD -> lab-01, origin/lab-01) Lab-01 task 2: add Lim Piseth to team
* 91b0d4f Lab-01 task 2: add Keo Malis to team
* 7d22e8c Lab-01 task 2: add Chan Dara to team
* 3f0c6b1 Lab-01 task 2: add Sok Sokha to team
* e8a41d7 Lab-01 task 1: team charter and decision log
* 2a7f310 (origin/main, main) Lab-01 task 2: repository skeleton
- GitHub no longer accepts your password for
git push. Usegh auth login(GitHub CLI), a personal access token, or an SSH key. - A commit without your avatar on GitHub was made with an e-mail that is not on your account: fix
git config user.emailfor the next commit, or add that e-mail to your GitHub account. - Two members edited the same README row and the push is rejected:
git pull --rebase, fix the conflict markers,git add README.md,git rebase --continue, push. - If
git statusever showsbuild/as untracked, your.gitignoreis not at the repository root or has a typo.
Acceptance checklist
Analyse a software failure
Medium 75 min · whole team, one section per memberGoal
Analyse one real software failure with a structured template: context, what failed, root causes mapped to Brooks's essential difficulties, and the practices that would have prevented it. You will meet those practices again in later chapters.
Case list (the instructor assigns one per team so that neighbouring teams differ; Ariane 5 is the worked example of the slides and is not on the list):
- Therac-25 radiation therapy machine, 1985-1987
- Mars Climate Orbiter, lost in 1999
- Northeast blackout (United States and Canada), 2003
- Knight Capital trading loss, 2012
- Post Office Horizon accounting system (United Kingdom), 1999 onwards
- Boeing 737 MAX MCAS, 2018-2019
- CrowdStrike Windows outage, 2024
Steps
- Split the sections of
lab01/failure-case-analysis.mdamong the members; each member commits the section they wrote. Collect at least three sources, at least one of them primary (official inquiry report, regulator, or the organisation's own post-incident review), and list them under Sources. - Write Context (organisation, system, users, why it mattered) and a Timeline of 5 to 8 dated events. Keep to facts reported by the sources; no speculation.
- Write What failed: one paragraph on the technical failure, plus the causal chain as a Mermaid
flowchart TDwith at least five nodes, from the first root cause to the final impact (like the Ariane 5 chain on slide 19). - Fill the Root causes table with at least three causes. For each: type (technical, process or organisational), the essential difficulty it shows (complexity, conformity, changeability, invisibility) or accidental, and a one-sentence justification.
- Fill Practices: for every root cause at least one engineering practice that would have prevented or limited the damage, and the chapter of this course that covers it (for example "staged rollout, Chapter 08", "acceptance tests for units, Chapter 09").
- Write two concrete Lessons for ITC Club Hub ("our CSV import rejects a capacity that is not a whole number between 1 and 500", not "we will be careful").
Starter template
# Failure case analysis · <case> (v1.0, 2026-__-__)
Authors: <member per section>
## 1. Context
## 2. Timeline
| Date | Event |
|------|-------|
## 3. What failed
<one paragraph>
```mermaid
flowchart TD
A["root cause"] --> B["..."]
B --> C["..."]
C --> D["..."]
D --> E["impact"]
```
## 4. Root causes
| # | Root cause | Type | Essential difficulty | Why |
|---|------------|------|----------------------|-----|
| R1 | | technical / process / organisational | | |
## 5. Practices that would have prevented or limited it
| Root cause | Practice | Chapter |
|------------|----------|---------|
## 6. Lessons for ITC Club Hub
1.
2.
## 7. Sources
1. <author or organisation, title, year, URL> (primary)
Expected output (format example with Ariane 5, taken from the slides)
flowchart TD A["Ariane 4 alignment code reused unchanged"] --> B["Ariane 5 trajectory: larger horizontal values"] B --> C["float to 16-bit integer conversion overflows"] C --> D["Unhandled exception: both inertial units stop"] D --> E["Diagnostic data read as flight data"] E --> F["Launcher breaks up, self-destructs"]
| R1 | Code reused from Ariane 4 without re-checking its assumptions
| | against the Ariane 5 trajectory | process | changeability |
| | the requirements changed, the code and its analysis did not |
| R2 | Conversion left unprotected to save processor time | technical |
| | complexity | the safety argument depended on a value range
| | nobody recorded as a requirement |
Practices: R1 -> re-validate reused components against new
requirements (Ch 05, Ch 10); R2 -> test with realistic flight data,
handle every conversion error (Ch 09).
- A root cause answers "why?" at least twice: "the software crashed" is a symptom; "an unchecked value from a configuration file" is closer; "no validation step before the update was released" is a root cause.
- Most real failures have an organisational root cause as well (pressure, missing review, alarms ignored). Include one if your sources support it.
- If a cause fits two essential difficulties, pick the one that best explains why the problem was hard to see or prevent, and say why in the last column.
- GitHub renders
```mermaidblocks in Markdown: check the chain on GitHub, not only in your editor. - Write in your own words and cite; copied paragraphs lose points (see the rubric).
Acceptance checklist
First look at ITC Club Hub
Medium 60 min · led by the Product OwnerGoal
Describe the problem ITC Club Hub solves on one page, list who has a stake in it, and name five things that could make this project fail, each linked to a Chapter 01 topic. These three files are the starting point of the requirements work in Chapter 05.
Steps
- The Product Owner talks to the client (the TA) for 10 minutes, or works from the case-study brief if the client is not available, and notes three pains of today's club life (for example: sign-ups in chat groups, overcrowded rooms, no attendance record).
- Write
lab01/problem-statement.md(one page at most): the problem statement sentence, the product vision sentence, the current workaround, and a Scope section with three lists: built in C++ this semester, modelled only (web and mobile screens), out of scope. - Write
lab01/stakeholders.md: a table with at least seven stakeholders or groups (students, club leaders, organisers, administrators, the client, the institute's IT staff, your team, and anyone else you find), each with interest, influence (high, medium, low), what they need from Club Hub and how you will reach them. Mark the three most important with ★. - Write
lab01/failure-risks.md: five ways this project could fail. Link each to a different Chapter 01 topic (essential difficulties, scale and communication, changing requirements and cost of change, reliability, security and safety, legacy, integration and technical debt), and give an early warning sign, a first countermeasure and an owner (a team member). - The Product Owner commits the three files; one other member reviews them and commits at least one improvement (or leaves a review comment on the pull request) so that the review is visible.
Starter templates
# Problem statement · ITC Club Hub (v0.1, 2026-__-__)
## Problem
The problem of ____________________ affects ____________________;
the impact of which is ____________________.
A successful solution would ____________________.
## Vision
For ______ who ______, ITC Club Hub is a ______ that ______.
Unlike ______, our product ______.
## Today's workaround
## Scope
- Built in C++ this semester:
- Modelled only (web and mobile):
- Out of scope:
# Stakeholders · ITC Club Hub (v0.1, 2026-__-__)
| Stakeholder | Interest | Influence | Needs from Club Hub | How we reach them |
|-------------|----------|-----------|---------------------|-------------------|
| ★ Students | | | | |
# Failure risks · ITC Club Hub (v0.1, 2026-__-__)
| # | How the project could fail | Chapter 01 topic | Early warning sign | First countermeasure | Owner |
|---|----------------------------|------------------|--------------------|----------------------|-------|
| F1 | | | | | |
Expected output (excerpt of failure-risks.md)
F2 | Two developers implement "capacity" differently (seats vs.
| registrations) and the rules drift apart
| topic: essential difficulties (invisibility)
| warning: the same rule appears in two places in the code
| countermeasure: one function per business rule + a unit test;
| rules listed in the README | owner: Heng Vanna
F4 | Student e-mails and phone numbers leak through a CSV file
| pushed to a public repository
| topic: reliability, security and safety
| warning: real data files appear in `git status`
| countermeasure: only invented test data in the repo; data/
| in .gitignore | owner: Sok Sokha
- A problem statement describes the situation, not the solution: "club events are announced in many chat groups and nobody knows how many students will come" rather than "we need an app".
- Influence means "can change or stop the project": the administrator who approves clubs has high influence even if they use Club Hub rarely.
- Good failure risks are specific to your team and product. "We might be late" is too vague; "the Sprint 2 demo fails because nobody has run the build on a clean machine" is useful.
- Check scale and communication against your own team size: with 5 members there are 10 paths (slide 9).
Acceptance checklist
The smallest C++ start, and record what changed
Hard 75 min · two Developers in a pairGoal
Create the CMake project that every later lab extends: a library clubhub_core for all code except main(), and an executable clubhub that prints a banner with the version and the team name. Then record what this lab produced in lab01/README.md.
Steps
- Work as a pair: one driver types, one navigator reviews; swap after each file. Both appear in the history: the committer adds
Co-authored-by: Name <email>for the partner. - Create
CMakeLists.txtat the repository root from the starter: projectclubhubversion0.1.0, C++20 required without compiler extensions, libraryclubhub_corewithinclude/as public include directory, executableclubhublinked to it, warnings on (/W4or-Wall -Wextra -Wpedantic). - Create
include/clubhub/banner.hppfrom the starter and setkTeamNameto your team name. - Implement
clubhub::bannerinsrc/banner.cpp: a rule of 40=characters, the lineITC Club Hub v0.1.0(the version comes from CMake throughCLUBHUB_VERSION), the lineTeam: <name>, and the rule again, each line ending in'\n'. Createsrc/main.cppfrom the starter. - Configure, build and run from the repository root. The build must finish with zero warnings, and
git statusmust not showbuild/. - Record what changed: create
lab01/README.mdfrom the starter: the table of this lab's files (file, task, authors), the line Inputs reused from earlier labs: none (first lab), and the change-log row with date, versionv0.1.0, summary and the commit hash of the last Lab-01 commit (git log -1 --format=%h; add it in a final small commit). - Push
lab-01and open the pull request described in Submission.
Starter code
# CMakeLists.txt
cmake_minimum_required(VERSION 3.28)
project(clubhub VERSION 0.1.0 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# Library: all code except main(); later labs link tests to it
add_library(clubhub_core src/banner.cpp)
target_include_directories(clubhub_core PUBLIC include)
target_compile_definitions(clubhub_core
PRIVATE CLUBHUB_VERSION="${PROJECT_VERSION}")
if(MSVC)
target_compile_options(clubhub_core PRIVATE /W4)
else()
target_compile_options(clubhub_core PRIVATE -Wall -Wextra -Wpedantic)
endif()
# Executable: the command-line front end
add_executable(clubhub src/main.cpp)
target_link_libraries(clubhub PRIVATE clubhub_core)
// include/clubhub/banner.hpp
#pragma once
#include <string>
#include <string_view>
namespace clubhub {
// The team name printed at start-up. TODO: your team name.
inline constexpr std::string_view kTeamName = "Angkor Coders";
// Returns the start-up banner, one line per row, ending in '\n'.
[[nodiscard]] std::string banner(std::string_view teamName);
} // namespace clubhub
// src/banner.cpp
#include "clubhub/banner.hpp"
namespace clubhub {
std::string banner(std::string_view teamName) {
const std::string rule(40, '=');
std::string out;
// TODO: rule, " ITC Club Hub v" CLUBHUB_VERSION, " Team: " + teamName,
// rule; every line ends in '\n'
(void)teamName;
return out;
}
} // namespace clubhub
// src/main.cpp
#include <iostream>
#include "clubhub/banner.hpp"
int main() {
std::cout << clubhub::banner(clubhub::kTeamName);
std::cout << "Commands arrive in a later lab. Bye!\n";
return 0;
}
# Lab-01 · Software Development Challenges (v1.0, 2026-__-__)
## Files of this lab
| File | Task | Authors |
|------|------|---------|
| lab01/team-charter.md | 1 | |
| ... | | |
| CMakeLists.txt, include/clubhub/banner.hpp, src/*.cpp | 5 | |
Inputs reused from earlier labs: none (first lab).
## Change log
| Date | Version | Change | Commit |
|------|---------|--------|--------|
| 2026-__-__ | v0.1.0 | Team, repository, failure analysis, problem statement, first build | abc1234 |
Expected output
$ cmake -S . -B build
-- The CXX compiler identification is GNU 13.2.0
-- Configuring done
-- Generating done
$ cmake --build build
[ 50%] Built target clubhub_core
[100%] Built target clubhub
$ ./build/clubhub # Visual Studio generator: build\Debug\clubhub.exe
========================================
ITC Club Hub v0.1.0
Team: Angkor Coders
========================================
Commands arrive in a later lab. Bye!
$ git status --short # nothing from build/ appears
" ITC Club Hub v" CLUBHUB_VERSION "\n"works because the compiler joins adjacent string literals and CMake definesCLUBHUB_VERSIONas the literal"0.1.0".fatal error: clubhub/banner.hpp: No such filemeans the include directory is wrong: it must beinclude, and the header must be ininclude/clubhub/.- On Windows with Visual Studio, the executable lands in
build\Debug\; with Ninja or Makefiles it is directly inbuild/. - Remove the
(void)teamName;line once you use the parameter; it only silences the unused-parameter warning in the starter. - Build once more from a fresh clone in another folder before you submit: it catches files you forgot to commit.
Acceptance checklist
Challenge: communication overhead
Hard 60-90 min · optional, extra creditScenario
Your team will spend the semester talking: to each other, to the client, to the TA. Using the n(n-1)/2 model from the chapter, estimate how much of your weekly time goes into keeping everyone aligned, propose two practices that reduce it, and predict which essential difficulty will hurt your team first.
Requirements
- In
lab01/communication-overhead.md, compute the paths for at least two models: (a) every team member talks to every other member and to the client; (b) only the Product Owner talks to the client. Show the formula and the numbers. - State an assumption for the cost of one path (for example 10 minutes per path per week) and convert both models to hours per week. Compare with the team's weekly lab time (members × hours).
- Draw your team's communication paths as a Mermaid
flowchart LR: one node per member (first names) plus the client, one undirected edge (---) per path of model (b). - Propose two practices that reduce the number of paths or the cost per path (for example a 10-minute stand-up three times a week, GitHub Issues as the single source of truth, module owners). For each: how it works in your team and the estimated overhead after it.
- Compute what adding a sixth member in week 11 would do to model (b), and say in one sentence whether you would accept that offer (Brooks's law).
- Write a reflection of 150 to 250 words: which essential difficulty (complexity, conformity, changeability, invisibility) will your team hit first in ITC Club Hub, with one concrete example from the case-study brief, and what you will do about it in the next four weeks. Every member adds one signed sentence in their own commit.
Skeleton
# Communication overhead · <team name> (v1.0, 2026-__-__)
## Paths
| Model | People n | Paths n(n-1)/2 | Minutes/week | Hours/week |
|-------|----------|----------------|--------------|------------|
| (a) everyone + client | | | | |
| (b) client via PO | | | | |
Assumption: __ minutes per path per week, because ...
Team capacity: __ members × __ h = __ h/week -> overhead = __ %
## Our paths (model b)
```mermaid
flowchart LR
Dara --- Sokha
Dara --- Client
```
## Two practices
1. ... new overhead: __ h/week
2. ...
## A sixth member in week 11?
## Reflection: the essential difficulty we expect first
- (signed) ...
Expected output (team of five, model b)
flowchart LR Dara --- Sokha Dara --- Vanna Dara --- Malis Dara --- Piseth Sokha --- Vanna Sokha --- Malis Sokha --- Piseth Vanna --- Malis Vanna --- Piseth Malis --- Piseth Dara ---|PO only| Client
(a) 5 members + client, all pairs: 6 × 5 / 2 = 15 paths
(b) client only via the PO: 5 × 4 / 2 + 1 = 11 paths
Assumption: 10 min per path per week
(a) 150 min = 2.5 h/week (b) 110 min = 1.8 h/week
Team capacity: 5 × 6 h = 30 h/week -> (b) costs about 6 %
Sixth member in week 11: 6 × 5 / 2 + 1 = 16 paths (+45 %) ...
- The model counts possible paths; a practice such as a stand-up does not remove paths but replaces many short pair conversations with one shared one. Say which effect your practice has.
- Your assumption can be rough, but it must be written down and used consistently in both models.
- For the reflection, look at the business rules in the case-study brief: which of them interact (capacity, waiting list, cancellation deadline)? That is complexity. Which depend on rules made by others (student ID format, institute policies)? That is conformity.
- Mermaid
---draws a line without an arrow;---|label|adds a label on it.
Acceptance checklist
Grading rubric
| Component | Points | Full marks when… |
|---|---|---|
| Task 1 · Team charter | 10 | All members with role and hat, one PO, SM rotation, five or more checkable agreements, channels with response times, decision rules with a time limit, decision log started. |
| Task 2 · Team repository | 15 | Repository with the agreed layout on main, branch lab-01, correct .gitignore, every member's commit linked to their account. |
| Task 3 · Failure case analysis | 20 | Sourced context and timeline, rendered causal chain, three or more root causes mapped to essential difficulties, practices with chapters, two concrete Club Hub lessons. |
| Task 4 · First look at Club Hub | 20 | One-page problem statement with vision and scope, seven or more stakeholders with the top three marked, five specific failure risks linked to five different Chapter 01 topics. |
| Task 5 · Smallest C++ start | 25 | Clean clone builds without warnings, banner shows version and team name, exact layout and namespace, lab01/README.md with files, inputs and change log. |
| Document and code quality | 10 | Every Markdown file has title, version and date; meaningful commit messages; consistent formatting; own words with citations. |
| ★ Challenge (extra credit) | +20 | Both models computed with a stated assumption, correct Mermaid graph, two practices with estimated effect, week-11 answer, reflection signed by every member. |
| Total | 100 (+20) |
lab-01 (individual work must be visible) ·
-10 if clubhub does not build from a fresh clone ·
-5 if build output or binaries are committed ·
-5 for each root cause not mapped to an essential difficulty or without a practice (max -15) ·
-5 for each failure risk not linked to a Chapter 01 topic (max -15) ·
-10 for copied text from a source without citation ·
-5 for real personal data (student IDs, phone numbers) committed to the repository.Submission
- Repository layout on branch
lab-01:clubhub-<team-name>/ ├── README.md ├── .gitignore ├── LICENSE # placeholder until Lab-03 ├── CMakeLists.txt ├── include/clubhub/banner.hpp ├── src/banner.cpp src/main.cpp └── lab01/ ├── team-charter.md decisions.md ├── failure-case-analysis.md ├── problem-statement.md stakeholders.md failure-risks.md ├── README.md # files, inputs reused, change log └── communication-overhead.md # challenge - Self-check from a fresh clone in an empty folder; every command must succeed.
ctestreports that no tests were found until tests are added in a later lab; that is expected.git clone https://github.com/<owner>/clubhub-<team-name>.git check cd check && git switch lab-01 cmake -S . -B build && cmake --build build && ctest --test-dir build ./build/clubhub # Visual Studio generator: build\Debug\clubhub.exe git shortlog -sn # every member appears git status --short # empty: nothing from build/ - Manual checklist: the Mermaid diagrams render on GitHub; every Markdown file has a title, a version and a date;
lab01/README.mdlists every file of this lab. - Open a pull request from
lab-01intomaintitledLab-01 – <team name>. In the description list the members with their roles, the failure case you analysed and a link tolab01/README.md. Merge after the TA's feedback.