Introduction to Software Engineering · Chapter 11

Lab-11: Emerging Trends in Software Engineering

In week 13 your team steps back from building ITC Club Hub and evaluates the technology around it. Each member researches one trend and writes a one-page brief; the team places 8 to 12 technologies on a Club Hub radar, runs one time-boxed proof of concept, and records an adoption decision with a weighted matrix and a decision record. Task 5 turns everything you built in Labs 01 to 10 into the week-14 submission: a report outline, a 10-minute demo script and a project retrospective. The challenge adds a real open-source contribution and a personal learning plan.

Technology radar · PoC · ADR C++20 · CMake · GoogleTest · GitHub Week 13 · prepares the week-14 submission ≈ 10 hours (team) 5 tasks + 1 challenge
How to work through this lab. Do the tasks in order; each builds on the previous. Read the Goal, follow the Steps, compare with the Expected output, and tick the Acceptance checklist (saved in your browser). Open a hint only when stuck for more than 10 minutes. Task 1 is individual work inside the team; commit it under your own name so that your contribution is visible in the Git history.
0

Setup

20 min
  1. Tools. Git and your team repository; a C++20 compiler (GCC 13, Clang 17 or MSVC 2022 or later) with CMake 3.28+; a Markdown editor with Mermaid preview (VS Code with a Mermaid preview extension, or mermaid.live); the GitHub CLI gh (optional, for the metrics in Task 5). Depending on the proof of concept you choose in Task 3: an AI code assistant allowed by the course policy, clang-tidy, a sanitizer-capable compiler (GCC or Clang on Linux, macOS or WSL; MSVC supports /fsanitize=address), an SBOM generator or a text editor for a hand-written SBOM, or a browser with developer tools.
    git checkout main && git pull
    git checkout -b lab-11
    # the project must build and pass its tests before you start
    cmake -S . -B build && cmake --build build && ctest --test-dir build
    mkdir -p lab11/briefs lab11/poc lab11/decisions lab11/submission
  2. Case-study brief. The box below is the product definition for this lab; there is no other product document to read. Wherever a step says "the case-study brief", it means this box.
    Case-study brief: ITC Club Hub
    Purpose
    An application for student clubs at the Institute of Technology of Cambodia. Teams analyse and model the full system as a web and mobile application and implement its core in C++20: domain model, business rules and a command-line front end with CSV or JSON file storage.
    Users
    Club leaders register a club and an administrator approves it · clubs publish events (title, date and time, location, capacity, description) · students browse, register, cancel and receive a reminder · organisers check students in at the door and see attendance · administrators see a monthly activity report across clubs.
    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 · past events cannot be registered for · only approved clubs can publish events.
    Personal data
    Student ID, name, email, phone (optional), club membership, attendance records. None of it may appear in prompts to external tools, in PoC logs or in demo data: use made-up records.
    Code base
    Namespace clubhub; classes Club, Event, Student, Registration, enums ClubStatus and RegistrationStatus, RegistrationService (registerStudent, cancel, checkIn), repository interfaces with CSV implementations. Layout: CMakeLists.txt, src/, include/clubhub/, tests/ (GoogleTest via FetchContent), .github/workflows/ci.yml.
    Rhythm
    Sprint 1 in weeks 9 and 10, Sprint 2 in weeks 11 and 12. This lab: week 13. Project submission and a 10-minute demo in week 14; final exam in week 15. Roles: one Product Owner, a Scrum Master rotating each sprint, the rest Developers.
    Week-14 submission
    The team repository with all lab artifacts, the working increment (a tagged release that builds and passes CI), a short report and a 10-minute demonstration. Individual contribution is checked through the Git history and peer review.
  3. Inputs from earlier labs. This lab uses everything the team built. If one input is incomplete, use the fallback and note it in lab11/README.md; do not stop to repair the earlier lab.
    LabInputUsed inFallback if missing
    01Team charter, roles, repositoryTask 5 (retrospective, contributions)List names and roles at the top of lab11/README.md.
    02Application type, quality attribute scenarios, context diagramTasks 1, 2, 4 (criteria), 5 (report: Problem)CLI core now, web and mobile target; top attributes: usability on phones, availability during check-in, privacy.
    03Privacy review, licence choice, accessibility checklistTasks 1 and 3 (licence, personal data), 5Personal data list from the brief; MIT licence assumed; state it.
    04Process choice and iteration planTask 5 (report: Process)Scrum with two-week sprints as in the brief.
    05SRS, user stories, prioritised backlog, traceability matrixTask 5 (report: Requirements, demo stories)The five business rules and five user groups of the brief.
    06Use case, class, sequence, activity and state diagramsTask 5 (report: Models)Class names from the brief; one state machine for RegistrationStatus.
    07Sprint 1 board, velocity, daily log, review and retrospectiveTask 5 (retrospective metrics)Count closed issues per sprint on the GitHub Projects board.
    08.github/workflows/ci.yml, branch protection, PR reviewsTasks 2, 3 (CI job), 5 (quality evidence)Local build and test commands with their output pasted.
    09Test plan, GoogleTest suites, coverage report, static analysis, bug reportsTasks 3 (uncovered functions), 5 (quality evidence)ctest summary plus a gcovr text summary produced now.
    10Change request, refactoring, release tag, CHANGELOG.md, maintenance planTasks 2 and 5 (report: Release)git tag --list and the last merged PRs.
  4. Deliverable folder. Create these files as you go; every task fills some of them.
    clubhub/                                  # your team repository
    ├── CMakeLists.txt  src/  include/clubhub/  tests/  .github/workflows/ci.yml
    ├── lab01/ … lab10/                       # earlier labs, read-only here
    └── lab11/
        ├── briefs/README.md                  # Task 1: member → trend
        ├── briefs/<trend-slug>.md            # Task 1: one brief per member
        ├── radar.md                          # Task 2: table of 8-12 entries
        ├── radar.mmd  (or radar.svg)         # Task 2: diagram
        ├── poc/README.md                     # Task 3: question, criteria, time-box
        ├── poc/findings-log.md               # Task 3
        ├── poc/…                             # Task 3: artefacts of the chosen option
        ├── decision-matrix.md                # Task 4
        ├── decisions/ADR-011-<slug>.md       # Task 4 (next free number)
        ├── submission/report-outline.md      # Task 5
        ├── submission/demo-script.md         # Task 5
        ├── submission/retrospective.md       # Task 5
        ├── README.md                         # Task 5: record what changed
        ├── oss/contribution-log.md           # Challenge (or contribution-plan.md)
        └── learning-plans/<name>.md         # Challenge: one per member
  5. Conventions. Every Markdown file starts with a title, a version, a date and its author(s). Sources are cited with author or organisation, title, URL, publication date and access date. Any AI use is declared in the file or pull request where it happened. Commit after each step with a message such as Lab-11 task 2: radar entries 1-6.
