Outreach programs/Life of a successful project

How to have a successful project in the context of GSoC or Outreachy.

Definition of success

 * Intern completes the project goals as defined in the proposal (they may or may not have evolved over the course of the project), has built a network of friends and contacts in the community, and has a plan to continue contributing as a volunteer.
 * Mentors integrate the outcome of the project, get the new contributor involved in other initiatives, and want to mentor again.

Choosing Wikimedia
Choosing the right organization and a project of your interest is primary for the success of the program. Following some basic steps, if you want to spend your vacation with Wikimedia, would be: You can always checkout the handouts for starters:
 * 1) Join the  and  IRC channels on Freenode. Developers and community members hang out there, and if you want to get noticed, this is the best place. You can introduce yourself as a beginner over there (if applicable) and ask for guidance. English Wikipedia has a tutorial on how to join an IRC channel;  see the complete list of Wikimedia IRC channels.
 * 2) Join the Wikitech-l mailing list. This is important so that you get updated with various announcements regarding Wikimedia in general and your GSoC/Outreachy program. You should also consider joining the mailing list for GSoC and/or Outreachy themselves.
 * Starter kit for new Wikimedia tech volunteers.
 * How to become a MediaWiki hacker is a good place to start learning your skills and becoming a better candidate.
 * Lessons learned for mentorship programs is particularly useful when you start writing your application.

Answering your questions
You can make queries Welcome, and be part of something big!
 * 1) about organizational aspects of an Outreach program: On the Discussion page of Outreach programs
 * 2) about general Wikimedia development/technology questions: On the  and  IRC channels
 * 3) about technical questions related to a specific idea/project itself: Every project is connected with a Phabricator task; ask your explicit questions (bad example: "Can you tell me more about this?") by adding a comment on the task. You can subscribe to the task.

Coming up with a proposal
With literally tens of thousands of open tasks in our backlogs, experience tells us that most candidates have more chances of success if they bet on an existing proposal. You can check the list of featured project ideas below and our incubator of possible projects.

You can also search in Wikimedia Phabricator for tasks fitting your interests and skills. If you find an interesting task, you can suggest the idea in the task itself (a simple paragraph is enough for a first contact). When commenting, please associate the task with the tag.

Bringing your own idea is also possible, but usually this requires a good knowledge of our community and starting to plan months before the call for submissions. Before investing too much time on it, create a new task in Phabricator with a simple draft. We will share our first impression in the task itself.

If you have questions about using Phabricator, check Phabricator/Help.

Find two mentors, usually one more technical oriented, the other one more product/community oriented. For mentors, it takes approximately from 2 to 5 hours a week depending on the phase of the program (onboarding, mid-term evaluation and end of project are more demanding times). Few steps to help you get the right mentors would be:
 * 1) Comment on the project task that your project lacks a mentor, and you are in search of one. Ignore this step if you already have someone already listed in the task description
 * 2) If no-one turns up, craft an email to Wikitech-l mailing list that your project lacks a mentor, and ask for volunteers to come up and help you
 * 3) If you are still stuck, contact one of the organization admins for GSoC/Outreachy programs for Wikimedia, and put up your concern.

Submitting your proposal
After you've identified this project task you want to work on, then create a proposal task. For example, there was a project task T89287 "Graph editing in VisualEditor", several people authored proposal tasks to work on it, and the successul proposal was T93585 "Enable VisualEditor support in Graph extension (GSoC 2015 Proposal)".

The steps to get your proposal up for evaluation are: Check out general pointers for Where to start.
 * 1) Create a wiki username, if you haven't already
 * 2) Register a Phabricator account using your mediawiki.org username, if you haven't already
 * 3) Create a new task for your proposal. If your proposal addresses an existing project idea in Phabricator, then you need only click "Create subtask" in that project task, which automatically adds its projects and subscribers to your proposal.
 * 4) * Pick a short, memorable and catchy title which communicates your core idea on how to tackle the issue/project you chose.
 * 5) * Follow the application template in your proposal's description. For example, T93106 is a good proposal that we accepted.
 * 6) * Associate your proposal to the Phabricator project(s) for the program you want to apply.  #outreachy-round-11 is an active program.
 * 7) * The GSoC student guide is a good resource for anybody willing to write a good project proposal. And then there is a list of DOs and DON'Ts full of practical wisdom.
 * 8) Create a user page for yourself on mediawiki.org with relevant details, mentioning the Phabricator project task and your proposal task.

