Writing math tournament problems can be fun. Waiting for piles of papers to be graded, checked twice, reconciled, and turned into results is... less fun. Grading had become the bottleneck, so I started building Grade Helper.
The system grew into a pipeline: photograph or scan papers, validate the images, compress and upload them, dispatch them to graders, reconcile double grading, correct disagreements, and generate an analysis report.
Then came a real tryout.During math team selection, the school network was much worse than expected. Phone uploads stalled at the beginning. The Wi-Fi had opinions. A workflow that had looked fine in testing suddenly had to survive a real room, real people, and real Wi-Fi.
That failure was useful. Images were compressed to about 300 KB. Storage moved from the Google API to AWS S3 after testing showed S3 running roughly three to four times faster in this setup, while Google remained a backup. A web-server backup was added too.
The fastest grader shouldn’t have to wait.The original double-grading design used fixed grader pairs. In practice, faster graders finished and sat idle waiting for their partners. The redesign separated the requirement, “every paper gets two independent grades,” from the unnecessary assumption, “the same two people must grade together.”
Now graders can pull work dynamically. A dashboard shows progress. Scan validation happens before dispatch, and questionable, blurred, missing, or duplicated scans wait for scanner review instead of entering the grading queue.
The interesting part was no longer “Can I build this?” It became “What happens when everyone uses it at once?”
Add after the next tournament: what broke, what held up, scanner-vs-phone result, a simple architecture sketch, and the one thing I most want to redesign.