Skip to content

Lab Template

Copy this structure into docs/labs/lab-NN-slug.md and replace the bracketed placeholders.

Lab numbers are programme-wide, not per module. A new lab takes the next free number, whatever module it belongs to, and is linked from its module's overview page.

# Lab NN — [Lab title]

!!! info "At a glance"
    - **Modules:** [NN — Module name](../course-content/NN-module/index.md)
    - **Level:** [Beginner | Intermediate | Advanced]
    - **Estimated time:** [NN–NN minutes]
    - **Deliverable:** [The single artefact the student hands in]
    - **Template:** [Template name](../templates/template.md) *(or `none — [reason]` where the library does not cover the artefact; never omit the line)*
    - **Answer key:** [Beginner|Intermediate|Advanced labs answer key](../instructor/answer-keys/[level]-labs-answer-key.md)

## Learning objectives

By the end of this lab you should be able to:

1. [Observable skill]
2. [Observable skill]
3. [Observable skill]

## Scenario

[The project context, naming which example project this uses. Give enough concrete detail —
roles, constraints, deadline, budget — that the student can make real decisions. Reuse a
recurring scenario where possible so labs build toward the capstone.]

## Your role

[Who the student is, who they report to, and what they are accountable for. A role makes the
stakes real: "you are the project manager and the sponsor has asked for a date".]

## Project information and assumptions

[Everything the student needs to do the lab. State the assumptions explicitly and label every
invented figure as invented for teaching. Where the lab requires a calculation, give the input
data here in a table.]

## Tasks

### Task 1 — [Task name]

[What to do and what "good" looks like. One decision or calculation per task.]

### Task 2 — [Task name]

[Continue.]

### Task 3 — [Task name]

[Continue.]

### Task 4 — [Task name]

[Continue. Four tasks is the minimum.]

## Deliverable

[Exactly what to hand in, its expected size, and which template to use.]

## Hints and guidance

[Three to five bullets on how to avoid the common mistakes. These are the difference between a
lab that teaches and a lab that tests.]

## Self-check criteria

[A rubric table, or a check/how-to-verify table for calculation labs. Make it self-markable —
students in this course have no instructor on hand. State the interpretation of the total.]

## Reflection

1. [A question that asks the student to evaluate a choice they made]
2. [A question that connects this lab to a later module]

??? note "Check your numbers"   # calculation labs only
    [Expected values, with the full working in the answer key.]

## Extension challenge

[A harder variant for students who finish early, ending with a question about what the exercise
reveals. Keep it genuinely optional.]

## Related lessons

- [[Module/Lesson title]](../course-content/NN-module/lessons/NN-lesson.md)

Authoring rules

  • One deliverable per lab. Multiple artefacts blur the assessment.
  • All ten required sections, in order. tools/check-labs.py enforces this, and the four task minimum.
  • Self-checkable. A rubric, or a check/how-to-verify table for arithmetic labs. The self-check must be something a third party could apply.
  • Reuse the scenario across labs where you can, so artefacts accumulate into a capstone. Say which labs must be done first when one builds on another.
  • Answers live in the answer keys, not on the lab page — with one exception: a Check your numbers block giving expected values helps self-study students confirm they are on track without revealing the working. Full working goes in the key.
  • Label invented figures. Every scenario and number is illustrative, and saying so is part of the academic integrity standard — see ARCHITECTURE.md.
  • Link back to the lessons the lab practises, and to the example-project library.
  • Add the lab to mkdocs.yml nav (in the correct level group), to the catalogue in docs/labs/index.md, and to the Lab section of its module's overview page. Then run python tools/check-labs.py.