Marc-Robin Gruener

ProjectBiddit.app Course Ratings

TL;DR

Biddit introduced a new course ratings feature to help students at the University of St. Gallen make informed decisions when planning their semesters. This feature allows students to rate and review courses based on several criteria, providing valuable peer insights that complement official course information. Implemented with a strong focus on privacy and ease of use, the new system was well-received, marking a significant enhancement post-acquisition by SHSG. To date, HSG students have provided close to 10,000 comments & 1,000 comments on over 2,500 courses.

Biddit Course Ratings Screenshot
Biddit Course Ratings Screenshot

Problem

When talking to students about how they plan their upcoming semesters, we learned that while the information universities provide about courses—such as content, exam details, and schedules—is important, it is not typically why students choose a course. These details often serve to narrow down a list of approximately 250 courses to around 20, but they do not answer the critical question: "Is this course actually good?"

Students rely on informal sources for this subjective information, the kind you get by asking a friend who has already taken the course. This is crucial for making informed decisions about which courses to bid on, given that students at the University of St. Gallen must bid points for courses rather than simply signing up. Existing resources like Rate My Professor, Jodel, Facebook groups, and WhatsApp study groups provide some insights, but they are scattered and often incomplete.

This lack of centralized, reliable course reviews is particularly challenging for new and exchange students who have not had the chance to build a network and gather personal recommendations. For them, bidding on courses can feel like a guessing game.

Approach

We identified course ratings as the solution—peer-reviewed, socially approved courses that provide the subjective insights students need. The goal was to make these ratings relevant, easy, and quick to fill out while maintaining a respectful tone and ensuring student privacy.

To design this feature, we first researched how other platforms handle ratings, including Google Maps, restaurant feedback, and Airbnb. We focused on when and how they ask for ratings, what criteria they use, and how they display the results. We also conducted interviews with students to understand the most relevant criteria for course evaluations.

Google Maps and AirBnB Ratings
Google Maps and AirBnB Ratings

From our research, we learned that students primarily take courses for two reasons: a genuine interest in the topic that they believe will prepare them for their future careers, or because the course is perceived as easy and likely to result in a good grade. Both are crucial signals when applying for jobs.

Solution

While the university has a process for course evaluations aimed at long-term improvement, these evaluations are not shared with students and are completed before exams to avoid bias. However, this pre-exam timing misses the critical aspect of whether the hard work paid off in terms of grades, which is often what students care about most.

Our solution was to introduce a streamlined rating system that could be completed in under 30 seconds. Based on our interviews, we created six categories for course ratings:

  • Topic: Were the topics covered what you expected from the course sheet?
  • Lecture: How well was the lecture structured?
  • Materials: How well did the provided course materials support your education?
  • Exam: Was the exam fair?
  • Professor: How well did the professor perform?
  • Workload: Was the workload appropriate for the ECTS?

These help students better judge the fit of a course.

Biddit Course Ratings Categories
Biddit Course Ratings Categories

At the beginning of each new semester, students are prompted to rate the courses they completed in the previous semester. They are nudged through a pop-up notification and a red dot indicator showing the number of courses to be rated. By clicking on the rating icon, students can access a list of courses they can rate, grouped by semester. They then rate each category from 0-5 stars and can provide optional comments.

Biddit Course Ratings Notification
Biddit Course Ratings Notification

The rating information is used at different aggregation levels within Biddit:

  1. The average rating of all categories is displayed in the course list, allowing for quick filtering by rating.
  2. In the course details, the average rating across all categories, the number of ratings, and the average rating per category are displayed.
  3. Students can also view the comments from other students, including the semester and year the course was taken.
① Average ② Average, Count & by Category ③ Comments
① Average ② Average, Count & by Category ③ Comments

To ensure privacy, we decided to store the ratings separately from any other user data using a hashed version of a unique user identifier and a salt. This allows us to link ratings to users without compromising their anonymity. All ratings are visible by default but can be reviewed and hidden if they do not comply with the code of conduct.

Technical Implementation

Previously, user data, such as selected courses, was stored locally on the user's device. This approach was simple and ensured data was always up-to-date without requiring our own backend. However, with the need to store ratings, we had to develop a backend solution.

We explored various options, including building our own backend with Django Rest Framework or using a Backend-as-a-Service like Supabase. Ultimately, we decided to utilize existing SHSG infrastructure, which supports other IT offerings like the SHSG Campus App. This choice was cost-effective and simplified data management.

The server runs on Express.js. I collaborated with the backend developer to design and implement the necessary REST APIs for the frontend.

We also took this opportunity to upgrade how course data is stored. Previously, course data was saved in browser cookies, which had two main disadvantages: data loss if the cache was cleared or a different browser was used, and no synchronization across devices. By moving this data to the backend, we ensured data persistence and synchronization. When a user logs in, we first check the backend for data. If none is found, we use the local cookies to populate the database.

Challenges

The main challenge was philosophical rather than technical. Ratings are retrospective and only valuable if past experiences are indicative of future ones. This raised the question: when are courses the "same" across different semesters?

We considered various attributes like lecturers, exams, course titles, and descriptions, but each had flaws. Lecturer lists often include changing staff, course titles are frequently updated with buzzwords, and descriptions can change. Ultimately, we chose the course number as the unique identifier, as it is reasonably consistent across semesters.

However, in rare cases, course numbers are reused for entirely new courses. In these instances, we work with faculty to manually disable past ratings for these courses and are collaborating with University IT to find a long-term solution.

Since launch, we also decided to remove the professor rating to focus on the course experience rather than individuals, given the multiple contributors to a course's success.

Conclusion

The course ratings feature was incredibly well received. So far, we have collected a total of 9,998 ratings and 943 comments for 2,587 courses. This was a significant step for Biddit, marking the first time we were able to offer new data insights to students, especially benefiting new and exchange students. Building out our data infrastructure has also laid the foundation for future features, representing a successful post-acquisition development.

We are incredibly proud of this advancement.