GitHub intern project: Building a Learning Lab API

Image of Philip Dumaresq

The GitHub Internship Program welcomes its summer 2019 students as we celebrate four years. After 5,000 applicants and a tremendous amount of planning, our interns are here and ready to tell you about their experiences with all things GitHub. In this blog series, students share their insight about using the GitHub Student Developer Pack, working with GitHub Learning Lab, and more. Check out the series and come back for more intern posts.


Philip Dumaresq is a student at Concordia University in Montreal, where he studies Computer Science. He joined GitHub in summer 2019 as an intern on the Learning Engineering team. In this post, Philip shares his experience building a Learning Lab API.

Connecting with Learning Lab outside the GitHub platform

The barrier to entry for programming can be difficult to overcome. Fortunately, there are many teachers and organizations that produce fantastic educational content to help learners get started. This summer, I built the first iteration of a Learning Lab API to allow course authors to leverage Learning Lab outside the GitHub platform. With this API, developers can embed a Learning Lab course into another website, find problems in their own courses to improve them, and more.

API architecture and design is a subject that I’ve long wanted to explore, and this was the perfect opportunity for me to develop my skills in that area while learning more about system architecture. By building this API, I would also learn how to take existing functionalities and break them down for a more abstracted system. Most importantly, I wanted individuals to be able to streamline their course-writing process and create a better learning experience by providing access to Learning Lab workflows outside of GitHub.

Building the API

I built a couple components for the API, which included an informative error handler to manage different HTTP request errors, as well as a simple web page for generating API keys for authentication. Before this project, I was unfamiliar with authentication using personal access tokens. Since I didn’t have much experience with application security, I knew how to hash a password to store it in a database on a fundamental level, but I didn’t understand how that process would translate over to personal access tokens. Luckily, after working with the Application Security team, the process was easier than I expected.

Creating straightforward and user-friendly documentation is an essential skill to have when working on a user-facing product. With this in mind, I spent time writing external documentation on how to use the API and what each endpoint returns.

Lessons learned

Before this internship, I wasn’t familiar with working on a team or having to deal with the involvement of many different stakeholders with differing opinions and priorities. However, by having team members review my code and provide feedback, I was able to improve my work on the API and my overall skills as a developer. 

Another important lesson I learned is to, “fall in love with the problem, not the solution.” This concept means that it isn’t enough to focus only on building a solution. Rather, you should take all the different facets of the problem into account, build a general plan of attack, and not be afraid to start over—these things are equally important throughout the entire process. Once I started focusing on incremental development, the process to build the API went much smoother.

Get started with Learning Lab

Join us at GitHub Universe

Our largest product and community conference is returning to the Palace of Fine Arts in San Francisco, November 13-14. Hear what's next for the GitHub platform, find inspiration for your next project, and connect with developers who are changing the world.

Get tickets

GitHub Actions now supports CI/CD

GitHub Actions makes it easier to automate how you build, test, and deploy your projects on any platform, including Linux, macOS, and Windows. Try out the beta before GitHub Actions is generally available on November 13.

Sign up for the beta