Welcome Forum Post

Last modified by Eduard Moraru on 2022/05/24 12:54

This message is to be sent to the XWiki forum and emailed directly to the contributors (in case they are not registered yet) in welcoming the recently accepted GSoC contributors
Hint: Copy/paste the message content directly (markdown formatted) from view mode and replace the years/dates/values.

Subject: Welcoming our GSoC 2024 contributors
Category: Development
Tags: gsoc

Hello devs and Google Summer of Code contributor(s).

First of all, congratulations, <list of contributor names, preferably also with @ mentions to their forum users, if available> on being selected for this year's GSoC edition with XWiki!

Welcome to the XWiki development team!

Before guiding the accepted contributors to their next steps, we'd like to thank again all those who showed interest in XWiki for this Summer of Code. For the candidates that did apply but did not make the cut, if they are still interested in getting involved anyway, without Google's implication, I renew the invitation to put your ideas in practice under the guidance of the community. Even though the financial aspect will no longer be on the table, you can still take advantage of the other GSoC benefits: learning new things, gaining experience, earning recognition and all the [good things that come from participating](http://www.catb.org/~esr/writings/cathedral-bazaar/homesteading/). If you would like to do that, please let us know by replying to this message.

For the accepted contributor(s), here are some getting started hints:

**Community bonding period**

According to the [program timeline](https://developers.google.com/open-source/gsoc/timeline), this period (until - <date of Coding Start Period>) is to be used for **community bonding**.

The first thing to do, sometime this week, is to present yourself and your project on the development forum, so that everyone knows who you are and what to expect from you. Of course, you need a forum account (or you can use your xwiki.org account), so create these ASAP if you haven't already, and make sure you're [available on the chat](https://dev.xwiki.org/xwiki/bin/view/Community/Chat), for the better part of the program.

Also, you should continue getting acquainted with the code, the practices and the developers. Please make sure you all read and understand the following - **very useful** - documents on [Community](http://dev.xwiki.org/xwiki/bin/view/Community), [DevGuide](http://platform.xwiki.org/xwiki/bin/view/DevGuide/) and [Product Features](http://platform.xwiki.org/xwiki/bin/view/Features/).

**Mentorship**

We prefer *open mentorship*. While your assigned mentor is the one officially in charge with your guidance, almost all interaction should be done *in the open* as much as possible, on the chat room or on the forum. You should choose the communication medium according to the importance of the matters to be discussed: naturally, the less important issues are to be discussed on IRC/Matrix, while the design decisions, important progress announcements and testing/feedback requests go on the devs forum. This way, the community is informed on the evolution of your project, and other developers can come up any time with useful ideas and suggestions. Moreover, if your mentor gets (hypothetically) "hit by a bus" ([the bus factor](http://en.wikipedia.org/wiki/Bus_factor) :slight_smile:)  another developer can take their place with little effort.

**Communication**

Sitting alone in your room, working secretly on your project is definitely a **bad** approach. However, please keep in mind that too much communication can also be harmful, as it distracts the others from their own work. You need to be able to communicate just right:
- provide meaningful information about your progress,
- ask the community's opinion on non-trivial design or implementation decisions
- avoid wasting a lot of time on a problem, when a more experienced developer (or a contributor that fought the same problem) could quickly provide you an answer; however, do try to find the answer yourself at first.

*Wrong*: "Where do I start? What do I do now? And how do I do that? Is this good? It doesn't work, help me!"

*Better*: "Since a couple of hours ago I get a strange exception when building my project, and googling for a solution doesn't seem to help. Looking at the error, I think that there's a wrong setting for the assembly plugin, but I tried X and Y and nothing seems to work. Can someone please take a look?"

Start monitoring the forum discussions (both dev and users discussions). The [notifications email list](https://dev.xwiki.org/xwiki/bin/view/Community/Discuss#HMailingLists) is a little too high volume and technical for the moment, but it is a great knowledge source.

Also, try to make sure that you're generally available on chat (IRC/Matrix) in order to have a better view on the daily discussions, get involved and generally be easily reachable, should your mentors or any of the contributors want to easily get a hold of you. Generally speaking, if you are online (working on your project), you should also be available on the chat, just in case. Most importantly, try as much as possible to **be active**.

**Development process**

The project's lifecycle is [**NOT** design -> implementation -> testing -> documentation](http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/).

We invite you to adopt a test driven development (http://en.wikipedia.org/wiki/Test-driven_development, http://www.amazon.com/dp/0321146530/, http://www.amazon.com/dp/0201485672/) approach and to experience [agile development](http://www.amazon.com/dp/0596527675/). After the first coding week, you must have some code that works. It won't do much, of course, but it will be the seed of your project. Every functionality will be validated by tests. The code must be properly tested and commented at the time of the writing (don't think you'll do that afterwards, because experience shows that nobody does!).

Since our [code is hosted on GitHub](https://dev.xwiki.org/xwiki/bin/view/Community/SourceRepository), you should register an account there and fork some xwiki repositories, so that you can try to build XWiki from sources, and be able to contribute bugfixes. We'll add you to the [xwiki-contrib organization](https://github.com/xwiki-contrib/), and we'll create dedicated repositories for each project. We encourage you to do **at least weekly commits** (ideally, if you are well organized, you should be able to commit code that works *daily*, so try to aim at *daily commits*). This way, the code can be properly reviewed, and any problems can be detected before they grow into something too difficult to fix. One big code blob committed at the end, no matter how good it may seem, is a **failure** at several levels.

A simple way of having something functional in the first week is to prepare the maven build for your modules, which will give you the first unit test for the first class.

**Next steps, in a nutshell**

- Get more familiar with the code and development process and try to master Maven, JUnit, Selenium, component driven development, Velocity, etc.
-- Read (and update, when needed) the documentation available on xwiki.org and that is relevant to your project.
- Continue fixing a few small issues, chosen so that they are *related to your project*. You can ask on the chat for help selecting good issues, or you can pick from the (non-comprehensive) [list of easy issues](https://jira.xwiki.org/secure/IssueNavigator.jspa?mode=hide&requestId=10510).
-- Do some more medium complexity Pull Requests, this will help you get more familiar with the code your project needs to interact with and with XWiki itself.
- Refine and organize the ideas concerning your project (you can use the [Drafts space](https://dev.xwiki.org/xwiki/bin/view/Drafts/)), and write several use case scenarios.
- Start writing the first piece of code for your project.

At the end of the community bonding period, you should have a clear vision of the project, well documented on the xwiki.org wiki, you should have the build infrastructure ready, and you should be pretty familiar with the existing code you will need to interact with. When the Coding Period starts, you should be able to start productively coding at full speed, having already cleared any potential issues that might slow you down. And, of course, you should be familiar with the community and the way we communicate, this is very important!

Last thing, this is a **very important note**, on the importance of the Community Bonding Period, from the GSoC organizers:
> Remember that some GSoC contributors may require coaxing and encouragement to get them to actively participate. If you do not see regular public interaction from the GSoC contributor, you should strongly encourage it. Public interaction is important -- it is a key principle of open source -- work happens where everyone can see it. Similarly, all work done by the GSoC contributors should be shared in a publicly available repository.
>
> The past 17 years of GSoC have demonstrated that GSoC contributors who don't interact early and often are much more likely to fail later. Often they just disappear. We don't want you to waste your time on GSoC contributors who don't care about the project/organization and don't even attempt to show interest during the first few weeks of the program. Small contributions early on are a very positive signal.
>
> **Contributors who do not participate in community bonding may and should be removed from the program**.

Remember, **communication** is key and the real point of this program, so learn to use it properly and reach out whenever needed and appropriate!

Good luck, and may we all have a great Summer of Code!

-The XWiki Development Team

Get Connected