1

Trend briefs: one page per member

Easy 90 min · individual

Goal

Each member researches one trend from Chapter 11 and writes a one-page brief (what it is, maturity, evidence, risks, relevance to Club Hub) with sources, separating claims from evidence. The briefs feed the radar in Task 2.

Steps

  1. As a team, assign one trend per member without duplicates and record it in lab11/briefs/README.md (table: member, trend, file, reviewer). Choose from: AI code assistants, AI-enabled features (for example natural-language event search), low-code and no-code platforms, serverless functions, microservices versus modular monolith, platform engineering, SBOM and supply chain security, sanitizers and memory-safe languages, green software, progressive web apps (PWA) for Club Hub.
  2. Create lab11/briefs/<trend-slug>.md from the starter (for example sbom.md, ai-code-assistants.md). Keep it to one page: about 400 to 600 words plus the source list.
  3. Fill the five sections: What it is in your own words; Maturity with a suggested radar ring and a hype-cycle position, each with a reason; Evidence as a claims table; Risks and costs including the effect on the quality attributes from Lab-02; Relevance to Club Hub with one concrete use and one reason not to adopt it now.
  4. Find at least three sources, at least one of them primary (official documentation, a standard, a regulation text, a peer-reviewed study, or an engineering report from a named organisation). Record the access date. Vendor marketing and social media posts count as claims, never as evidence.
  5. In the evidence table, label every claim with its source number, source type and your judgement of its strength (strong, medium, weak), with one reason.
  6. Open a pull request for your brief; the reviewer named in briefs/README.md leaves one question and one suggested improvement, and you answer them in a follow-up commit.
  7. Commit under your own name: git commit -m "Lab-11 task 1: brief on SBOM". Check with git log --format="%an %s" -- lab11/briefs that every member appears.

Starter template

# Trend brief: <trend name>
Author: <name> · Reviewer: <name> · Version 1.0 · Date: 2026-11-__

## 1. What it is
(3 to 5 sentences in your own words; no copied definitions)

## 2. Maturity
- Suggested radar ring for Club Hub: Adopt / Trial / Assess / Hold, because ...
- Hype-cycle position (a thinking tool, not a measurement): ..., because ...
- Who uses it in production (named organisations or projects): [n]

