My GSoC Experience
Introduction
About me
I have a bachelor's degree in computer science and am currently pursuing a master's degree in data science. With over six years of professional programming experience, I have a strong foundation in my field. However, before GSoC, I had little experience with the open source community.
During the spring, I was applying to master's programs and knew I would have a lot of free time during the summer before classes began. I wanted to use this time productively, and GSoC provided the perfect opportunity to contribute to a good cause, and maybe start my journey to the world of open source projects.
I was initially skeptical about my eligibility as a GSoC contributor, but I was happy to learn that the program is flexible in terms of requirements. As long as you are at least 18 years old, a student or open source beginner, and some other minor requirements, you are welcome to apply. Despite my lack of experience in the open source community, I was excited to take on the challenge and see where it would lead.
About the organization
SeaQL is an organization that helps developers build data-intensive applications in Rust. Their mission is to help developers in building data intensive applications in Rust, whether they are web services (GraphQL, gRPC, REST), command line tools or apps [SeaQL website]. Their vision is to support all open source SQL, NewSQL, and NoSQL databases, providing a uniform developer experience for data analytics, transaction processing, and other data engineering work.
SeaQL values community-driven development and embraces the async Rust ecosystem. They welcome developers from other languages and have a portfolio of open source projects, including SeaORM, SeaQuery, SeaShema, and StarfishQL. SeaORM, in particular, is a popular async and dynamic ORM for Rust, with over 3,500 GitHub stars and half a million downloads. SeaQuery is a dynamic SQL query builder for MySQL, Postgres, and SQLite, and SeaShema is a library to help manage database schema. Finally, StarfishQL is a graph database and query engine that enables graph analysis and visualization on the web.
About the project
During GSoC, I worked on a project titled Seaography. The goal of the project was to create a tool that could easily turn any database into a GraphQL API. Seaography is a GraphQL framework that allows developers to build GraphQL resolvers using SeaORM entities. It includes a CLI tool that can generate ready-to-compile Rust GraphQL servers from existing MySQL, Postgres, and SQLite databases.
To complete the project, I used Rust and various libraries, including macros and meta-programming, code generation, async-graphql, and sea-orm. The project has several benefits, including being quick and easy to get started, generating readable code, having an extensible project structure, and having a solid foundation of battle tested libraries.
Seaography has a number of features, including support for relational queries (1-to-1 and 1-to-N), pagination, filtering with operators (e.g. gt, lt, eq), and the ability to order by any column. Overall, the project aims to make it easier for developers to create GraphQL APIs for their databases. [Seaography documentation]
The GSoC experience
The application
The process of applying for GSoC can be challenging, especially if you never wrote a formal project proposal yourself. There are several steps involved, including finding projects, writing technical proposals, and participating in interviews.
The first challenge is finding projects that excite you and align with your skills and interests. It's important to choose a project that you are passionate about, as this will help you stay motivated and help you make a positive contribution. To find projects, you can browse the list of available projects and narrow it down by searching for programming languages or keywords.
Once you have found a project you are interested in, you'll need to submit a proposal outlining your contribution to the project. This might include technical details about what you plan to create or improve. Some organizations require additional information in the form of documents like your CV or a motivation letter. After you submit your proposal, you'll have to wait to hear back for an interview. You can submit proposals to as many projects as you like, so don't be afraid to apply to multiple organizations.
During the interview, it's important to be honest and confident. If you were truthful in your application, you have nothing to fear. If you are not accepted, don't worry - you can try again next year. Many people are accepted on their second application, so don't be discouraged if you don't get in right away. If you are accepted, congratulations! You'll need to follow the proposed schedule, have meetings with your mentors, and organize your tasks to work on the project.
During the program
During the GSoC program, I had the opportunity to work on my project full-time and make significant progress. In the first few weeks, I met with my organization and mentor to get to know them and discuss my tasks and goals for the coming weeks. My mentor was an experienced programmer and was familiar with the organization and the project, so it was helpful to have their guidance and support.
A typical week during the program involved picking a task, discussing the details with my mentor, and working on the task until it was completed. I would then make a commit or publish the deliverable before moving on to the next task. At the end of each week, I would compare my progress to the proposed schedule to ensure that I was on track and not falling behind.
During the last week of the program, I focused on closing any loose ends and making sure that all tasks were finished or had sufficient details about why they were not completed. I also made sure that all deliverables were published.
One tip I would have for other GSoC participants is to keep a daily developer log to track your progress and accomplishments. This can be helpful for your mentor to get a clear view of the project's progress, and it can also help you keep track of loose ends and completed tasks. It's also important to pay attention to your mentor's feedback and try to learn as much as you can from them.
After completing the project
Congratulations on completing GSoC! Now that the program has ended, you have several options to consider. You can choose to continue working on your project, explore new projects, or take a break from open source work altogether. Whatever path you choose, it's important to be honest with your mentor and communicate your plans.
In my case, I decided to continue working on my project. Through the challenges I faced and the lessons I learned, I gained valuable experience and skills that I can apply to future projects. I am particularly proud of my achievements during the program, such as setting up my first CI/CD pipeline and gaining a deeper understanding of meta-programming and code generation concepts.
Conclusion
What I learned
During my GSoC experience, I learned a number of technical and non-technical skills that have been valuable for my personal and professional growth. One of the key things I learned was how to work with people across the world using different offline communication channels like email and Slack. I also gained experience in writing project proposals and technical writing, which are important skills for any software developer.
I also learned how to manage my time effectively when working on a project without a fixed schedule, and how to plan ahead and break down tasks into smaller, more manageable chunks. I learned the importance of keeping a daily developer log, as well as the benefits of using code quality tools like testing and CI/CD in open source projects.
In terms of technical skills, I improved my knowledge of the Rust programming language and learned about metaprogramming and code generation techniques.
Why mentorship is important
Mentorship and guidance are crucial for the success of any open source project, and this was certainly true for my experience with GSoC. My mentor played a crucial role in helping me understand the "circle" of open source projects, which includes the steps of design, development, and delivery. They also helped me set up my development environment and provided valuable feedback on how to improve the quality of the project. Moreover mentors can also help to prevent burnout and turnover among new contributors by keeping them excited and organized.
My mentor also passed on their knowledge and best practices about open source to me. They shared their experiences and insights on how to collaborate effectively with other contributors, how to communicate clearly and effectively, and how to follow best practices for writing high-quality code.
A notable example is the requirement of unit and integration testing, which is especially important in open source projects that are intended to be used in other people's projects. Utilizing testing, we were able to ensure that the code was of high quality and that it met the needs of users.
One of the key things my mentor helped me was to set up an automatic delivery system (CI/CD) that saved time and made it easier for new contributors to get involved. Having a CI/CD system in place can help to ensure that new contributors are following best practices and contributing high-quality code.
Wrapping it up
As I wrap up my blog post about my GSoC experience, I want to take a moment to express my gratitude to my mentor and the organization for providing me with the opportunity to participate in this program. Without their support and guidance, I would not have been able to make the same level of contribution to the open source community.
I am grateful for the chance to work on a project that I am passionate about, and I am grateful to have had the chance to learn from my mentor and other experienced open source contributors. The skills and knowledge I gained during the program will be invaluable as I continue to develop my skills as a software developer.
I encourage other aspiring open source contributors to consider applying for GSoC in the future. It is a fantastic opportunity to work on a project that you are passionate about, and to learn from experienced mentors and other contributors. Whether you are just starting out in your career or you are an experienced developer, GSoC can help you take your skills to the next level and make a positive impact on the open source community.
Appendix
Proposal tips
Writing a technical proposal can be a daunting task, especially if you have never done it before. However, with some careful planning and preparation, you can create a proposal that clearly communicates your ideas and showcases your skills. Here are some tips to help you write a successful technical proposal:
- Start by researching other technical proposals for Google Summer of Code (GSoC). This will give you an idea of what is expected and what has been successful in the past.
- Keep your proposal concise and to the point. Aim for a document that is 5-10 pages in length.
- Clearly state the purpose of the document and describe the intended audience. This will help the reader understand the context and relevance of your proposal.
- Provide a brief overview of your project, including the title, language, and description. This should be a high-level summary that gives the reader a general understanding of what you are proposing.
- Explain the benefits of your project. This is a key part of your proposal, as it helps to build a case for why your project is important and worth funding.
- Identify any potential risks or challenges that your project may face, and explain how you plan to mitigate them. This shows that you have considered the potential roadblocks and are prepared to address them.
- Gather all of the resources you will need to complete your project, such as tools, articles, and other relevant projects. This demonstrates that you have a solid plan for how you will approach the work.
- Provide a detailed system overview, including a description of the modules you will use and how they will function. Use diagrams and examples to help illustrate your ideas.
- Make sure to be specific and provide concrete examples.
- Clearly outline the deliverables you will provide at the end of the project. This might include a documentation page, an executable, or a repository on GitHub.
- Create a timeline of tasks that you will complete over the course of the 12-week program. This helps to show that your project is feasible and that you have a clear plan for how you will allocate your time.
- As you write your proposal, keep in mind the needs and expectations of your audience. Use clear, concise language and avoid technical jargon whenever possible.
- Finally, be sure to proofread your proposal carefully and have someone else review it before you submit it. This will help to ensure that your proposal is error-free and easy to understand.
With these tips in mind, you should be well-equipped to write a compelling and convincing technical proposal for GSoC. By clearly outlining your project, explaining its benefits, and showing that you have the resources and expertise to complete the work, you can increase your chances of being accepted into the program. So, take the time to carefully plan and prepare your proposal, and you will be well on your way to participating in GSoC and contributing to the open source community.