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.pyenforces 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 numbersblock 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.ymlnav(in the correct level group), to the catalogue indocs/labs/index.md, and to the Lab section of its module's overview page. Then runpython tools/check-labs.py.