Community bonding period
All accepted interns go through a community bonding period prior to the official start of the project. The purpose of this phase is to familiarize yourself with the tools, mentors, and the community that will help you during your project.

Requirements: The first payment comes after completing this phase successfully.
 * Detailed plan agreed with your mentors.
 * Phabricator project created (instructions).
 * Meetings with mentors started.
 * Bonding period report published.

Bootstrapping a project
The newly created Phabricator project is filled with new tasks as the planning process identifies them. This is how it goes:

After a new Phabricator project is created, interns and mentors should add themselves as watchers in order to follow all its activity. Then,


 * 1) One task is identified as main task of the project, and will remain open until the project is completed. This task is usually the initial project idea (if there was one) or the task of an accepted proposal.
 * 2) * The main task is assigned to the intern leading the project.
 * 3) * Only the main task is associated with the related outreach program project (GSoC, Outreachy...)
 * 4) If there are other proposals for the same project, they are marked as duplicates of the main task. This moves all the subscribers to the main task.
 * 5) Only the main deliveries of the project are marked as subtasks of the main task. This includes main features and the evaluation tasks.
 * 6) The rest of tasks can be created as subtasks of subtasks, or simply as tasks on their own, always associated with their project.

The main task should receive only few and general comments about the project. Ideally the day to day discussions should be posted in their own specific tasks.

The reasoning of this organization is to keep the amount of project labels and notifications sane. Users interested in the progress of one project can subscribe to the main task only, and those willing to follow it closely can become watchers. Meanwhile, those interested in the general progress of a GSoC or Outreachy round can just watch the program project, receiving notifications only when one of the main tasks has updates.

Reporting
Reporting is very important for the followers of your project, your mentors, and yourself. Investing a few minutes reporting on a weekly basis will save you a lot of time and energy.

For the weekly reports, please create a Phabricator task and associate it with your project. Insert a table with the date and report columns in which you'll write your weekly report. Write your reports as telegrams, always linking to the areas of progress: tasks, patches, demos, documentation pages... It is better to deliver short or even incomplete reports on a weekly basis than trying to elaborate the best deep weekly report but then get stuck and not deliver it at all... Two good examples of weekly reports can be found at

Weekly reports might look like: There are three special reports to be delivered at the end of each evaluation period: community bonding, mid term, and final evaluation. These reports should be more extensive, like blog posts, targeted to readers having no clue about your project. Add a bit of background information, all the basic links, and if possible screenshots or other graphical elements. Again, you will see that these reports are not just useful for other, but also for yourself. They help you reflecting about your own work, and they usually help you realizing what went well, and what did you learn.
 * User:Sputniza/OPW Progress Report
 * User:Ankitashukla/Progress Reports

A typical community bonding period report might contain:


 * Work done (environment setup, links to patches merged etc.)
 * Lessons learnt
 * Problems faced and solutions found
 * Any changes to the original plan
 * Minimum Viable Product for the project decided
 * Communication plan with mentor decided

Mid-term evaluation
Requirements: The second payment comes after completing this phase successfully.
 * Weekly reports up to date.
 * Patches published and accepted (or equivalent for non-coding projects).
 * Regular meetings with mentors.
 * If there is a delay in expected deliveries, plan updated accordingly.
 * Full-time routine established

End of program evaluation
Requirements: The third and final payment comes after completing this phase successfully.
 * Weekly reports up to date.
 * In sync with mentors.
 * Full-time routine.
 * Project completed, or at least a functional prototype.
 * Tasks created for known bugs, missing features, and suggested improvements.
 * Documentation for users and contributors.
 * Wrap-up report.
 * Summary in Past projects page (GSoC, Outreachy).

Consolidation as contributor
(Coming soon.)