Back to blog
· 5 min read·thought-leadershipgradebookclassroom-api

Draft-first grading: why every grade-push tool should default to drafts

Publishing 47 grades is a notification event; drafting them is a filesystem write. The case for making drafts the only default in every Classroom grade-push tool.

Here's a thing that happens in real classrooms: a teacher imports 47 grades from a spreadsheet, accidentally maps the roll numbercolumn as the grade column, and every student in the course gets a notification that their midterm score is their four-digit student ID. The teacher spends the next hour deleting grades, apologising over email, and rebuilding their trust with the class. The tool that did this wasn't buggy. It just published by default.

Drafts fix this. They're trivially easy to implement. And they're still not the default in most grade-import tools in 2026. This post is the case for why every tool that pushes grades to Google Classroom should make drafts the only default — and why Sheet2Classroom won't let you turn that off without going out of your way.

Published grades are a notification event

In Google Classroom, the moment you mark a submission returned — which is what publishing a grade does under the hood — three things happen:

  1. The student's Classroom app gets a push notification with the grade.
  2. Their gradebook view of the course updates. For many students, that updates their running class average and their parents' summary email.
  3. The student's submission flips from "Turned in" to "Returned." They can now see any attached feedback.

None of that is un-doable. Even if you delete the grade five seconds later, the notification has already gone out. The student saw the number, showed their friend, and formed an opinion. Whatever you do next is damage control.

Draft grades are a filesystem write

Draft grades sit on the submission object in Classroom. The API separates them explicitly: studentSubmissions.patch accepts draftGrade and assignedGrade as independent fields. Writing draftGrade does nothing visible to the student. Writing assignedGrade triggers the notification cascade above.

So in Classroom's data model, a draft is a value the teacher can see and modify freely. Publishing is the moment the student finds out. Any grade-push tool that skips the draft and goes straight to assignedGrade is skipping the safety net Google built.

The preview that nobody reads

Most tools show a preview screen — "here's the 47 matches, hit confirm to push" — and consider that the review step. In practice, teachers scan the first three rows, assume the rest are fine, and click confirm. A preview is a best-effort verification; a draft is a reversible verification. The former prevents errors the teacher notices before confirming. The latter prevents errors the teacher only notices after talking to a confused student ten minutes later.

You need both. Preview catches the "wait that's not the right column" class of mistake. Drafts catch the "I thought I was grading Quiz 3 but I was looking at Quiz 2" class of mistake — the kind where you genuinely do push the correct values, just to the wrong assignment.

The argument against drafts (and why it's weak)

The most common objection from tool authors is that drafts add a step. "The teacher has to go publish them afterwards, which is annoying." Three counters:

  1. Publishing is one click per assignment.Classroom has a "Return all" button that flips every draft grade in an assignment to published in a single action. The marginal cost of the draft flow is one click, total, no matter how many students you graded.
  2. Teachers don't always want to publish immediately.For a graded quiz, most teachers wait until the whole class's grades are in before publishing, so students see their score in context (class average, histogram). Drafts happen to match how teachers already work.
  3. The asymmetry of costs.One click to publish vs. a class-wide apology email for a wrong push. There's no reasonable tradeoff under which drafts lose.

What draft-first looks like in a well-designed tool

Sheet2Classroom implements this as follows:

  • The push button says "Push as drafts." Not "Push grades." Not "Publish." The word "draft" is the default label.
  • Publishing is a separate subsequent action— a secondary button on the post-push screen labelled "Publish all drafts." The teacher has to read the preview of drafts that just landed in Classroom before they can promote them.
  • Restore is offered at publish time, not just push time. Even after publishing, the 30-day backup covers the pre-push state, so a bad publish is recoverable as long as the teacher catches it within the window.

We don't have a "skip drafts and publish directly" toggle. A teacher who really needs a one-step push can do: Push as drafts → immediately click Publish all. Two clicks. The second click is the one that forces them to think about what they're about to make visible.

A question for other tool builders

If you're building a Classroom integration and your default mode writes assignedGrade, here's the question to put in front of your next user-research subject:

"You just clicked the import button. 47 grades went live. Two minutes later, your department head emails to say your column mapping was off by one. What are the next thirty minutes of your day going to look like?"

If the answer is "horrible," the default should be drafts. That's the whole argument.

Try it

Draft-first push is baked into Sheet2Classroom — you literally can't import grades that go live immediately without doing two explicit, separate actions. It's the safer default, and in our experience it's also the faster one, because the teachers who trust the tool push more assignments more often.

Read next