a cursed niche coursereg strategy
posted feb 2025
this post requires some basic familiarity with NUS’s CourseReg (i.e. you have been through at least 1 week of NUS).
in case you don't have that, click to expand
- there are 3 rounds of course registrations at NUS
- in round 1, you can only bid for courses in your major
- in round 2, the range of courses you can bid for expands to include general education courses
- in rounds 1 and 2, if a course has 0 vacancies, you cannot even attempt to place a bid for a course
- each round lasts for some time. after each round's time is up, NUS looks at your course rankings and runs their allocation algorithm (that is, only the final state of your rankings matters for their allocation algorithm)
- you can drop courses with a trivial click of a button during CourseReg rounds. therefore, vacancies can dynamically change (strictly increase) in the middle of a CourseReg round
- in rounds 1 and 2, you can't exceed 23 units of courses, regardless of your maximum workload allowance for the semester (that only comes in round 3)
- you can have "reserve choices" for your course selections, but all reserves only come into play once the main allocation is over. that is, a terribly low-scoring bid for the course in a main list will "beat" high-scoring bids in a reserve list
Suppose you want to take:
- a very very very popular gen ed course. this can be something like GESS1025 since it’s the only pass/fail gen ed.
- 4-5 more courses in your major that you can bid for in round 1. these courses are all less important than GESS1025.
In Round 1, you bid for your 5 CS courses of choice. You secure them, and since they’re popular their lecture slots are unsurprisingly maxxed out.
When Round 2 starts, you’re now faced with a predicament:
- GESS1025 is open for bidding, and you would really really like a chance at taking the course.
- However, it is certainly going to be overbidded so you may not get the course even if you bid for it.
- However, to even try to YOLO a bid for it, you’d have to drop one of the courses you’re currently enrolled in, since you’re already at 20 units.
The worst case scenario is that you bid for GESS1025 by dropping a course you're enrolled in, but you end Round 2 with neither course!
You can avoid this with some shrewd timing:
- When Round 2 starts, don’t do anything for 99% of the round.
- In the last ~hour of Round 2, identify your lowest-priority enrolled course that still has 0 vacancies
- (that is, nobody has dropped it during the time Round 2 has been open)
- WLOG, let’s call this course ES2660.
- you’ll need a friend to check this for you, since you can’t see vacancy numbers for courses you’re enrolled in, and you can’t see any course’s vacancy numbers when you don’t have the “MC space” to bid for any courses - At 4.59pm of Round 2 (1 minute until it ends),
- Drop ES2660, which gives you the “MC space” to bid for 1 course
- Bid for GESS1025, and put your old ES2660 lecture slot as your “reserve” course
- The clock ticks to 5pm and Round 2 is over!
Nobody else had the chance to even try to bid for your ES2660 lecture slot as it had 0 vacancies until 4:59pm. Therefore, you guarantee that you'll either get GESS1025 or your ES2660 lecture slot back.
I’ve successfully done this a few times, especially when Round 0 used to exist. I would save-as-backup a popular CS course to “YOLO bid” for a very very popular CS course in Round 1 (which replaces the role of “GESS1025” here).
I use ES2660 as an example since the ideal candidates for “backup courses” are pretty popular core courses in your major where each lecture slot is small. For CS students, this can be something like CS2103T Sem 1 or ES2660 where each lecture slot has 10-20 people. these work even better since they involve large group projects, and people usually have stronger specific preferences for their lecture slot (so I’d expect a smaller chance of someone else dropping the course mid-CourseReg-round).