We describe our criterion-referenced grading scheme for a first year programming subject, which has been designed to allow all participating students to achieve their full potential. Traditional norm-referenced grading schemes, where all students work on the same assessment tasks, result in tasks that may be effective for the middle-achieving student, but the tasks do not allow the weakest students to engage effectively, nor do these tasks stretch the strongest students. Our criterion-referenced scheme uses a mix of several assessment strategies to overcome this problem. The strategies have been used before in traditional assessment environments, but in isolation, whereas we combine the strategies into a coherent, explicit grading philosophy based on Bloom's taxonomy.