## 3. Evidence
| # | Claim | Source | Source type | Strength and why |
|---|-------|--------|-------------|------------------|
| 1 |       | [1]    | standard    | strong: ...      |
| 2 |       | [2]    | vendor page | weak: marketing  |

## 4. Risks and costs
- Security and privacy:
- Money, learning time, lock-in:
- Effect on our quality attributes (Lab-02):

## 5. Relevance to ITC Club Hub
- One concrete use:
- One reason not to adopt it now:

## Sources (accessed 2026-11-__)
1. <author or organisation>, "<title>", <URL>, <publication date>
2.
3.

AI use: none / "used <tool> to summarise source 2; checked against the original"

Expected output (excerpt of a good brief)

## 2. Maturity
- Suggested ring: Assess, because the formats are stable but our C++
  build (FetchContent) is poorly detected by generators [3].
- Hype-cycle position: slope of enlightenment: two formats are
  standardised (SPDX is ISO/IEC 5962:2021 [1]) and regulation now
  refers to SBOMs [2]; the early "an SBOM makes you secure" talk
  has faded.

## 3. Evidence
| # | Claim                                   | Source | Type        | Strength |
|---|-----------------------------------------|--------|-------------|----------|
| 1 | SPDX is an international standard       | [1]    | standard    | strong: primary text |
| 2 | EU law asks manufacturers for an SBOM   | [2]    | regulation  | strong: primary text |
| 3 | "Our tool finds every C++ dependency"   | [4]    | vendor page | weak: our test found 1 of 2 |

Show hints

  • Start at the primary source: the project's own documentation, the standard, or the regulation. Then look for independent experience reports.
  • "Strength" is about the source, not about whether you like the claim: a primary text is strong even when it is inconvenient.
  • If you cannot find anyone using the trend in production, write that down: it is useful evidence for the radar ring.
  • Date every statement about a product ("as of November 2026"): products change quickly.
  • One page means one page. Cut background; keep what helps the team decide.

Acceptance checklist

2

Technology radar for Club Hub

Easy 60 min · whole team, Product Owner signs off

Goal

Build the team's own technology radar: 8 to 12 entries placed in the rings Adopt, Trial, Assess and Hold across four quadrants, each with a one-sentence rationale grounded in your repository or a Task 1 brief, drawn as a Mermaid or SVG diagram.

Steps

  1. Collect candidates in two groups: what you already use (read CMakeLists.txt, .github/workflows/ci.yml, tests/, the Lab-09 static analysis setup) and what the Task 1 briefs propose.
  2. Choose 8 to 12 entries. Place each in one quadrant (Techniques, Tools, Platforms, Languages and frameworks) and one ring. Every ring has at least two entries and every quadrant at least one.
  3. Write the table in lab11/radar.md: number, entry, quadrant, ring, one-sentence rationale, source. The rationale cites evidence ("46 tests green in CI since Sprint 1", "brief sbom.md: generator missed FetchContent dependencies"), not opinion.
  4. Put at least one entry on Hold with a "not now, because" reason, and at least one entry you already use in Adopt.
  5. Draw the radar in lab11/radar.mmd from the starter (one subgraph per ring), or as lab11/radar.svg with concentric rings. The numbers in the diagram match the table.
  6. The Product Owner reviews the rings from the client's point of view and adds a line Reviewed by <PO name>, <date>: <one comment> at the end of radar.md.
  7. Commit: git commit -m "Lab-11 task 2: technology radar v1.0".

Starter

# Technology radar · ITC Club Hub · v1.0 · 2026-11-__
Rings: Adopt = our default · Trial = real but low-risk use, review date
       Assess = study or PoC only · Hold = do not start new work (now)

| # | Entry      | Quadrant                 | Ring  | Rationale (one sentence, evidence) | Source          |
|---|------------|--------------------------|-------|------------------------------------|-----------------|
| 1 | GoogleTest | Languages and frameworks | Adopt | TODO                               | tests/, Lab-09  |
| 2 |            |                          |       |                                    |                 |

Reviewed by <PO name>, <date>: <comment>
%% lab11/radar.mmd: one subgraph per ring, numbers match radar.md
flowchart LR
  subgraph ADOPT["Adopt"]
    A1["1 · GoogleTest"]
  end
  subgraph TRIAL["Trial"]
    T1["TODO"]
  end
  subgraph ASSESS["Assess"]
    S1["TODO"]
  end
  subgraph HOLD["Hold"]
    H1["TODO"]
  end
  ADOPT ~~~ TRIAL ~~~ ASSESS ~~~ HOLD

