Courselore
A course needs a place outside the classroom where the instructor posts announcements and students ask questions. Piazza is one tool for this. Courselore is an open-source alternative to Piazza. I was a consultant on Courselore, and some courses here at Hopkins use it. A school can host Courselore on its own server for free.
Courses and roles
Everything in Courselore belongs to a course. People join a course through an invitation link or an invitation email. A person who has joined a course is a participant in it. Each participant has one of two roles in the course: instructor or student. TAs join as instructors.
In a course, a participant posts a note or a question. A note is an announcement, such as a new deadline for an assignment. A question asks for help, and other participants reply to it. A question can be marked as resolved.
The request for chat
Instructors who teach project-based courses use two tools. The course’s announcements and questions are on Courselore. Each team uses Slack to talk day to day. For example, a team member shares a link to a draft, or the team agrees on a time to meet. A student in one of these courses has to check both tools.
The instructors ask for chat inside Courselore, so students do not need a second tool. In this chapter, we design that chat feature.
What is real and what we assume
Two things about the real Courselore matter for the design.
- Courselore is a monolith. Recall that a monolith is an application with one deployment boundary. All of Courselore’s code is released together and runs as one application on one server.
- Courselore stores its data in a relational database. Chat’s data goes into the same database, next to the courses and their participants.
Two other things are made up for this case study.
- The browser client talks to the server through a REST API. Real Courselore has no REST API. Its server builds each page as HTML and sends the finished page to the browser. A traditional WordPress page request works the same way. We assume a REST API so that we can design the API ourselves.
- Courselore’s load is small. I assume there are a few thousand users (the real number is much smaller). At this scale, we keep Courselore on one server with one database. If the load grows, we can use vertical scaling and move it to a machine with more processor cores, more memory, and faster disks.