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. |