Expected output (shape only; your entries and reasons will differ)

flowchart LR
  subgraph ADOPT["Adopt"]
    A1["1 · GoogleTest"]
    A2["2 · clang-format"]
  end
  subgraph TRIAL["Trial"]
    T1["4 · ASan in CI"]
    T2["5 · ..."]
  end
  subgraph ASSESS["Assess"]
    S1["7 · SBOM per release"]
    S2["8 · ..."]
  end
  subgraph HOLD["Hold"]
    H1["10 · microservices"]
    H2["11 · ..."]
  end
  ADOPT ~~~ TRIAL ~~~ ASSESS ~~~ HOLD

Show hints

  • A radar is about your project this semester: microservices can be excellent elsewhere and still be Hold for Club Hub.
  • Quadrant choice is debatable (is GitHub Actions a tool or a platform?). Pick one, be consistent, move on.
  • Practices count as entries too: "code review checklist for AI-assisted PRs" is a technique.
  • If an entry has no evidence yet, it probably belongs in Assess.

Acceptance checklist

3

Proof of concept, time-boxed to 4 hours

Medium 4 h time-box · 2 to 3 members

Goal

Answer one question about one trend from your radar's Trial or Assess ring with a small, throwaway experiment on Club Hub. Write the question and success criteria first, stop when the 4 hours are up, and keep a findings log that someone else could repeat.

Choose one option

OptionOutput filesMeasure at least
A. Use an AI assistant to write GoogleTest cases for a function that the Lab-09 coverage report shows as uncovered, and review every suggestion with the chapter's checklisttests/<name>_poc_test.cpp, poc/ai-review.mdsuggestions accepted / edited / rejected, coverage of that file before and after, review minutes
B. Generate (or write) an SBOM for the projectpoc/sbom.cdx.json, poc/sbom-notes.mdcomponents found by the tool vs. by hand, licences identified, time per release
C. Add a sanitizer build option and a clang-tidy profileCMakeLists.txt option, .clang-tidy, CI jobfindings by check, real defects vs. false positives, extra CI minutes
D. PWA mock of the event list (static HTML from exported JSON)poc/pwa/index.html, manifest.webmanifest, sw.js, events.jsonworks offline on two phones (yes/no), page weight in KB, accessibility issues found

Steps

  1. Before any work, commit lab11/poc/README.md with: option, the one question, at least two measurable success criteria, participants, start and end time of the 4-hour box, and what is out of scope.
  2. Create the branch poc/<slug> (for example poc/sanitizers) from lab-11; the PoC code lives there.
  3. Work in short steps and add an entry to lab11/poc/findings-log.md at least every 45 minutes: time, who, what you tried, the result (paste the command and its relevant output), what surprised you, time used.
  4. Option A only: never paste real student data into the assistant; apply the review checklist (understanding, correctness, tests, security, licence) to every suggestion and record the decision per test in poc/ai-review.md; label the PR ai-assisted.
  5. Measure what the success criteria name, with the same method before and after (for example gcovr -r . --filter src/csv_event_repository.cpp).
  6. Stop when the box ends. If you want more time, write an entry "extend by N minutes, because ..." agreed by the team; otherwise conclude with what you have.
  7. Write the conclusion at the end of the log: answer to the question (yes / no / partly), the measured numbers against each criterion, the biggest surprise, and a recommended ring for Task 4. Merge PoC code to lab-11 only if it passes CI; otherwise link the branch.

Starter code

# PoC · <option letter and name> · v1.0 · 2026-11-__
Question: <one question, answerable with yes / no / partly>
Success criteria (decided before starting):
  1. <measurable, e.g. "at least 5 accepted tests">
  2. <measurable, e.g. "coverage of the file +10 points">
Time-box: 4 h · start 2026-11-__ 13:00 · end 17:00
Participants: <names> · Branch: poc/<slug>
Out of scope: <what you will not try>
# Option C: opt-in sanitizer build (GCC and Clang)
option(CLUBHUB_SANITIZE "Build with AddressSanitizer and UBSan" OFF)
if(CLUBHUB_SANITIZE AND NOT MSVC)
  add_compile_options(-fsanitize=address,undefined -fno-omit-frame-pointer)
  add_link_options(-fsanitize=address,undefined)
endif()
# use: cmake -S . -B build-asan -DCLUBHUB_SANITIZE=ON -DCMAKE_BUILD_TYPE=Debug
# Option C: .clang-tidy at the repository root (start small, then widen)
Checks: >
  -*,
  bugprone-*,
  cppcoreguidelines-owning-memory,
  cppcoreguidelines-pro-bounds-pointer-arithmetic,
  modernize-use-nullptr,
  performance-*
