[Internship] Google Summer of Code 2017 with Discourse

2 minute read

Google Summer of Code is a global student program focused on involving and spreading the word about open source software development. I spent great summer full of code with Discourse community working on features related to advanced search. Discourse is a modern civilized discussion platform which is currently used by more thank 10 000 online communities worldwide (ranging from politics to hobbyist).

Discourse

My work is summarized along with the code and weekly reports in the final report.

Application

In my master’s thesis, I did a research in online communities so I encountered Discourse many times, as it is used by online courses in Udacity for example. I got engaged in the Discourse meta community (which uses Discourse itself) and got interested because of their tech stack and core team, so I submitted pull request to add a feature to admin panel.

I have known Google Summer of Code for last two years, but I didn’t tried to apply before. As I was about to finish my master’s degree, it was my last opportunity to apply to GSoC. Moreover, it suited perfectly to my master thesis research, so I was determined to continue contributing even more.

This is my submitted final application proposal. Writing application proposal was iterative process with a lot of feedback from the Discourse team. I created two prior completely different application proposal drafts - one proposing multiple email address support (core team wanted to work on this for security reasons) and buy/sell “mini ebay” plugin (more UX problem, entirely new area for Discourse).

In my opinion, showing previous open source contributions and motivation to learn are two most important parts of successful application. Moreover, it’s good to read discussions trying to understand issues and feature proposals, don’t be afraid to ask and to draft your proposal as early as possible.

Summer full of code

Remote work was something I was keen to try, living some kind of nomad lifestyle, and I’ve read several books and articles about it. One of the most important thing from my experience is to not forget about your health while working from home - I used good ergonomic chair with laptop stand and external mouse and keyboard. Morever, to handle remote work you should be aware of separating work and free time - I set individual room used only for work.

I got assigned @Neil as a mentor. He is skilled software engineer and he was able to tackle all of my questions and issues. I used meta discussion forum as a primary communication channel for broader discussion and reporting. For solving issues and brainstorming potential solutions with my mentor Slack was used.

In summary, I added new filters to search posts which

  • contains all provided tags,
  • have image(s),
  • contain selected filetype(s) and
  • extended number of search results by paging and infinite scrolling.

These features required analysis and understanding of existing code base, implementation in Ruby on Rails on backend and Ember.js on frontend, writing tests, creation of indices and optimizing queries in PostgreSQL. More technical details are in final report.

Conclusions

During the summer of code, I improved my testing (TDD) skills, learned how to upgrade a product (with proper support of older versions) and saw the importance of proper database design and code performance in the real world product. Moreover, I found out the value of communication within the team and saw pros and cons of remote work. Thank you Discourse team, Google and whole open source community.