Design, Engineering, DevOps · 2015–2017

View on GitHub View live site

For the last year, I've designed, built, and maintained SignMeUp, a webapp that allows teaching assistants to hold office hours and students to sign up for them. In essence, it is an online queue, and is now used by over half a dozen courses at Brown.


Students at TA hours. Photo used by permission of Brown CS.

Every semester, 10% of Brown's student body enrolls in a computer science class. As the fastest growing major on campus, the department has to find new ways to scale really great pedagogy to hundreds of students, many with no prior experience. The most effective such method has been our undergraduate teaching assistant program.

The TA program at Brown has a long tradition in collaborative and intimate learning. Most courses have a student to TA ratio of 7:1, and many students feel a sense of giving-back when TAing classes they took and enjoyed. However, with some class sizes tipping over 400 students, this puts a large burden on TAs.

SignMeUp steps in to solve one very specific problem. When tens of students are waiting to get help from TAs, how do we coordinate these long lines?


How can we help TAs coordinate long lines at office hours?

Holding office hours for a large class of 400 students poses many problems.

For one, writing names on a whiteboard can only scale so long. In addition, students are forced to physically wait in the same room as office hours until their name is callled. Sometimes, students would line up before office hours even began, which isn't fair to students who show up on time.

The existing solution was students writing their names on a whiteboard. In 2014, then students Dhruv Rawat, Anamta Farook, and Mohsan Elahi decided to create the first version of SignMeUp. While a great first version, it had a lot of room to improve. Since I took on the project, SMU has undergone two full redesigns, and over 13 releases.

The original version of SignMeUp, built by former students, circa 2014. I've since redesigned and rewritten the app from scratch.

Features · Students

Students hoping to sign up for hours can simply head to the website on their laptop or phone. Authentication is handled with Brown's Shibboleth user system, meaning students don't have to create a new account or remember a new password.

Students can sign up by logging in with their Brown account.

Groups of students can sign up together too, and can ask to be notified just before their turn by email or text.

Groups of students can sign up together.
Students can be notified of their spot by email or text.

After signing up, when their turn comes up, the students go to TAs to receive help.

Features · TAs

Teaching assistants have a slightly different interface for queues. They can create multiple queues for different purposes, manage the queue, and go through the student tickets.

Queue Status

A queue can be active, cutoff, or ended. A cutoff queue accepts signups, but it's a sign to students that they may not be helped before hours end.

Restricted Sessions

Restricted sessions limit signups to a specific computer, ensuring students are physically in the same space as hours, and helping students without computers.

Ticket Management

Finally, TAs can manage student tickets. Tickets are first "claimed", at which point a timer starts ticking showing the TA how long they've been helping the student. Once done, they can mark the ticket as done.

If the student is missing, however, the TA can send out an email or text notification first. If the student doesn't show up, they can also mark the student as missing.

Features · Head TAs

Head TAs handle course logistics and policies. The settings page helps them edit course details and settings.

One such settings is the Signup Gap. This is the minimum amount of time a student must wait between tickets, ensuring that a student can only sign up, say, once an hour. Busy hours remain fair to all students this way.

HTAs can also control the roles and permissions for their staff. A course can have multiple HTAs and TAs. In addition, Meta TAs (or MTAs) run the entire TA program at Brown, and they have admin-level access.

Engineering and DevOps

A full year and nearly 400 commits later, SignMeUp is a mature and modern JavaScript codebase. I've had the chance to learn many new technologies, but also carry the application from idea to development to continued maintenance.


Using ES2015 with Meteor allowed for a structured, forward-facing codebase optimized for realtime apps.

Bootstrap 4

The latest version of Bootstrap allowed for Flexbox usage and PostCSS-based optimizations.

Docker and Compose

Docker allowed us to orchestrate a family of containers running the proxy, database, and application.

Shibboleth Authentication

Working closely with CIS, I wrote a Meteor package to let students login using their Brown accounts.

Next Steps

Working on SignMeUp has been extremely rewarding. Walking through our computer science building and seeing freshmen use software I built is a great feeling. In addition, recurring positive feedback from TAs is extremely encouraging.

[SignMeUp] has become an invaluable part of our process and helps coordinate students among several TAs at a time for dozens of hours a week.

— Dan Ziring, cs15 HTA

Over the next two semesters, I hope to continue adding features, improving the analytics dashboard, and making SignMeUp more mobile friendly. Hopefully SMU remains useful to courses for years to come!