Skip to content

Using GitHub Classroom outside the classroom

Read time: 4 minutes

With confinement, many classrooms went online, as well as many engineering teams (along with their processes). OneFootball was no exception and we were looking early on for the right tools to adapt ourselves to this new situation. In particular, the Data & Insights team was hiring.

That's when we paid attention to GitHub Classroom. At first sight, it's a platform separate from GitHub, dedicated to teaching. But looking closer, it uses repositories, commits and pull requests to help teachers streamline the assignment workflow they have with their students, and there's a lot there that can be used outside the classroom.

Teachers are not the only ones to manage an assignment workflow🔗

That's when we thought of adapting GitHub Classroom to our hiring process. As part of our hiring process, we have a coding take-home assignment that we ask the candidates to submit on GitHub. One can draw the following (not perfect) analogy between a classroom and a hiring team:

  • Git and GitHub are already part of the recruitment process (e.g. with portfolio review) which makes GitHub Classroom a natural fit.
  • You can then create individual or group assignments, populate them with boilerplate code in a repository template, and send the assignment to a list of "students" (candidates in our case). If you're a teacher, that's where you can integrate with your Learning Management System to reach your students in one click. In our case, we can manually add candidates as they enter the hiring process to the assignment. In the future, maybe Github Classroom could integrate with ATS tools (Applicant Tracking Systems) used to manage hiring pipelines.
  • The pull request review process can be augmented by using auto-grading in a CI. By setting unit tests, you will be able to scale to many "students" and check the content of their submissions.

Interesting but not perfect🔗

We found interesting to re-purpose a GitHub Classroom for a hiring process. It was helpful to understand how a tool can help us manage our assignment workflow. However it was not perfect and here are the drawbacks we found:

  • When you create your assignment repository, "students" will fork it to solve the assignment. However, these assignment repos remain under the ownership of the user/organization that manages the class. This means that for the manager, her GitHub UI becomes messy pretty quickly.
  • Auto-grading of assignments will not help you if your assignment's structure is not "strict". In other words, in order to check submissions with assertions (=tests), you will need to standardise the output. This can force you to write boilerplate code that the candidate needs to fill, just like in a MOOC for example. Arguably, this makes the assignment much easier. Instead, we like to have open ended questions where the candidate starts from a blank page. This allows us to see what technology the candidate will use as well as evaluate her problem solving.
  • Finally, GitHub Classroom uses GitHub PRs and in this sense depends on GitHub's roadmap of features. For example, often assignments are solved by handing in python notebooks to analyse a dataset and discuss results. Unfortunately, the review experience for notebooks on GitHub (including GitHub Classroom) is not there yet. Tools like Review Notebook can help, but they live side-by-side with your online classroom. In practice, integrating it in our assignment workflow (e.g. pointing candidates to it with correct access rights) proved not smooth.

Conclusion🔗

Although it's not feature complete yet, GitHub Classroom does provide an interesting way to manage an assignment workflow. Repurposing GitHub Classroom for hiring processes proved fun but not perfect.

A hiring process is maybe not the best way to use GitHub Classroom outside the classroom. One idea on our list is to use it as a way to build scalable and lightweight MOOCs that you can share inside and outside the wider organisation, for example to introduce co-workers to different parts of our data stack.