Google Summer of Code 2024: Distributed Error Reporting — Sujai Gupta
Hi, this is my first blog post on my Google Summer of Code (GSoC) journey with mentor organization Learning Equality.
I worked on an exciting project called “Distributed Error Reporting.” It’s a small project aimed at runtime error reporting for users, sending these errors to Learning Equality (LE) servers. My brilliant mentors, Samson Akol and Richard Tibbles, guided me through the process. Sit back and read about my experience below.
Project Description
Learning Equality’s flagship product, Kolibri, is a digital learning platform that enables access to a quality education where Internet connectivity is low or non-existent. We needed a way to track errors from when Kolibri users use the software, and send these errors to the Kolibri server whenever Internet connection is restored. The workflow is simple:
- Record all errors experienced by users and store them locally in the database.
- Report the errors to the server once connectivity is restored.
We broke down the project into several parts:
- Setting up the database table to store the error logs.
- Implementing middleware in the backend to generate and store error logs.
- Implementing a frontend mechanism to catch all unhandled errors and report them to the backend.
- Reporting the errors to LE’s server whenever Internet connection is restored.
The best thing about this project is that it is not only a Kolibri-specific idea. This can be integrated with almost every software today.
My work
We created a tracker issue on GitHub, and for each feature, we created a feature branch in Kolibri’s main repository named ‘distributed-error-reporting’. For each feature issue, I made a pull request (PR) to the feature branch, which was reviewed and merged by my mentors. You can review my proposal here.
PR: https://github.com/learningequality/kolibri/pull/12489
My experience
Before GSoC:
I started contributing to LE in September 2023. At that time, I had just finished learning some basic development. I had already contributed to an open-source project made in Django. I searched for Python projects to contribute to, and started with LE’s Kolibri.
I started by solving a straightforward bug. Though this was not Python work it was still interesting to dive into such a large codebase and fix the error. It turned out the bug was not even in the project (kolibri) that I was working on, it was on another project (kolibri-design-system). As my solution was accepted with a very encouraging and welcoming tone by the community, I kept contributing to the project from that day onwards.
When LE was announced as a GSoC organization for 2024 (its 4th year running!), I went through the projects and made my proposal for this one. I’m not much of a writer, so my proposal was short, consisting mainly of technical implementation details and a bit of additional info. I was more invested in coding and solving issues during that period as I enjoyed it more than writing a technical document. Even after submitting my proposal, I kept contributing, so yes, I was having an adrenaline kick to it.
Thankfully, my project was accepted, and I was happy and blessed to be working on it.
During Gsoc:
During the community bonding period, I focused on my end-semester exams. My mentors were understanding and allowed me to prioritize my exams. This didn’t affect the project much, as I had been bonding with the community months before GSoC even announced its 2024 program. The implementation plan for my project kept improving as we moved forward.
During the coding period, we decided on a common time for weekly stand- up meetings that was comfortable for the three of us, as we were all in different time zones. The workflow was simple: we discussed the sub-feature for 1–2 days, moved the task to GitHub, raised a PR for it, and then it was reviewed and merged. We followed this process for all sub-features, but with a great deal of flexibility.
Apart from the stand ups, we had asynchronous discussions via Slack. My mentors gave quick replies to all my doubts and troubles, and I didn’t hesitate to ask questions (though I first tried to come up with a solution myself). When my mentors were unavailable, I sought help in the community channels, where the community responded well.
I loved getting code reviews the most. It pushed me to write better code. An important lesson I learned was: “Maintainable code is the right code.” Besides coding, I made presentations and did a lot of technical writing (drafting sub-feature issues).
Conclusion
This project is not yet completed, but we have an MVP now. We can trace almost every error and report it to LE’s servers. The remaining work involves handling errors on the server side when it receives the error reports, which includes setting up APIs, a database, and an analysis UI to view the errors. These tasks were out of scope for my project, so we didn’t complete them.
After discussing with my mentors, we decided that I could continue working on this after GSoC voluntarily.
Overall, GSoC was a great experience. My mentors taught me a lot, especially Samson, who introduced me to software design principles, which was interesting to learn about. The community was super friendly and encouraged me to do my best. This summer will always be a memorable experience in my life :-)