Skip to content

Assessment handbook — coursework, projects, exams

Covers all 8 modules. Weights, marking, exam blueprints, viva protocol, grade bands.

Every module: coursework (labs) 45% · project 35% · check-off viva 10% · exam 10%.


The coursework is the labs listed in each module page (L1…L6). No separate assignments. One lab per week, submitted as a git branch against the Fixthemusic-com/ftm repo — a lab that is not a branch does not count.

LevelRequires
FailDoesn’t run, or no evidence recorded, or branch missing
PassRuns, meets the brief, evidence in the branch (test, output, log line)
DistinctionPass plus proof: a test that fails without it, a before/after measurement, or a reproduced failure

A module’s coursework mark = mean of its labs. Any Fail on a lab marked required (the module page names them) caps coursework at 50.

One week after the lecture week. Two resubmissions allowed within the semester. Late submission without a reason costs one level.


One project per module. The module page states the deliverable; this section states what makes it pass.

A project counts only if the artefact exists outside the submission: merged to master, deployed to a preview/staging, or measured against real data. A diff in a branch is not a project.

CriterionPass looks likeDistinction looks like
WorksThe thing runs and does what the brief saysRuns on a fresh checkout, cold, first try
TestedAt least one test covers the new logicThe test fails when the logic is deliberately broken
Correct in the domainDoesn’t violate a stated FTM ruleAnticipates a rule the brief didn’t mention
ExplainedA paragraph saying what it does and what it doesn’tNames the ceiling and the upgrade path
ReviewedSurvives one review passReviewer changes nothing but typos

Domain correctness is marked against backend/, not opinion. A money or permission mistake is a Fail regardless of the other four.


20 minutes, unannounced which lab, on her own submitted code. Three questions, drawn from the code in front of us:

  1. “Walk me through what this does, line by line.”
  2. “What breaks this?”
  3. “Why did you do it this way and not the obvious other way?”

Pass requires all three answered without opening the code again. Cannot be resat — that is the point. A viva failure caps the module at Pass.


Every chapter carries a problem set of 20 marks: five graduated problems (recall → apply → analyse → synthesise), plus worked solutions with the mark allocation visible. Formative — they do not count toward the module grade, which the labs and exams carry — but a chapter without one is not teaching material.

One paper per module, in exam week. 100 marks, 2 hours 30 minutes. Closed book with one A4 sheet of notes, except the practical section, which runs on a laptop. No internet.

No multiple choice anywhere. Every question is answered either in code, in SQL, or in two-to-five sentences naming a mechanism.

ModuleTimeFormatContents
CS101150 min100 marks10 short answers (20); 4 problems with proofs (40); analysis and design (25); practical on laptop (15)
CS10390 min, writtenWrittenGiven URL + host + cookie, route the request through the stack on paper; 4 real curl transcripts → name each status and why; 2 caching decisions with header
CS202120 min, laptopPracticalWrite 5 queries; choose and justify an index for each; 2 transaction scenarios (what race survives this isolation level); read one EXPLAIN and say what to change
CS30190 min, writtenWrittenWrite specs for 2 undocumented functions; given a test suite, list three defects it cannot catch; decide refactor-or-rewrite for one real function
FTM301120 min, laptopOpen-repo12 “where does this live” questions answered with file paths and one sentence of mechanism; 1 end-to-end trace; 1 migration safety review
FTM30290 min, writtenWritten5 money scenarios answered in rows and amounts; complete the state machine; find one disclosure violation in a supplied diff
FTM40190 min, writtenWritten8 URLs/screenshots → surface, service, file; 1 cacheability decision; diagnose 1 CWV regression from a trace
FTM402120 min, writtenWritten10 fault descriptions → name the layer and the first command; diagnose 1 incident from a log transcript; 1 security finding with severity

Every paper publishes, before it is sat:

  • a mark scheme per question with sub-item marks and partial-credit rules;
  • model answers;
  • a time budget consistent with marks at ~1.2 min/mark;
  • grade descriptors — what a 50, a 60 and a 70 look like in behaviour;
  • section floors — the parts that must be passed independently.

Answers are marked on mechanism, not vocabulary: “it’s cached” fails, “Fastly serves it for 60 s because the page has no session read, so s-maxage survives” passes.

Pass mark 40%, Merit 60%, Distinction 70%. Section floors apply per module. One resit per semester, same blueprint, different questions.


BandAggregate
Distinction≥ 70
Merit60–69
Pass50–59
Fail< 50

Module aggregate = coursework 45 + project 35 + viva 10 + exam 10. Semester gate: every module passed before the next semester starts.


One page, nine lines: 8 module grades plus the capstone outcome, with the programme aggregate. Useful evidence if this ever becomes a promotion or hiring conversation.


python3 /tmp/m/audit.py exits 0 only when every module meets the course standards: 8 required chapter sections, numeric citations, problem sets totalling 20, exam section marks summing to the paper total, a mark scheme and grade descriptors for every paper.

Current state: CS101 conforms; the other seven modules do not yet. They are summaries, not courses, and are being rebuilt to the CS101 standard.