HeaderFilterRegex: 'include/clubhub/.*'
WarningsAsErrors: ''
# Findings log · PoC <option>
| Time  | Who | Tried (command) | Result (output excerpt) | Surprise | Used |
|-------|-----|-----------------|-------------------------|----------|------|
| 13:00 |     |                 |                         |          | 0:00 |

## Conclusion (at the end of the box)
Answer: yes / no / partly
Criterion 1: target ... measured ... met / not met
Criterion 2: target ... measured ... met / not met
Biggest surprise:
Recommended ring for Task 4: Adopt / Trial / Assess / Hold

Expected output (excerpt of a findings log, option C)

| 13:40 | Dara  | cmake -DCLUBHUB_SANITIZE=ON ...; ctest  | 1 of 38 tests fails:
|       |       |   heap-use-after-free in CsvEventRepository::findByTitle   |
|       |       | Surprise: the same test passes in the normal build   | 0:40 |
| 14:30 | Sokha | clang-tidy -p build src/*.cpp           | 23 warnings: 17 bugprone-narrowing,
|       |       |   4 owning-memory, 2 performance; 3 are real defects | 0:50 |
...
Criterion 2: extra CI time target <= 3 min, measured 2 min 10 s: met

Show hints

  • A good PoC question is narrow: "Does X do Y for us at cost Z?", not "Is X good?".
  • Option A: pick a function with branches (CSV parsing, cancellation deadline); ask for boundary cases explicitly, and run each generated test against a deliberately broken version to see whether it fails.
  • Option B: a generator may miss libraries pulled by FetchContent; compare its output with the FetchContent_Declare lines in CMakeLists.txt and add what is missing by hand.
  • Option C: run clang-tidy with a compilation database (-DCMAKE_EXPORT_COMPILE_COMMANDS=ON) and start with few checks; a flood of style warnings hides the real ones.
  • Option D: a service worker only runs over http://localhost or HTTPS, not from a file:// URL; use python -m http.server to test.

Acceptance checklist

4

Adoption decision: weighted matrix and decision record

Medium 75 min · Scrum Master facilitates

Goal

Turn the PoC result into a decision the team can defend: compare at least three options with a weighted decision matrix, check how sensitive the result is to the weights, and record the outcome (adopt, trial or hold) with its consequences in a decision record.

Steps

  1. Write the decision question at the top of lab11/decision-matrix.md (for example "How should Club Hub produce its SBOM from now on?").
  2. List at least three options; one of them must be "keep the current way" (or "do nothing").
  3. Choose 4 to 6 criteria (fit to the problem, effort, team skills, risk, cost, maturity, effect on a quality attribute from Lab-02). Agree the weights so that they sum to 100 %, and commit the weights before scoring.
  4. Score every option 1 to 5 per criterion; each score gets a one-line justification that points to evidence (a findings log entry, a brief, a measurement).
  5. Compute each weighted score and show the arithmetic. Then run a sensitivity check: move the largest weight up or down by 10 points (rebalance the others), recompute, and state whether the winner changes.
  6. Write lab11/decisions/ADR-011-<slug>.md (use your next free number): context, options, decision (adopt, trial or hold, and for which scope), at least two positive and two negative consequences, follow-up actions as GitHub issue links, review date. The Product Owner accepts it.
  7. Update the entry's ring and rationale in radar.md and commit: git commit -m "Lab-11 task 4: ADR-011 SBOM in CI (trial)".

Starter templates

# Decision matrix · <question> · v1.0 · 2026-11-__
Weights committed in: <commit hash> (before scoring)

| Criterion | Weight | A: keep current | B: ... | C: ... |
|-----------|--------|-----------------|--------|--------|
|           |   %    |                 |        |        |
| Total     | 100 %  |                 |        |        |

## Justifications
- A / criterion 1: score ... because ... (evidence: poc/findings-log.md 14:30)

## Arithmetic
A = w1×s1 + w2×s2 + ... = ...

## Sensitivity check
Changed <criterion> from ... % to ... %; ... % taken from ...
New scores: A = ..., B = ..., C = ...; winner changes: yes / no
# ADR-011: <title>
Status: proposed / accepted · Date: 2026-11-__ · Deciders: <names>
## Context
## Options considered
## Decision
Adopt / Trial / Hold: ... (scope: ...)
## Consequences
+ ...
+ ...
- ...
- ...
## Follow-up
- [ ] #<issue> ...
Review date: ...

Expected output (excerpt, different question from yours)

Question: How should Club Hub produce its SBOM from now on?
| Criterion               | Weight | A keep: none | B by hand | C tool in CI |
| Fit (finds our deps)    |  35 %  |      1       |     4     |      3       |
| Effort per release      |  25 %  |      5       |     2     |      4       |
| Risk of going stale     |  25 %  |      1       |     2     |      5       |
| Team skills             |  15 %  |      5       |     5     |      3       |
A = 0.35×1 + 0.25×5 + 0.25×1 + 0.15×5 = 0.35 + 1.25 + 0.25 + 0.75 = 2.60
B = ...   C = ...
Sensitivity: fit 35 % → 45 % (effort 25 % → 15 %): winner unchanged
Decision: C, Trial until the week-14 release; hand-check FetchContent deps

Show hints

  • Weights express what matters to the project; agreeing them before scoring stops the team from tuning weights until a favourite wins.
  • Use the same direction for every criterion: 5 is always best (so for risk, 5 means low risk).
  • If two options end within about 0.2 of each other, say so in the ADR: the evidence does not separate them, and other factors (timing, the demo) may decide.
  • "Hold" is a valid, useful outcome. Write down what evidence would change it.

Acceptance checklist

5

Prepare the week-14 submission

Hard 3 h · Product Owner leads the report, Scrum Master the retrospective

Goal

Assemble the team's own work from Labs 01 to 11 into a report outline with evidence, a rehearsed 10-minute demo script and a project retrospective, then record what changed in lab11/README.md. Next week you only write and present; the structure and the evidence are ready.

The report and the demo describe only what your team built, measured and decided. This lab gives structure, not content: do not copy example text from this page, the slides or other teams. Every statement in the outline points to a file, a commit, a tag or a pull request in your repository.

Steps

  1. Report outline in lab11/submission/report-outline.md with seven sections: 1 Problem, 2 Requirements, 3 Models, 4 Process, 5 Quality evidence, 6 Release, 7 Lessons learned. For each section write 3 to 5 key points, the evidence (repository paths plus commit, tag or PR number), an owner and a target length. Every member owns at least one section.
  2. Collect the numbers for section 5 from your repository and paste the commands with their output into the outline: test count, coverage, CI pass rate on main, open and closed defects, release tags.
    ctest --test-dir build | tail -n 3
    gcovr -r . --txt | tail -n 3
    gh run list --branch main --limit 50 --json conclusion \
      --jq 'group_by(.conclusion) | map({(.[0].conclusion): length}) | add'
    gh issue list --label bug --state all --limit 100 --json state --jq 'length'
    git tag --list --sort=-creatordate | head -n 5
  3. Demo script in lab11/submission/demo-script.md: a timed table for exactly 10 minutes (segment, presenter, what the audience sees, exact CLI commands, time). Walk through the main user stories on made-up data: register and approve a club, publish an event, register students until the capacity is reached, a cancellation before and after the 24-hour limit, check-in, the monthly report. Add a data reset step (copy of the demo CSV files) and a backup plan (screen recording or screenshots) in case the live run fails.
  4. Rehearse once with a timer; write the actual time per segment next to the planned one and cut until the total is at most 10:00.
  5. Retrospective in lab11/submission/retrospective.md, facilitated by the current Scrum Master; everyone writes their notes before the meeting. Include: a Mermaid timeline of the project, a metrics table (velocity Sprint 1 and Sprint 2, PRs merged, tests, coverage, CI pass rate, defects), what went well, what did not, start / stop / continue, an individual contribution table (git shortlog -sne main plus each member's own description of their role) and three action items for future projects.
  6. Record what changed: create lab11/README.md with the table of this lab's files, the inputs reused from Labs 01 to 10 with their version, tag or commit (and any fallback you used), and a change-log row. Commit, push and open the pull request.

Starter templates

# Project report outline · ITC Club Hub · <team> · v0.1 · 2026-11-__

| # | Section            | Key points (3-5) | Evidence (path + commit/tag/PR) | Owner | Length | Status |
|---|--------------------|------------------|---------------------------------|-------|--------|--------|
| 1 | Problem            |                  | lab02/..., lab03/...            |       | 1 p    | todo   |
| 2 | Requirements       |                  | lab05/...                       |       | 2 p    | todo   |
| 3 | Models             |                  | lab06/...                       |       | 2 p    | todo   |
| 4 | Process            |                  | lab04/..., lab07/...            |       | 1 p    | todo   |
| 5 | Quality evidence   |                  | lab08/..., lab09/..., CI runs   |       | 2 p    | todo   |
| 6 | Release            |                  | lab10/..., tag v...             |       | 1 p    | todo   |
| 7 | Lessons learned    |                  | submission/retrospective.md     |       | 1 p    | todo   |

## 5. Quality evidence: raw numbers
(paste the commands of step 2 and their output here)
# Demo script · 10 minutes · v0.1
Reset: cp demo-data/*.csv data/     Backup: submission/demo-backup.mp4

| # | Segment                        | Presenter | Command / what is shown | Plan | Actual |
|---|--------------------------------|-----------|-------------------------|------|--------|
| 1 | Problem and team               |           | one slide               | 1:00 |        |
| 2 | Club registered and approved   |           | ./clubhub ...           | 1:00 |        |
| 3 | Event published, capacity full |           |                         | 2:00 |        |
| 4 | Cancellation, 24-hour rule     |           |                         | 1:30 |        |
| 5 | Check-in and monthly report    |           |                         | 1:30 |        |
| 6 | Quality evidence (CI, tests)   |           |                         | 1:30 |        |
| 7 | Technology decision (Lab-11)   |           | radar + ADR             | 1:00 |        |
| 8 | Handover to questions          |           |                         | 0:30 |        |
|   | Total                          |           |                         | 10:00|        |
# Project retrospective · v1.0 · facilitator: <Scrum Master>

## Timeline
(Mermaid timeline: one period per phase, events from your own history)

## Metrics
| Metric | Sprint 1 | Sprint 2 | Source |
|--------|----------|----------|--------|

## Went well / did not go well
## Start / Stop / Continue
## Individual contributions
| Member | Commits (git shortlog) | Main contributions in own words |
## Action items for future projects (3)
# Lab-11 · Emerging trends and submission preparation
| File | Purpose | Author(s) |
|------|---------|-----------|

## Inputs reused
| Input | Version / tag / commit | Fallback used? |
|-------|------------------------|----------------|

## Change log
| Date | Version | Change | By |
|------|---------|--------|----|

Expected output (shape of the retrospective timeline; your periods and events come from your history)

timeline
  title Project timeline (shape only)
  Weeks 1-4 : Charter : Quality scenarios : Privacy review : Process choice
  Weeks 5-8 : SRS and backlog : UML models : Checkpoint 1
  Weeks 9-10 : Sprint 1 : CI pipeline
  Weeks 11-12 : Sprint 2 : Tests and coverage : Release
  Week 13 : Radar and PoC : Submission prep
lab11/README.md, change log row:
| 2026-11-__ | 1.0 | Lab-11: briefs, radar, PoC (option C), ADR-011, report outline,
|            |     | demo script (rehearsed 9:40), retrospective | whole team |

Show hints

  • Walk through lab01/README.md to lab10/README.md first: their file tables are the evidence index for the outline.
  • A demo fails most often on data and set-up, not code: script the reset, and run the demo from a clean clone once.
  • Show one business rule failing on purpose (the capacity limit, the 24-hour cancellation): a rejected action is more convincing than ten successful ones.
  • In the retrospective, discuss events and decisions, not people; the contribution table is factual (commits, PRs, reviews) plus each member's own words.
  • If a number looks bad (CI pass rate 70 %), keep it and explain it in Lessons learned: honest evidence is worth more than a perfect picture.

Acceptance checklist

Challenge: an open-source contribution and a learning plan

Hard 2-4 h · optional, extra credit

Scenario

Club Hub stands on open-source work: GoogleTest, CMake, a JSON library perhaps, Mermaid for your diagrams, the extensions in your editor. Give something back: make one real contribution to a project the team actually uses, or, if that is not possible this week, a detailed and credible plan for one. Then each member writes a personal learning plan for the next courses.

Requirements

  1. Choose a project the team uses and read its README, LICENSE, CONTRIBUTING.md and code of conduct. Note whether it requires a DCO sign-off (git commit -s) or a CLA.
  2. Find a contribution that fits: a documentation fix, a reproduction of an open issue (a minimal CMakeLists.txt and one .cpp file, with exact versions), or a small patch already discussed in an issue. Comment on the issue before you start.
  3. Make it through the normal flow: fork, branch, commit, pull request (or issue comment with the reproduction), following the project's templates. Record everything in lab11/oss/contribution-log.md: links, dates, the maintainers' responses, the status.
  4. If a real contribution is not possible (no suitable issue, a CLA you may not sign, no response in time), write lab11/oss/contribution-plan.md instead: project, issue link, reproduction steps you actually ran with their output, proposed change, the project's requirements, a timeline and who will do it.
  5. Each member writes lab11/learning-plans/<name>.md: three goals for the next six months linked to the Software Engineering and IT Project Management courses, primary resources, one practice project, evidence of progress, and monthly check-in dates with a peer.
  6. Add a short reflection (one paragraph) to the contribution log: what did the project's review process or rules teach you about your own team's process?

Skeleton

# Open-source contribution log · v1.0
Project: <name> (<repository URL>) · Licence: ... · DCO/CLA: ...
Why this project: we use it in <file> since Lab-<NN>

| Date | Action | Link | Response / status |
|------|--------|------|-------------------|
|      | Commented on issue #... to claim it |  |  |
|      | Opened PR #... |  |  |

## Reflection
...
# Learning plan · <name> · 2026-11-__
| Goal (6 months) | Why | Resources (primary) | Practice | Evidence |
|-----------------|-----|---------------------|----------|----------|
| 1.              |     |                     |          |          |
| 2.              |     |                     |          |          |
| 3.              |     |                     |          |          |
Check-ins: end of each month with <peer>

Expected output (excerpt)

| 2026-11-24 | Commented on issue #1234 "build steps outdated on Windows" | ...
| 2026-11-25 | Opened PR #1240: docs, update CMake preset names          | ...
| 2026-11-27 | Maintainer asked to sign off commits (DCO); amended       | review
| 2026-11-29 | Merged                                                    | merged

Show hints

  • Search the project's issues for labels such as "good first issue", "documentation" or "help wanted".
  • Documentation you actually followed this semester is the best target: you know exactly where it was unclear.
  • Never submit AI-generated changes to a project without reading its policy on AI contributions; many projects have one.
  • Maintainers are busy: one clear, small pull request with a good description is far more likely to be merged than a large one.

Acceptance checklist

Grading rubric

ComponentPointsFull marks when…
Task 1 · Trend briefs10One reviewed brief per member, five sections, three or more dated sources incl. a primary one, claims separated from evidence.
Task 2 · Technology radar158 to 12 entries covering all rings and quadrants, evidence-based rationales, a diagram that matches, PO review.
Task 3 · Proof of concept20Question and criteria set first, 4-hour box respected, reproducible measurements, a clear conclusion and recommended ring.
Task 4 · Adoption decision20Three or more options incl. the status quo, weights fixed before scoring, correct arithmetic, sensitivity check, complete ADR, radar updated.
Task 5 · Submission preparation25Evidence-backed outline with owners, rehearsed 10-minute demo script with reset and backup, full retrospective, lab11/README.md.
Documentation quality and Git history10Headers, versions and dates on every file; clear commits; every member's work visible in lab11/.
★ Challenge (extra credit)+20A real, linked open-source contribution (or a credible plan with reproduction), learning plans for every member, reflection.
Total100 (+20)
Automatic deductions: -5 per brief without a primary source or without access dates · -5 per radar entry without a rationale · -10 if the PoC has no findings log, or runs past the time-box without a recorded extension · -5 if the matrix weights do not sum to 100 % or the arithmetic is wrong · -10 if real personal data or secrets appear in prompts, logs, demo data or the repository · -5 if AI-assisted code is merged without the review checklist · -10 if CI is not green on main at submission · -5 per member with no commit in lab11/.

Submission

  1. Repository layout at the end of this lab:
    clubhub/
    ├── CMakeLists.txt  src/  include/clubhub/  tests/  .github/workflows/ci.yml
    ├── lab01/ … lab10/
    └── lab11/
        ├── README.md  radar.md  radar.mmd  decision-matrix.md
        ├── briefs/        README.md + one brief per member
        ├── poc/           README.md  findings-log.md  + option artefacts
        ├── decisions/     ADR-011-<slug>.md
        ├── submission/    report-outline.md  demo-script.md  retrospective.md
        └── oss/  learning-plans/          (challenge)
  2. Self-check from a clean clone before you open the pull request:
    cmake -S . -B build && cmake --build build && ctest --test-dir build
    ls lab11 lab11/briefs lab11/poc lab11/decisions lab11/submission
    git shortlog -sne -- lab11          # every member appears
    grep -rniE "@(student\.)?itc\.edu|password|api[_-]?key" lab11 || echo "no personal data or secrets found"
  3. Branch lab-11, pull request titled Lab-11 – <team name>, reviewed by at least one other member, CI green. Merge before the week-14 submission: the submission is built from main.