Peer Evaluation Rubric

Objective

Excellent

Good

Satisfactory

Needs improvement

Navigate and explain their work in the codebase (Individual, 18.75%)

Navigates confidently and explains clearly what the code does and how it fits into the surrounding pipeline.

Navigates their area well and can explain what the code does, with minor hesitation or gaps.

Locates relevant code with some hesitation but gives surface-level explanations, or relies on teammates for context on parts of their own area.

Cannot navigate to or explain their contributions without significant help from teammates.

Criticise and defend the design of their work (Individual, 18.75%)

Gives specific, reasoned justifications for their design decisions, acknowledges tradeoffs or things they would do differently, and engages with a hypothetical alternative or critique without becoming defensive or dismissive.

Explains their design choices and identifies at least one tradeoff or limitation, but struggles to engage meaningfully with alternatives or critiques beyond restating what they did.

Describes their design at a surface level but cannot explain why choices were made, or deflects critique without engaging with it.

Cannot articulate design choices or engage with any critique of their work.

Diagnose failures and validate features through the use of tests (Individual, 18.75%)

Gives a concrete example of a test they wrote, explains what compiler behaviour it targets and why, and can reason about what a different failure output would imply about correct or incorrect compiler behaviour.

Explains a test they wrote and interprets test output, but struggles to reason about edge cases or unfamiliar failure modes.

Describes a test at a surface level but cannot reason about what a different failure output would imply, or needs significant prompting to connect test output to compiler behaviour.

Cannot explain what compiler behaviour a test is designed to verify, or cannot interpret test output to draw any conclusion.

Outline information flow across compiler passes and identify where language features are handled (Individual, 18.75%)

Gives a clear, accurate account of the pipeline as a whole and can trace an unfamiliar feature through the relevant passes without prompting.

Outlines the pipeline and traces familiar features accurately, but struggles with unfamiliar features or passes they did not write.

Describes individual passes but cannot connect them into a coherent account of information flow, or can only trace features they personally implemented.

Cannot describe the pipeline structure or locate where a feature would be handled.

Assess the implementation complexity of an unfamiliar language feature and argue a position on its design (Group, 12.5%)

Gives a specific, reasoned account of where a hypothetical feature would live and what it would cost, and argues a defensible position on its design — including tradeoffs or ways they would do it differently.

Reasons about implementation complexity at a reasonable level and offers a position, but the argument is underdeveloped or not well grounded in their implementation experience.

Identifies roughly where a feature would be handled but cannot reason about interactions or costs, or offers a position without any supporting argument.

Cannot reason about where a new feature would be handled, or offers no position on its design.

Evaluate and criticise whole-compiler design decisions (Group, 12.5%)

Gives clear, reasoned answers and evaluates specific choices — including acknowledging tradeoffs or things they would do differently.

Addresses questions well but struggles to justify choices beyond “it worked.”

Addresses questions at a surface level but cannot connect design decisions across passes, or answers are inconsistent across members.

Cannot engage with cross-cutting design questions, or answers are contradictory across members.