mirror of https://github.com/zulip/zulip.git
docs: Reorganize contribution documentation.
* Make an "Outreach programs" documentation directory. * Revamp doc on having an amazing outreach program experience. * Extract an outreach programs overview page from GSoC guide. * Add a guide on making PRs easy to review, extracted from "How to have an amazing summer with Zulip". * Create a guide for mentors, extracted from "How to have an amazing summer with Zulip". * Add a guide on how to ask great questions extracted from GSoC guide. * Extract general page on applying to outreach programs from GSoC guide. * Simplify GSoC guide page to just describe project ideas. * Many local edits to the reorganized content.
This commit is contained in:
parent
8dc1368be8
commit
1089a34c86
|
@ -0,0 +1,54 @@
|
|||
# Asking great questions
|
||||
|
||||
A well-formed question helps you learn, respects the person answering, and makes
|
||||
efficient use of time for everyone involved. Asking the right question, to the
|
||||
right person, in the right way, at the right time, is a skill which requires a
|
||||
lifetime of fine-tuning. This page offers some guidelines and resources that the
|
||||
[Zulip community](https://zulip.com/development-community/) has found helpful in this pursuit.
|
||||
|
||||
## Where to ask your question
|
||||
|
||||
It is almost always best to ask questions and have a conversation in a public
|
||||
stream, rather than in private messages. You’ll get better and faster answers
|
||||
since many people can help, and it makes it possible for others to benefit from
|
||||
the discussion.
|
||||
|
||||
The [Zulip community
|
||||
guide](https://zulip.com/development-community/#where-do-i-send-my-message)
|
||||
offers guidelines on how the major public streams in the community are used.
|
||||
Don’t stress too much about picking the right place if you’re not sure, as
|
||||
moderators can [move your question thread to a different
|
||||
stream](https://zulip.com/help/move-content-to-another-stream) if needed.
|
||||
|
||||
## How to ask a great question
|
||||
|
||||
Spending some extra time and effort to carefully formulate your question is well
|
||||
worthwhile, as it makes it much more likely that you'll get the information you
|
||||
need to move forward. There are a few wonderfully thoughtful blog posts that
|
||||
explain what it means to ask a good question:
|
||||
|
||||
- [Try, Then Ask](https://www.mattringel.com/2013/09/30/you-must-try-and-then-you-must-ask/)
|
||||
- [We Aren’t Just Making Code, We’re Making History](https://www.harihareswara.net/sumana/2016/10/12/0)
|
||||
- [How to Ask Good Questions](https://jvns.ca/blog/good-questions/)
|
||||
|
||||
In brief, to formulate a great question, you should:
|
||||
|
||||
- Try to solve your own problem first, including reading through relevant
|
||||
documentation and code.
|
||||
- Identify the precise point on which you feel stuck.
|
||||
- Formulate a clear question, which includes an appropriate amount of context
|
||||
and a specific request for help.
|
||||
|
||||
When your question is answered, follow through on the advice you receive, and (when
|
||||
appropriate) summarize the resolution of your problem so that others can learn
|
||||
from your experience.
|
||||
|
||||
You can find additional helpful tips in our guide to [what makes a great Zulip
|
||||
contributor](contributing.md#what-makes-a-great-zulip-contributor).
|
||||
|
||||
## Follow the community guidelines
|
||||
|
||||
As always, be sure to follow the [Zulip community
|
||||
norms](https://zulip.com/development-community/). In particular, check out [the
|
||||
section on getting help](https://zulip.com/development-community/#getting-help)
|
||||
before you post.
|
|
@ -7,12 +7,12 @@ maxdepth: 3
|
|||
|
||||
contributing
|
||||
../code-of-conduct
|
||||
asking-great-questions
|
||||
version-control
|
||||
code-style
|
||||
reviewable-prs
|
||||
code-reviewing
|
||||
zulipbot-usage
|
||||
bug-reports
|
||||
gsoc
|
||||
summer-with-zulip
|
||||
licensing
|
||||
```
|
||||
|
|
|
@ -0,0 +1,73 @@
|
|||
# Reviewable pull requests
|
||||
|
||||
This page offers some tips for making your pull requests easy to review.
|
||||
Following this advice will help the whole Zulip project move more quickly by
|
||||
saving maintainers time when they review your code. It will also make a big
|
||||
difference for getting your work integrated without delay.
|
||||
|
||||
## Posting a pull request
|
||||
|
||||
- Before requesting a review for your pull request, follow our guide to
|
||||
carefully [review and test your own
|
||||
code](./code-reviewing.md#reviewing-your-own-code). Doing so can save many
|
||||
review round-trips.
|
||||
|
||||
- Make sure the pull request template is filled out correctly, and that all the
|
||||
relevant points on the self-review checklist (if the repository has one) have
|
||||
been addressed.
|
||||
|
||||
- Be sure to explicitly call out any open questions, concerns, or decisions you
|
||||
are uncertain about.
|
||||
|
||||
## Addressing feedback
|
||||
|
||||
- When you update your PR after addressing a round of review feedback, be clear
|
||||
about which issues you've resolved (and how!).
|
||||
|
||||
- Even more importantly, save time for your reviewers by indicating any feedback
|
||||
you _haven't_ addressed yet.
|
||||
|
||||
## Working on larger projects
|
||||
|
||||
For a larger project, aim to create a series of small (less than 100 lines of
|
||||
code) commits that are each safely mergeable and move you towards your goal. A
|
||||
mergeable commit:
|
||||
|
||||
- Is well-tested and passes all the tests. That is, changes to tests should be in
|
||||
the same commit as changes to the code that they are testing.
|
||||
|
||||
- Does not make Zulip worse. For example, it is fine to add backend capabilities
|
||||
without adding a frontend to access them. It's not fine to add a frontend
|
||||
component with no backend to make it work.
|
||||
|
||||
Ideally, when reviewing a branch you are working on, the maintainer
|
||||
should be able to verify and merge the first few commits and leave
|
||||
comments on the rest. It is by far the most efficient way to do
|
||||
collaborative development, since one is constantly making progress, we
|
||||
keep branches small, and developers don't end up repeatedly reviewing
|
||||
the earlier parts of a PR.
|
||||
|
||||
Here is some advice on how to proceed:
|
||||
|
||||
- Use `git rebase -i` as much as you need to shape your commit
|
||||
structure. See the [Git guide](../git/overview.md) for useful
|
||||
resources on mastering Git.
|
||||
|
||||
- If you need to refactor code, add tests, rename variables, or make
|
||||
other changes that do not change the functionality of the product, make those
|
||||
changes into a series of preparatory commits that can be merged independently
|
||||
of building the feature itself.
|
||||
|
||||
- To figure out what refactoring needs to happen, you might first make a hacky
|
||||
attempt at hooking together the feature, with reading and print statements as
|
||||
part of the effort, to identify any refactoring needed or tests you want to
|
||||
write to help make sure your changes won't break anything important as you work.
|
||||
Work out a fast and consistent test procedure for how to make sure the
|
||||
feature is working as planned.
|
||||
|
||||
- Build a mergeable version of the feature on top of those refactorings.
|
||||
Whenever possible, find chunks of complexity that you can separate from the
|
||||
rest of the project.
|
||||
|
||||
See our [commit discipline guide](../contributing/version-control.md) for
|
||||
more details on writing reviewable commits.
|
|
@ -1,295 +0,0 @@
|
|||
# How to have an amazing summer with Zulip
|
||||
|
||||
The purpose of this doc is to provide advice to GSoC/ZSoC mentors and contributors
|
||||
on how to make the summer as successful as possible. It's mandatory reading, in
|
||||
addition to [Google's
|
||||
materials](https://developers.google.com/open-source/gsoc/resources/manual).
|
||||
|
||||
- Don't focus too much on doing precisely what's in the project proposal or
|
||||
following precisely that schedule. The goals are for contributors to learn and to
|
||||
advance Zulip, not to do in July what we guessed would be the right plan in
|
||||
March with limited information.
|
||||
|
||||
- We probably will want to create a Dropbox Paper document for each contributor to
|
||||
keep track of the current version of their project plan, but make sure to
|
||||
keep GitHub up to date with what issues you're working on.
|
||||
|
||||
- Claim issues using zulipbot only when you actually start work on them. And
|
||||
if someone else fixes an issue you were planning to fix, don't worry about
|
||||
it! It's great for Zulip that the project was finished, and there's plenty
|
||||
of issues to work on :D. You can help review their work to build
|
||||
your expertise in the subsystem you're working on.
|
||||
|
||||
- Look for, claim, and fix bugs to help keep Zulip polished. Bugs and polish
|
||||
are usually more important to users than new features.
|
||||
|
||||
- Help test new features! It's fun, and one of the most valuable
|
||||
ways one can contribute to any software project is finding bugs in
|
||||
it before they reach a lot of users :).
|
||||
|
||||
- Participate and be helpful in the community! Helping a new Zulip server
|
||||
administrator debug their installation problem or playing with the mobile
|
||||
app until you can get something to break are great ways to contribute.
|
||||
|
||||
- Mentors and contributors should stay in close contact, both with each other and
|
||||
the rest of the Zulip community. We recommend the following:
|
||||
|
||||
- Daily checkins on #checkins in
|
||||
[the Zulip development community](https://zulip.com/development-community/); ideally
|
||||
at some time of day you can both be online, but when not
|
||||
possible, async is better than nothing!
|
||||
|
||||
- We prefer checkins in public streams, since it makes easier for
|
||||
other contributors to keep track of what everyone else is
|
||||
working on and share ideas (and helps organization leadership
|
||||
keep track of progress). Though, of course, feel free to have
|
||||
much more involved/detailed discussions privately as well.
|
||||
|
||||
- If a mentor will be traveling or otherwise offline, mentors should make
|
||||
sure another mentor is paying attention in the meantime.
|
||||
|
||||
- Video calls are great! Mentors should do 1-2 video calls with their contributors
|
||||
calls per week, depending on length, schedules, and what's happening.
|
||||
|
||||
- Make sure to talk about not just the current project, but also meta-issues
|
||||
like your development process, where things are getting stuck, skills you
|
||||
need help learning, and time-saving tricks.
|
||||
|
||||
- If you need feedback from the community / decisions made, ask in the
|
||||
appropriate public stream in
|
||||
[the Zulip development community](https://zulip.com/development-community/). Often
|
||||
someone can provide important context that you need to succeed in your project.
|
||||
|
||||
- Communicate clearly, especially in public places! You'll get much more
|
||||
useful feedback to a well-written Zulip message or GitHub issue comment than
|
||||
one that is unclear.
|
||||
|
||||
- Be sure to mention any concerns you have with your own work!
|
||||
|
||||
- Talk with your mentor about the status of your various projects and where
|
||||
they're stuck.
|
||||
|
||||
- And when you update your PR having addressed a set of review feedback, be
|
||||
clear about which issues you've resolved (and how!) and
|
||||
especially any that you haven't yet (this helps code reviewers
|
||||
use their time well).
|
||||
|
||||
- Post screenshots and/or brief videos of UI changes; a picture can be worth
|
||||
1000 words, especially for verifying whether a design change is
|
||||
working as intended.
|
||||
|
||||
- Use #design and similar forums to get feedback on issues where we need
|
||||
community consensus on what something should look like or how it
|
||||
should work.
|
||||
|
||||
- Bring up problems early, whether technical or otherwise. If you
|
||||
find you're stressed about something, mention it your mentor
|
||||
immediately, so they can help you solve the problem. If you're
|
||||
stressed about something involving your mentor, bring it up with
|
||||
an organization admin.
|
||||
|
||||
- If you work in one a smaller Zulip project
|
||||
(e.g. `zulip-terminal`), follow the project on GitHub so you can
|
||||
keep track of what's happening there. For folks working in
|
||||
`zulip/zulip`, doing that will send you too many notifications.
|
||||
So instead, we recommend that you join Zulip's GitHub teams that
|
||||
relate to your projects and/or interests, so that you see new
|
||||
issues and PRs coming in that are relevant to your work. When we
|
||||
label an issue or PR with one of our area labels, `zulipbot` will
|
||||
automatically mention the relevant teams for that area,
|
||||
subscribing you to those issues/PR threads. You can browse the
|
||||
area teams here: https://github.com/orgs/zulip/teams (You need to
|
||||
be a member of the Zulip organization to see them;
|
||||
ask Tim for an invite if needed).
|
||||
|
||||
- Everyone's goal is to avoid contributors ending up blocked and feeling stuck.
|
||||
There are lots of things that contributors can do (and mentors can help them to)
|
||||
to avoid this:
|
||||
|
||||
- Get really good at using `git rebase -i` to produce a really clean
|
||||
commit history that's fast to review. We occasionally do workshops
|
||||
on how to do relatively complex rebases.
|
||||
|
||||
- Work on multiple parallelizable projects (or parts of projects) at a time.
|
||||
This can help avoid being stuck while waiting for something to be reviewed.
|
||||
|
||||
- It can help to plan a bit in advance; if your next project requires some
|
||||
UX decisions to be made with the community, start the conversation a few
|
||||
days before you need an answer. Or do some preparatory refactoring that
|
||||
will make the feature easier to complete and can be merged without making
|
||||
all the decisions.
|
||||
|
||||
- Think about how to test your changes.
|
||||
|
||||
- Among your various projects, prioritize as follows:
|
||||
|
||||
- (1) Fixing regressions you introduced with recently merged work (and other
|
||||
bugs you notice).
|
||||
|
||||
- (2) Responding to code review feedback and fixing your in-flight branches
|
||||
over starting new work. Unmerged PRs develop painful merge conflicts
|
||||
pretty quickly, so you'll do much less total work per feature if you're
|
||||
responsive and try to make it easy for maintainers to merge your commits.
|
||||
|
||||
- (3) Do any relevant follow-ups to larger projects you've completed, to
|
||||
make sure that you've left things better than how you found them.
|
||||
|
||||
- (4) Starting on the next project.
|
||||
|
||||
- Figure out a QA/testing process that works for you, and be sure to explain
|
||||
in your PRs how you've tested your changes. Most of the time, in a large
|
||||
open source project, is spent looking for and fixing regressions, and it
|
||||
saves everyone time when bugs can be fixed before the code is reviewed, or
|
||||
barring that, before it's merged.
|
||||
|
||||
- Plan (and if when planning fails, rebase) your branches until they are easy
|
||||
to merge partially (i.e. merging just the first commit will not make Zulip
|
||||
worse or break the tests). Ideally, when reviewing a branch of yours, the
|
||||
maintainer should be able to merge the first few commits and leave comments
|
||||
on the rest. This is by far the most efficient way to do collaborative
|
||||
development, since one is constantly making progress, we keep branches
|
||||
small, and developers don't end up reviewing the easily merged parts of a PR
|
||||
repeatedly.
|
||||
|
||||
- Look at Steve Howell's closed PRs to get a feel for how to do this well
|
||||
for even complex changes.
|
||||
|
||||
- Or Eklavya Sharma's (from GSoC 2016) to see a fellow GSoC contributor doing
|
||||
this well. (`git log -p --author=Eklavya` is a fast way to skim).
|
||||
|
||||
- Team up with other developers close to or in your time zone who are working
|
||||
on similar areas to trade timely initial code reviews. 75% of the feedback
|
||||
that the expert maintainers give is bugs/UI problems from clicking around,
|
||||
lack of tests, or code clarity issues that anyone else in the project should
|
||||
be able to point out. Doing this well can save a lot of round-trips.
|
||||
|
||||
- Help with code review! Reviewing others' changes is one of the best ways to
|
||||
learn to be a better developer, since you'll both see how others solve
|
||||
problems and also practice the art of catching bugs in unfamiliar code.
|
||||
|
||||
- It's best to start with areas where you know the surrounding code
|
||||
and expertise, but don't be afraid to open up the code in your
|
||||
development environment and read it rather than trying to
|
||||
understand everything from the context GitHub will give you. Even
|
||||
Tim reads surrounding code much of the time when reviewing things,
|
||||
and so should you :).
|
||||
|
||||
- It's OK to review something that's already been reviewed or just post a
|
||||
comment on one thing you noticed in a quick look!
|
||||
|
||||
- Even posting a comment that you tried a PR and it worked in your development
|
||||
environment is valuable; you'll save the next reviewer a bit of time
|
||||
verifying that.
|
||||
|
||||
- If you're confused by some code, usually that's because the code is
|
||||
confusing, not because you're not smart enough. So speak up when you notice
|
||||
this! Very frequently, this is a sign that we need to write more
|
||||
docs/comments or (better, if possible!) to make the code more
|
||||
self-explanatory.
|
||||
|
||||
- Plan your approach to larger projects. Usually, when tackling something big,
|
||||
there's a few phases you want to go through:
|
||||
|
||||
- Studying the subsystem, reading its docs, etc., to get a feel for how things
|
||||
work. Often a good approach is to fix some small bugs in the area to warm
|
||||
your knowledge up.
|
||||
|
||||
- Figure out how you'll test your work feature, both manually and via
|
||||
automated tests. For some projects, can save a lot of hours by doing a bit
|
||||
of pre-work on test infrastructure or `populate_db` initial data
|
||||
to make it easy for both you and code reviewers to get the state
|
||||
necessary to test a feature.
|
||||
|
||||
- Make a plan for how to create a series of small (<100LOC) commits that are
|
||||
each safely mergeable and move you towards your goal. Often this ends up
|
||||
happening through first doing a hacky attempt to hooking together the
|
||||
feature, with reading and print statements as part of the effort, to
|
||||
identify any refactoring needed or tests you want to write to help make sure
|
||||
your changes won't break anything important as you work. Work out a fast and
|
||||
consistent test procedure for how to make sure the feature is working as
|
||||
planned.
|
||||
|
||||
- Do the prerequisite test/refactoring/etc. work, and get those changes
|
||||
merged.
|
||||
|
||||
- Build a mergeable version of the feature on top of those refactorings.
|
||||
Whenever possible, find chunks of complexity that you can separate from the
|
||||
rest of the project.
|
||||
|
||||
- Spend time every week thinking about what could make contributing to Zulip
|
||||
easier for both yourself and the next generation of Zulip developers. And then
|
||||
make those ideas reality!
|
||||
|
||||
- Add Zulip to your resume on [LinkedIn](https://www.linkedin.com/company/zulip-project).
|
||||
|
||||
- Have fun! Spending your summer coding on open source is an amazing life
|
||||
opportunity, and we hope you'll have a blast. With some luck and hard work,
|
||||
your contributions to the open source world this summer will be something you
|
||||
can be proud of for the rest of your life.
|
||||
|
||||
## What makes a successful summer
|
||||
|
||||
Success for the contributor means a few things, in order of importance:
|
||||
|
||||
- Mastery of the skills needed to be a self-sufficient and effective open source
|
||||
developer. Ideally, by the end of the summer, most of the contributor's PRs should
|
||||
go through only a couple rounds of code review before being merged, both in
|
||||
Zulip and in any future open source projects they choose to join.
|
||||
Our most successful contributors end up as the maintainer for one or
|
||||
more areas within Zulip.
|
||||
|
||||
- The contributor has become a valued member of the Zulip community, and has made
|
||||
the Zulip community a better place through their efforts. Reviewing PRs,
|
||||
helping others debug, providing feedback, and finding bugs are all essential
|
||||
ways to contribute beyond the code in your own project.
|
||||
|
||||
- Zulip becoming significantly better in the areas the contributor focused on. The
|
||||
area should feel more polished, and have several new major features the
|
||||
contributor has implemented. That section of code should be more readable,
|
||||
better-tested, and have clearer documentation.
|
||||
|
||||
## Extra notes for mentors
|
||||
|
||||
- You're personally accountable for your contributor having a successful summer. If
|
||||
you get swamped and find you don't have enough time, tell the org admins so
|
||||
that we can make sure someone is covering for you. Yes, it sucks when you
|
||||
can't do what you signed up for, but even worse is to not tell anyone and thus
|
||||
prevent the project from finding a replacement.
|
||||
|
||||
- Mentors are expected to provide on the mentors stream a **brief report
|
||||
weekly** on (1) how your contributors' projects are going, (2) what (if anything)
|
||||
you're worried about, and (3) what new things you'd like to try this week to
|
||||
help your contributor. A great time to do this is after a weekly scheduled call
|
||||
with your contributor, while your recollection of the state is fresh.
|
||||
|
||||
- Timely feedback is more important than complete feedback, so get a fast
|
||||
feedback cadence going with your contributor. It's amazing how useful just 5
|
||||
minutes of feedback can be. Pay attention to the relative time zones; if you
|
||||
plan it, you can get several round trips in per day even with big time zone
|
||||
differences like USA + India.
|
||||
|
||||
- What exactly you focus on in your mentorship will vary from week to week and
|
||||
depend somewhat on what the contributor needs. It might be any combination of
|
||||
these things:
|
||||
|
||||
- Helping the contributor plan, chunk, and prioritize their work.
|
||||
|
||||
- Manually testing UI changes and helping find bugs.
|
||||
|
||||
- Doing code review of your contributor's work
|
||||
|
||||
- Providing early feedback on visual and technical design questions.
|
||||
|
||||
- Helping the contributor figure out how to test their changes.
|
||||
|
||||
- Helping the contributor break their PRs into reviewing chunks.
|
||||
|
||||
- Making sure busy maintainers like Tim Abbott provide any necessary feedback
|
||||
so that the contributor's project doesn't get stuck.
|
||||
|
||||
- Helping with the technical design of projects and making sure they're aware
|
||||
of useful and relevant reference materials.
|
||||
|
||||
- Pair programming with the contributor to help make sure you share useful tricks.
|
||||
|
||||
- Emotional support when things feel like they aren't going well.
|
|
@ -133,6 +133,16 @@ maxdepth: 3
|
|||
---
|
||||
|
||||
translating/index
|
||||
```
|
||||
|
||||
(outreach)=
|
||||
|
||||
```{toctree}
|
||||
---
|
||||
maxdepth: 3
|
||||
---
|
||||
|
||||
outreach/index
|
||||
|
||||
Index <https://zulip.readthedocs.io/en/latest/>
|
||||
```
|
||||
|
|
|
@ -0,0 +1,188 @@
|
|||
# How to apply
|
||||
|
||||
This page should help you get started with applying for an outreach program
|
||||
with Zulip.
|
||||
|
||||
We try to make the application process as valuable for the applicant as
|
||||
possible. Expect high-quality code reviews, a supportive community, and
|
||||
publicly viewable patches you can link to from your resume, regardless of
|
||||
whether you are selected.
|
||||
|
||||
## Application criteria
|
||||
|
||||
We expect applicants to have experience with the technologies relevant
|
||||
to their project, or else have strong general programming
|
||||
experience. If you are just getting started learning how to program,
|
||||
we recommend taking time to learn the basics (there are many great
|
||||
online materials available for free!), and applying in the next
|
||||
program cycle.
|
||||
|
||||
In addition to the requirements of the specific outreach program
|
||||
you're applying to, successful applicants are expected to demonstrate
|
||||
the following:
|
||||
|
||||
1. **Ability to contribute to a large codebase.** Accepted applicants
|
||||
generally have five or more merged (or nearly merged) pull
|
||||
requests, including at least a couple involving significant
|
||||
complexity. The quality of your best work is more important than
|
||||
the quantity, so be sure to [follow our coding
|
||||
guidelines](../contributing/code-style.md) and [self-review your
|
||||
work](../contributing/code-reviewing.md#reviewing-your-own-code)
|
||||
before submitting it for review.
|
||||
|
||||
2. **Clear communication.** Building open-source software is a collaborative
|
||||
venture, and effective communication is key to making it successful. Learn
|
||||
how to [ask great questions](../contributing/asking-great-questions.md), and
|
||||
explain your decisions clearly [in your commit
|
||||
messages](../contributing/version-control.md#commit-discipline) and [on your
|
||||
pull requests](../contributing/reviewable-prs.md).
|
||||
|
||||
3. **Improvement in response to feedback.** Don't worry if you make
|
||||
mistakes in your first few contributions! Everyone makes mistakes
|
||||
getting started — just make sure you learn from them!
|
||||
|
||||
We are especially excited about applicants who:
|
||||
|
||||
- Help out other applicants
|
||||
|
||||
- Try to solve their own obstacles, and then [ask well-formed
|
||||
questions](/contributing/asking-great-questions)
|
||||
|
||||
- Develop well thought out project proposals
|
||||
|
||||
Starting in 2022, being a student is not required in order to apply to
|
||||
GSoC. We are happy to accept both student and non-student GSoC
|
||||
participants.
|
||||
|
||||
## Getting started
|
||||
|
||||
If you are new to Zulip, our [contributor
|
||||
guide](../contributing/contributing.md) is the place to start. It
|
||||
offers a detailed walkthrough for submitting your first pull request,
|
||||
with many pointers to additional documentation, and tips on how to get
|
||||
help if you need it.
|
||||
|
||||
We recommend taking the following steps before diving into the issue tracker:
|
||||
|
||||
- Join the [Zulip development
|
||||
community](https://zulip.com/development-community/), and introduce yourself
|
||||
in the stream for the program you are participating in. Before you jump in, be
|
||||
sure to review the [Zulip community
|
||||
norms](https://zulip.com/development-community/).
|
||||
|
||||
- Follow our instructions to [install the development
|
||||
environment](../development/overview.md), getting help in [#provision
|
||||
help](https://chat.zulip.org/#narrow/stream/21-provision-help) if needed.
|
||||
|
||||
- Familiarize yourself with [using the development
|
||||
environment](../development/using.md).
|
||||
|
||||
- Go through the [new application feature
|
||||
tutorial](../tutorials/new-feature-tutorial.md) to get familiar with how the
|
||||
Zulip codebase is organized, and how to find code in it.
|
||||
|
||||
As you are getting started on your first pull request:
|
||||
|
||||
- Read the [Zulip guide to Git](../git/overview.md). It's especially important
|
||||
to master using `git rebase`, so that you can restructure your commits. You can
|
||||
get help in [#git help](https://chat.zulip.org/#narrow/stream/44-git-help) if
|
||||
you get stuck.
|
||||
|
||||
- To make it easier to structure your PRs well, we recommend installing a
|
||||
[graphical Git client](../git/setup.md#get-a-graphical-client).
|
||||
|
||||
- Construct [coherent, mergeable
|
||||
commits](../contributing/version-control.md#commit-discipline), with clear
|
||||
commit messages that follow the [Zulip commit style
|
||||
guide](../contributing/version-control.md#commit-messages). More broadly, clear
|
||||
communication on your pull request will make your work stand out.
|
||||
|
||||
- Carefully follow our [guide to reviewing your own
|
||||
code](../contributing/code-reviewing.md) before asking anyone else for a
|
||||
review. Catching mistakes yourself will help your PRs be merged faster, and
|
||||
folks will appreciate the quality and professionalism of your work.
|
||||
|
||||
Our documentation on [what makes a great Zulip
|
||||
contributor](../contributing/contributing.md#what-makes-a-great-zulip-contributor)
|
||||
offers some additional advice.
|
||||
|
||||
## Putting together your application
|
||||
|
||||
### What to include
|
||||
|
||||
In addition to following all the instructions for the program you are applying
|
||||
to, your application should describe the following:
|
||||
|
||||
- Why you are applying:
|
||||
- Why you're excited about working on Zulip.
|
||||
- What you are hoping to get out of your participation in the program.
|
||||
- How you selected your project.
|
||||
- Relevant experience:
|
||||
- Summary of your **prior experience with the technologies** used by Zulip.
|
||||
- Your **prior contributions to open-source projects** (including pull requests, bug
|
||||
reports, etc.), with links.
|
||||
- Any other **materials which will help us evaluate how you work**, such as
|
||||
links to personal or school projects, along with brief descriptions.
|
||||
- Your **contributions to Zulip**, including pull requests, bug reports, and helping
|
||||
others in the development community (with links to all materials).
|
||||
- A **project proposal** (see below).
|
||||
|
||||
**A note for Outreachy applicants**: It is not practical for us to individually
|
||||
help you develop a specific timeline for your application. We expect you to
|
||||
submit a project proposal as described below, and will help you manage the
|
||||
timeline for your project if your application is selected.
|
||||
|
||||
### Project proposals
|
||||
|
||||
Your first priority during the contribution period should be figuring out how to
|
||||
become an effective Zulip contributor. Start developing your project proposal
|
||||
only once you have experience with iterating on your PRs to get them ready for
|
||||
integration. That way, you'll have a much better idea of what you want to work
|
||||
on and how much you can accomplish.
|
||||
|
||||
As [discussed in the guide to having an amazing experience during the
|
||||
program](./experience.md#what-about-my-proposal):
|
||||
|
||||
> We have a fluid approach to planning, which means you are very unlikely to end
|
||||
> up working on the exact set of issues described in your proposal. Your proposal
|
||||
> is not a strict commitment (on either side).
|
||||
|
||||
Your proposal should demonstrate your thoughtfulness about what you want to work
|
||||
on, and consideration of project complexity. We will evaluate it based on the
|
||||
following criteria:
|
||||
|
||||
- Does it give us a good idea of what areas of Zulip you are most excited to
|
||||
work on?
|
||||
- Does it demonstrate some familiarity with the Zulip codebase, and reflection
|
||||
on what makes for a coherent project that is well-aligned with your interests
|
||||
and skill set?
|
||||
- Does it demonstrate your ability to put together a reasonable plan? Have you
|
||||
thought carefully about the scope of various pieces of your project and their
|
||||
dependencies? Are you taking into account the fact that there can be a lot of
|
||||
time in software development between having an initial prototype and merging
|
||||
the final, fully reviewed and tested, version of your code?
|
||||
- Are you proposing a project that would make a significant positive impact on the
|
||||
areas you plan to focus on?
|
||||
|
||||
Regardless of which program you are applying to, you can use the [GSoC project
|
||||
ideas list](./gsoc.md#project-ideas-by-area) as a source of inspiration for
|
||||
putting together your proposal.
|
||||
|
||||
### Circulating your application for feedback
|
||||
|
||||
We highly recommend posting a rough draft of your application at least one week
|
||||
before the deadline. That way, the whole development community has a chance to
|
||||
give you feedback and help you improve your proposal.
|
||||
|
||||
- If you do not have a complete draft ready, at a minimum, we recommend posting
|
||||
your **project proposal**, along with **your contributions to Zulip** for
|
||||
context.
|
||||
|
||||
- Please post a link to your draft in the Zulip development community
|
||||
stream dedicated to your program (e.g.,
|
||||
[#GSoC](https://chat.zulip.org/#narrow/stream/14-GSoC) or
|
||||
[#Outreachy](https://chat.zulip.org/#narrow/stream/391-Outreachy)). Use
|
||||
`Your name - project proposal` as the topic.
|
||||
|
||||
- We recommend linking to a draft in an app that works in the browser and allows
|
||||
commenting, such as Dropbox Paper or Google Docs.
|
|
@ -0,0 +1,327 @@
|
|||
# How to have an amazing experience
|
||||
|
||||
If you are joining Zulip as part of an outreach program (e.g.
|
||||
[GSoC](https://summerofcode.withgoogle.com/) or
|
||||
[Outreachy](https://www.outreachy.org/)), welcome! Please make sure you read
|
||||
this page carefully early on, and we encourage you to come back to it over the
|
||||
course of the program.
|
||||
|
||||
## Your goals
|
||||
|
||||
Your experience as a Zulip outreach program participant is your
|
||||
responsibility, and we strongly encourage you take full ownership. The
|
||||
more care, attention, and energy you put in, the more you'll be able
|
||||
to get out of the program. We're here to support you, but the journey
|
||||
is yours to make!
|
||||
|
||||
The following are the main goals we'll be guiding you towards, as they are
|
||||
shared by the great majority of program participants, and are aligned with the
|
||||
objectives for our umbrella programs. If you have additional goals in mind for
|
||||
your experience, please let your mentor and the community know, so that we can
|
||||
help you along.
|
||||
|
||||
- You should gain mastery of the skills needed to be a self-sufficient and
|
||||
effective open-source developer. By the end of the program, all but the most
|
||||
complex PRs should ideally go through only a couple of rounds of code review
|
||||
before being merged. Our most successful contributors gain the expertise to
|
||||
become a maintainer for one or more areas within Zulip.
|
||||
|
||||
- You should become a valued member of the Zulip community, who works to make it
|
||||
better for all involved. Reviewing PRs, helping others debug, providing
|
||||
feedback, and finding bugs are wonderful ways to contribute beyond the code in
|
||||
your own project.
|
||||
|
||||
- You should feel proud of the significant positive impact you've made on the
|
||||
areas you focused on. Your areas should be more polished, and have several
|
||||
new major features that you have implemented. The sections of code you worked
|
||||
on should be more readable, better-tested, and have clearer documentation.
|
||||
|
||||
Don't forget to have fun! Spending a few months coding on open source is an
|
||||
amazing opportunity, and we hope you'll have a blast. Your acceptance to the
|
||||
program means that we we are confident that if you put in the effort, your
|
||||
contributions to the open source world will be something you can be proud of for
|
||||
the rest of your life.
|
||||
|
||||
## You and your mentor
|
||||
|
||||
Zulip operates under a **group mentorship** model. Every participant in a Zulip
|
||||
mentorship program will:
|
||||
|
||||
- Have an assigned mentor, who will be their go-to for personal questions and
|
||||
concerns, and a consistent point of contact throughout the program.
|
||||
|
||||
- Receive lots of feedback and mentorship from others in the Zulip development
|
||||
community, in code reviews on pull requests, and by posting
|
||||
[questions](../contributing/asking-great-questions.md) and ideas in public
|
||||
streams.
|
||||
|
||||
Mentors and contributors should stay in close contact. We recommend setting up a
|
||||
weekly check-in call to make sure you stay on track and have a regular
|
||||
opportunity to ask your mentor questions and get their feedback. Talk with your
|
||||
mentor about the status of your projects, and get their advice on how to make
|
||||
progress if some project feels stuck.
|
||||
|
||||
Bring up problems early, whether technical or otherwise. If you're stressed
|
||||
about something, mention it your mentor immediately, so they can help you solve
|
||||
the problem. If you're stressed about something involving your mentor, bring it
|
||||
up with an organization admin.
|
||||
|
||||
## Communication and check-ins
|
||||
|
||||
Communicating proactively with your mentor, your peers, and the rest of the
|
||||
Zulip community is vital to having a successful mentorship program with Zulip.
|
||||
It's how we can help you make sure you're working on a great set of impactful
|
||||
issues, and not getting stuck or taking an approach that won't work out.
|
||||
|
||||
A key communication tool we use is posting regular public check-ins, which are
|
||||
a required part of the program. We recommend reading your peers' check-ins
|
||||
to get a feel for what they are working on and share ideas!
|
||||
|
||||
### Getting feedback and advice
|
||||
|
||||
We strongly encourage all Zulip contributors to post their questions and ideas
|
||||
in public streams in the [Zulip development
|
||||
community](https://zulip.com/development-community/). When you post in a public
|
||||
stream, you give everyone the opportunity to help you out, and to learn from
|
||||
reading the discussion.
|
||||
|
||||
Examples of topics you might ask about include:
|
||||
|
||||
- Making a technical decision while solving the issue.
|
||||
|
||||
- Making a product decision, e.g., if the issue description does not address some
|
||||
details, or you've identified a problem with the plan proposed in the issue.
|
||||
|
||||
- Making a design decision, e.g., if you have a couple of different ideas and
|
||||
aren't sure what looks best.
|
||||
|
||||
See our guide to [asking great
|
||||
questions](../contributing/asking-great-questions.md) for detailed advice on how
|
||||
to ask your questions effectively.
|
||||
|
||||
### How to post your check-ins
|
||||
|
||||
A check-in is a regular update that you post in the Zulip development community.
|
||||
You can find many examples in the
|
||||
[#checkins](https://chat.zulip.org/#narrow/stream/65-checkins) and
|
||||
[#GSoC](https://chat.zulip.org/#narrow/stream/14-GSoC) streams.
|
||||
|
||||
- **Frequency**: _Regular check-ins are a required for all program
|
||||
participants._ If you are working 20+ hours per week, post a check-in at least
|
||||
twice a week, e.g., Tuesday and Friday. If you are working less than 20 hours
|
||||
per week, post a check-in at least once a week.
|
||||
|
||||
- **Where to post**: Unless your mentor or program administrator requests
|
||||
otherwise, post your check-ins in the stream for your program
|
||||
(e.g., [#GSoC](https://chat.zulip.org/#narrow/stream/14-GSoC) or
|
||||
[#Outreachy](https://chat.zulip.org/#narrow/stream/391-Outreachy)), using your
|
||||
name as the topic.
|
||||
|
||||
- **What to include** in each check-in:
|
||||
|
||||
- The **status** of each ongoing project, e.g., in progress, awaiting feedback,
|
||||
addressing review feedback, stuck on something, blocked on other work, etc.
|
||||
To make your update easy to read, include brief descriptions of what you're
|
||||
working on, not just issue/PR numbers.
|
||||
|
||||
- For projects where you are waiting on feedback, what **type of feedback** is
|
||||
needed (e.g. product review, next round of code review after initial
|
||||
feedback has been addressed, answer to some question, etc.). Use [silent
|
||||
mentions](https://zulip.com/help/mention-a-user-or-group#silently-mention-a-user)
|
||||
to indicate whose feedback is required, if you think you know who it should
|
||||
be.
|
||||
|
||||
- Any questions or problems you **feel stuck** on. If there's an ongoing thread
|
||||
elsewhere, please link to it. Please post each question/problem in a
|
||||
separate message to make it convenient to quote-and-reply to address it.
|
||||
Note that discussions about your work will happen in all the usual places
|
||||
(#**frontend** , #**backend** , #**design** , etc.), and those are the
|
||||
streams where you should be _starting_ conversations. Your check-ins are a
|
||||
place to point out where you're feeling stuck, e.g., there was some
|
||||
discussion in a stream or on GitHub, but it seems to have petered out
|
||||
without getting to a decision, and you aren't sure what to do.
|
||||
|
||||
- What you've been **actively working** on since your last check-in.
|
||||
|
||||
- What you **intend to focus** on until your next check-in. Indicate if you are
|
||||
unsure and would appreciate some suggestions or feedback on your plan.
|
||||
|
||||
## Peer reviews
|
||||
|
||||
Reviewing others' changes is one of the best ways to learn to be a better
|
||||
developer, since you'll both see how others solve problems and also practice the
|
||||
art of catching bugs in unfamiliar code. As discussed in the [code review
|
||||
guide](../contributing/code-reviewing.md):
|
||||
|
||||
> Doing code reviews is a valuable contribution to the Zulip project. It’s also
|
||||
> an important skill to develop for participating in open-source projects and
|
||||
> working in the industry in general... Anyone can do a code review – you don’t
|
||||
> have to have a ton of experience.
|
||||
|
||||
For programs with multiple participants, we will set up a **code review buddies**
|
||||
system at the start of the program:
|
||||
|
||||
1. Everyone will be assigned to a group of 2-3 people who will be your buddies
|
||||
for first-round code reviews. (In some cases, your buddy will be your
|
||||
mentor.)
|
||||
|
||||
2. Start by [self-reviewing your own code](../contributing/code-reviewing.md).
|
||||
|
||||
3. When ready, request a review from your code review buddies. Use [GitHub's
|
||||
review request
|
||||
feature](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/requesting-a-pull-request-review)
|
||||
to send your request. This makes the PR's status clear to project maintainers.
|
||||
You may also want to send a quick private message to let your buddies know
|
||||
their attention is needed.
|
||||
|
||||
4. Please respond to code review requests promptly (within one workday), and
|
||||
follow the guidelines [in the code review
|
||||
guide](../contributing/code-reviewing.md).
|
||||
|
||||
Your initial reply does not have to be a full review. If you’re pressed for
|
||||
time, start by quickly sharing your initial thoughts or feedback on the general
|
||||
direction, and let the PR author know when you expect to provide a more detailed
|
||||
review.
|
||||
|
||||
Make sure the GitHub comments on the PR are always clear on the status -- e.g.
|
||||
buddy code review has been requested, feedback is being discussed, code buddy
|
||||
has approved the PR, etc. This will help project maintainers know when it's time
|
||||
to move on to the next step of the review process.
|
||||
|
||||
## How do I figure out what to work on?
|
||||
|
||||
Our goal is for contributors to improve their skills while making meaningful
|
||||
contributions to Zulip. We like to be flexible, which means that you are
|
||||
unlikely to work precisely on the issues described in your proposal, and that's
|
||||
OK!
|
||||
|
||||
In practice, this means that over the course of the program, you will:
|
||||
|
||||
- Get frequent guidance regarding what to work on next by posting your ideas and
|
||||
questions about what to tackle next in your
|
||||
[check-ins](#how-to-post-your-check-ins).
|
||||
|
||||
- Like other Zulip contributors, [claim
|
||||
issues](../contributing/contributing.md#claiming-an-issue) only when you
|
||||
actually start work on them.
|
||||
|
||||
If someone else fixes an issue you were planning to fix, don't worry about it!
|
||||
Consider [reviewing their work](../contributing/code-reviewing.md) to build your
|
||||
expertise in the subsystem you're working on.
|
||||
|
||||
### Prioritization
|
||||
|
||||
Always keep the following order of priorities in mind:
|
||||
|
||||
1. Your top priority should be **fixing any regressions you introduced** with
|
||||
recently merged work.
|
||||
|
||||
2. **Review others' pull requests** promptly. As you'll experience yourself, getting quick
|
||||
feedback on your PR helps immensely. As such, if you are asked to review a
|
||||
PR, aim to provide an initial reply within one workday.
|
||||
|
||||
3. If any of your PRs are actively undergoing review or are marked as
|
||||
"integration review" ready, be sure to **rebase** them whenever merge
|
||||
conflicts arise.
|
||||
|
||||
4. Next, prioritize **responding to code review feedback** over starting new
|
||||
work. This helps you and your reviewers maintain context, which makes it
|
||||
easier to make progress towards getting your work integrated.
|
||||
|
||||
5. Do any relevant **follow-ups to larger projects** you've completed, to make sure
|
||||
that you've left things better than how you found them.
|
||||
|
||||
6. Finally, if all of the above are in good shape, **find a new issue** to pick up!
|
||||
|
||||
### What about my proposal?
|
||||
|
||||
We have a fluid approach to planning, which means you are very unlikely to end
|
||||
up working on the exact set of issues described in your proposal. Your proposal
|
||||
is not a strict commitment (on either side).
|
||||
|
||||
In terms of managing your work:
|
||||
|
||||
- Regardless of whether an issue was mentioned in your proposal, make
|
||||
sure you bring it up in your check-ins when you plan to start
|
||||
working on something. Project priorities shift over time, and we
|
||||
may have suggestions for higher-priority work in your area of
|
||||
interest, or issues that will serve as good preparation for other
|
||||
work you are excited about. It's also possible that a project idea
|
||||
is not ready to be worked on, or needs to be sequenced after other projects.
|
||||
|
||||
- When asking for recommendations for what to work on next, it's helpful to
|
||||
include a reminder of what areas you're most excited about, especially early
|
||||
on in the program when we're still getting to know you. Do not expect program
|
||||
administrators to remember what issues were listed in your proposal.
|
||||
|
||||
While some program participants stick closely to the spirit of their proposal,
|
||||
others find new areas they are excited about in the course of their work. You
|
||||
can be highly successful in the program either way!
|
||||
|
||||
### Tips for finding issues to pick up
|
||||
|
||||
- Look for, claim, and fix bugs to help keep Zulip polished. Bugs and polish
|
||||
make a huge difference to our users' experience. If you can fix a
|
||||
[high-priority
|
||||
bug](https://github.com/zulip/zulip/issues?page=2&q=is%3Aopen+is%3Aissue+label%3Abug+label%3A%22priority%3A+high%22)
|
||||
in an area you've been working on, it is likely to have more impact than any
|
||||
new feature you might build.
|
||||
|
||||
- If you're working on something other than the Zulip server / web app codebase,
|
||||
follow your project on GitHub to keep track of what's happening.
|
||||
|
||||
- The Zulip server / web app project is too active to follow, so instead we
|
||||
recommend joining [Zulip's GitHub teams](https://github.com/orgs/zulip/teams)
|
||||
that relate to your projects and/or interests. When an area label is added to
|
||||
an issue or PR, [Zulipbot](https://github.com/zulip/zulipbot) automatically
|
||||
mentions the relevant teams for that area, subscribing all team members to the
|
||||
issue or PR thread.
|
||||
|
||||
### Staying productive
|
||||
|
||||
Here are some tips for making sure you can always be productive, even when
|
||||
waiting for a question to be answered or for the next round of feedback on a PR:
|
||||
|
||||
- You should be working on multiple issues (or parallelizable parts of a large
|
||||
issue) at a time. That way, if you find yourself blocked on one project, you
|
||||
can always push on a different one in the meantime.
|
||||
|
||||
- It can help to plan a bit in advance by thinking about the issue you intend to
|
||||
pick up next. Are there decisions that will require input from others? Try to
|
||||
start the conversation a few days before you need an answer.
|
||||
|
||||
- If you are waiting for some decision to be finalized, consider doing
|
||||
preparatory refactoring that will make the feature easier to complete and can
|
||||
already be merged.
|
||||
|
||||
## How else can I contribute?
|
||||
|
||||
- Participate and be helpful in the community! Helping a new contributor get
|
||||
started or answering a user's question are great ways to contribute.
|
||||
|
||||
- Test and give feedback on new features that are deployed in the development
|
||||
community! It's fun, and it helps us find bugs before they reach our users.
|
||||
|
||||
- As you are doing your work, keep thinking about what could make contributing to Zulip
|
||||
easier for both yourself and the next generation of Zulip contributors. And then
|
||||
make those ideas reality!
|
||||
|
||||
## Timeline extensions for GSoC
|
||||
|
||||
Starting in 2022, it became possible to extend the timeline of a GSoC project.
|
||||
This can be a great idea if you don't have a lot of time to dedicate each week,
|
||||
or have an interruption during the program (e.g., getting sick, travel, family
|
||||
obligations, etc.).
|
||||
|
||||
We're generally very flexible, so if extending your project dates would make it
|
||||
less stressful to put in the required hours, please discuss this with your
|
||||
mentor and Zulip's GSoC administrator. Please start this conversation
|
||||
proactively as soon as you realize that you might need an extension, as this
|
||||
will give us confidence that you'll be able to manage your time effectively to
|
||||
successfully complete the program.
|
||||
|
||||
It is possible to have the midterm evaluation happen more than half-way through
|
||||
the project timeline. If the balance of hours you plan to spend on GSoC is
|
||||
significantly weighted towards the latter half of your GSoC contribution period,
|
||||
please contact Zulip's program administrator to discuss pushing out the midterm
|
||||
evaluation.
|
|
@ -1,231 +1,30 @@
|
|||
# Google Summer of Code
|
||||
# GSoC project ideas
|
||||
|
||||
## About us
|
||||
This page describes ideas you can use as a starting point for your project
|
||||
proposal. If you have not done so yet, you should **start by reading our [guide on
|
||||
how to apply](./apply.md)** to a Zulip outreach program. As noted in the guide:
|
||||
|
||||
[Zulip](https://zulip.com) is the only modern team chat app that is ideal for both
|
||||
live and asynchronous conversations. Zulip has a web app, a cross-platform
|
||||
mobile app for iOS and Android, cross-platform desktop and terminal apps, and
|
||||
over 100 native integrations. The entire Zulip codebase is 100% open source.
|
||||
> Your first priority during the contribution period should be figuring out how
|
||||
> to become an effective Zulip contributor. Start developing your project proposal
|
||||
> only once you have experience with iterating on your PRs to get them ready for
|
||||
> integration. That way, you'll have a much better idea of what you want to work
|
||||
> on and how much you can accomplish.
|
||||
|
||||
Zulip has been gaining in popularity since it was [released as open source
|
||||
software][oss-release] in late 2015, with code contributions from [over 1000
|
||||
people](https://zulip.com/team) from all around the world. Thousands of people
|
||||
use Zulip every day, and your work on Zulip will have meaningful impact
|
||||
on their experience.
|
||||
## Project size and difficulty
|
||||
|
||||
[oss-release]: https://blogs.dropbox.com/tech/2015/09/open-sourcing-zulip-a-dropbox-hack-week-project/
|
||||
|
||||
As an organization, we value engaged, responsive mentorship and making sure our
|
||||
product quality is extremely high. You can expect to receive disciplined code
|
||||
reviews by highly experienced engineers. Since Zulip is a team chat product,
|
||||
your GSoC experience with the Zulip project will be highly interactive.
|
||||
|
||||
> _“The experience of working with Zulip for the summer was really phenomenal and
|
||||
> taught me a lot about software development and working with a community. Zulip
|
||||
> has one of the best open source communities out there who are super friendly
|
||||
> and welcoming. You learn a lot just by watching others work and talk.”_ – Sai
|
||||
> Rohitth Chiluka, Zulip GSoC 2021 participant
|
||||
|
||||
As part of our commitment to mentorship, Zulip has over 160,000 words of
|
||||
[documentation for
|
||||
developers](../index.md#welcome-to-the-zulip-documentation), much of it
|
||||
designed to explain not just how Zulip works, but why Zulip works the way that
|
||||
it does. To learn more about our mission and values, check out [this blog
|
||||
post](https://blog.zulip.com/2021/04/28/why-zulip-is-on-github-sponsors/)!
|
||||
|
||||
## The Zulip GSoC experience
|
||||
|
||||
Zulip has been a GSoC mentoring organization since 2016, and we accept 15-20
|
||||
GSoC participants each summer. We have also mentored several interns through the
|
||||
[Outreachy](https://www.outreachy.org/) program, and hundreds of Google Code-In
|
||||
participants.
|
||||
|
||||
Zulip operates under a **group mentorship** model. While you will have an
|
||||
assigned mentor, you will also get lots of feedback from other members of the
|
||||
[Zulip development community](https://zulip.com/development-community/) by
|
||||
posting your questions and ideas in public streams. We encourage GSoC
|
||||
participants to help each other out as well!
|
||||
|
||||
Many GSoC participants stay involved with the project past the official end of
|
||||
the program. A number of folks who get started with GSoC go on to mentor the
|
||||
next cohort of participants, and several have joined Zulip's team of core
|
||||
maintainers.
|
||||
|
||||
To learn more about the experience of doing GSoC with Zulip, check out our
|
||||
[Zulip's Google Summer of Code 2021 blog
|
||||
post](https://blog.zulip.com/2021/09/30/google-summer-of-code-2021/). Our [guide
|
||||
for having a great summer with Zulip](summer-with-zulip.md) will
|
||||
also give you a feel for what it's like to do GSoC with us.
|
||||
|
||||
> _“It has been the best summer I've ever had! I'm thankful to my mentors, my
|
||||
> peers, Zulip, and Google for providing me an opportunity of getting involved
|
||||
> in the community! You have helped and supported me to become a better software
|
||||
> developer and a passionate open-source contributor.”_ – Sarthak Garg, Zulip
|
||||
> GSoC 2021 participant
|
||||
|
||||
## Getting started
|
||||
|
||||
We have an easy-to-set-up development environment, and a library of
|
||||
tasks that are great for first-time contributors. Use
|
||||
[our first-time Zulip developer guide](contributing.md#your-first-codebase-contribution)
|
||||
to get your Zulip development environment set up and to find your first issue. If you have any
|
||||
trouble, please speak up in the
|
||||
[#GSoC](https://chat.zulip.org/#narrow/stream/14-GSoC) stream on the
|
||||
[Zulip development community server](https://zulip.com/development-community/)
|
||||
(use your name as the topic).
|
||||
|
||||
## Application tips, and how to become a strong candidate
|
||||
|
||||
Zulip has some of the highest standards of any GSoC organization. The most
|
||||
important component of a strong application is to demonstrate your ability to
|
||||
contribute to a large codebase. Accepted applicants generally have five or more
|
||||
merged (or nearly merged) pull requests, including at least a couple of
|
||||
significant changes (on the order of 100+ lines).
|
||||
|
||||
The quality of your best work is more important than the quantity, so be
|
||||
sure to follow our coding guidelines and test your work before submitting it for
|
||||
review. Don't worry if you make mistakes in your first few
|
||||
contributions! Everyone makes mistakes getting started — just make sure you don't
|
||||
make the same mistakes next time.
|
||||
|
||||
It's best to get started with Zulip early, so that you have time to learn, make
|
||||
contributions, and put together a strong proposal. However, we recommend waiting
|
||||
until the last few weeks to formally write up and submit your application.
|
||||
|
||||
The GSoC 2022 application deadline is April 19, 2022. Please follow [GSoC's application process
|
||||
instructions](https://google.github.io/gsocguides/student/). Your application should include the following:
|
||||
|
||||
- Details on any experience you have related to the technologies used
|
||||
by Zulip, or related to our product approach.
|
||||
- Links to materials which help us evaluate your level of experience and
|
||||
how you work, such as personal projects of yours, including any
|
||||
existing open source or open culture contributions you've made and
|
||||
any bug reports you've submitted to open source projects.
|
||||
- Some notes on what you are hoping to get out of your project.
|
||||
- A description of the project you'd like to do, and why you're
|
||||
excited about it.
|
||||
- Some notes on why you're excited about working on Zulip.
|
||||
- A link to your initial contribution(s).
|
||||
|
||||
We expect applicants to either have experience with the technologies
|
||||
relevant to their project or have strong general programming
|
||||
experience. We also expect applicants to be excited about learning
|
||||
how to do disciplined, professional software engineering, where they
|
||||
can demonstrate through reasoning and automated tests that their code
|
||||
is correct.
|
||||
|
||||
For all of our projects, an important skill to develop is a good
|
||||
command of Git; read [our Git guide](../git/overview.md) in full to
|
||||
learn how to use it well. Of particular importance is mastering using
|
||||
`git rebase` so that you can construct commits that are clearly correct
|
||||
and explain why they are correct. We highly recommend investing in
|
||||
learning a [graphical Git client](../git/setup.md) and learning to
|
||||
write good commit structures and messages; this is more important than
|
||||
any other single skill for contributing to a large open source
|
||||
project like Zulip.
|
||||
|
||||
We are excited about candidates who submit good contributions to Zulip projects,
|
||||
help other applicants on [GitHub](https://github.com/zulip/zulip) and on
|
||||
[chat.zulip.org](https://zulip.com/development-community), learn from our
|
||||
suggestions, [try to solve their own obstacles and then ask well-formed
|
||||
questions](https://www.mattringel.com/2013/09/30/you-must-try-and-then-you-must-ask/),
|
||||
and develop well thought out project proposals.
|
||||
|
||||
For the first time in 2022, being a student is not required in order to apply to
|
||||
GSoC. We are happy to accept both student and non-student participants.
|
||||
|
||||
Our documentation on [what makes a great Zulip
|
||||
contributor](contributing.md#what-makes-a-great-zulip-contributor)
|
||||
offers some additional helpful information. We also recommend reviewing the
|
||||
[official GSoC
|
||||
resources](https://developers.google.com/open-source/gsoc/resources/),
|
||||
especially the [Contributor/Student
|
||||
Guide](https://google.github.io/gsocguides/student/).
|
||||
|
||||
## Questions are important
|
||||
|
||||
A successful GSoC revolves around asking well-formed questions.
|
||||
A well-formed question helps you learn, respects the person answering,
|
||||
and reduces the time commitment and frustration level of everyone
|
||||
involved. Asking the right question, to the right person, in the right
|
||||
way, at the right time, is a skill which requires a lifetime of
|
||||
fine-tuning, but Zulip makes this a little bit easier by providing a
|
||||
general structure for asking questions in the Zulip community.
|
||||
|
||||
This structure saves time answering common questions while still
|
||||
providing everyone the personal help they need, and maintains balance
|
||||
between stream discussion and documentation. Becoming familiar and
|
||||
comfortable with this rhythm will be helpful to you as you interact
|
||||
with other developers on
|
||||
[chat.zulip.org](https://zulip.com/development-community). It is always
|
||||
better (and Zulip’s strong preference) to ask questions and have
|
||||
conversation through a public stream rather than a private message or
|
||||
an email. This benefits you by giving you faster response times and
|
||||
the benefit of many minds, as well as benefiting the community as
|
||||
other contributors learn from reading the conversation.
|
||||
|
||||
- Stick to the [community norms](https://zulip.com/development-community/).
|
||||
- Read these three blog posts
|
||||
- [Try, Then Ask](https://www.mattringel.com/2013/09/30/you-must-try-and-then-you-must-ask/)
|
||||
- [We Aren’t Just Making Code, We’re Making History](https://www.harihareswara.net/sumana/2016/10/12/0)
|
||||
- [How to Ask Good Questions](https://jvns.ca/blog/good-questions/)
|
||||
- Understand [what makes a great Zulip contributor](contributing.md#what-makes-a-great-zulip-contributor)
|
||||
|
||||
This is a typical question/response sequence:
|
||||
|
||||
1. You [try to solve your problem until you get stuck, including
|
||||
looking through our code and our documentation, then start
|
||||
formulating your request for
|
||||
help](https://www.mattringel.com/2013/09/30/you-must-try-and-then-you-must-ask/).
|
||||
1. You ask your question.
|
||||
1. Someone directs you to a document.
|
||||
1. You go read the document to find the answer to your question.
|
||||
1. You find you are confused about a new thing.
|
||||
1. You ask another question.
|
||||
1. Having demonstrated your the ability to read,
|
||||
think, and learn new things, someone will have a longer talk with
|
||||
you to answer your new, specific question.
|
||||
1. You and the other person collaborate to improve the document you
|
||||
read in step 3. :-)
|
||||
|
||||
As a final note on asking for help, please make use of [Zulip's
|
||||
Markdown](https://zulip.com/help/format-your-message-using-markdown)
|
||||
when posting questions; code blocks are nicer for reading terminal
|
||||
output than screenshots. And be sure to read the traceback before
|
||||
posting it; often the error message explains the problem or hints that
|
||||
you need more scrollback than just the last 20 lines.
|
||||
|
||||
## Project ideas
|
||||
|
||||
Once you have several PRs merged (or at least one significant PR merged), you
|
||||
can start developing a specific project plan. We recommend discussing your ideas
|
||||
in the [#GSoC](https://chat.zulip.org/#narrow/stream/14-GSoC) stream in the Zulip
|
||||
development community, in order to get quick feedback from whoever is online.
|
||||
|
||||
This section contains the seeds of project ideas; you will need to do research
|
||||
on the Zulip codebase, read issues on GitHub, and talk with developers to put
|
||||
together a complete project proposal. It's also fine to come up with your own
|
||||
project ideas. As you'll see below, you can put together a great project around
|
||||
one of the [area labels](https://github.com/zulip/zulip/labels) on GitHub; each
|
||||
has a cluster of problems in one part of the Zulip project that we'd love to
|
||||
improve.
|
||||
GSoC offers two project size options: 175 hours and 350 hours. We have
|
||||
designed all our projects to have incremental milestones that can be
|
||||
completed throughout the program. Consequently, all Zulip projects
|
||||
described below are compatible with either project size. Of course,
|
||||
the amount of progress you will be expected to make depends on whether
|
||||
you are doing a 175-hour or 350-hour project.
|
||||
|
||||
We don't believe in labeling projects by difficulty, because the level of
|
||||
difficulty is highly dependent on your particular skills. To help you find
|
||||
a great project, we list the skills needed, and try to emphasize where strong
|
||||
skills with particular tools are likely to be important for a given project.
|
||||
|
||||
We will never reject a strong applicant because their project idea was
|
||||
not a top priority. On the flip side, we often reject applicants proposing
|
||||
valuable projects when we haven't seen compelling work from the applicant.
|
||||
|
||||
More important to us than specific deliverables in a project proposal
|
||||
is a clear body of work to focus on. E.g., if we see a proposal with 8
|
||||
Markdown processor issues, we'll interpret this as an applicant excited
|
||||
to work on the Markdown processor for the summer, even if the specific
|
||||
set of 8 issues may not be the right ones to invest in.
|
||||
|
||||
### Focus areas
|
||||
## Focus areas
|
||||
|
||||
For 2022, we are particularly interested in GSoC contributors who have
|
||||
strong skills at visual design, HTML/CSS, mobile development, full
|
||||
|
@ -239,14 +38,19 @@ the project. Every area of Zulip could benefit from the work of a
|
|||
contributor with strong programming skills, so don't feel discouraged if
|
||||
the areas mentioned above are not your main strength.
|
||||
|
||||
### Project size
|
||||
## Project ideas by area
|
||||
|
||||
GSoC offers two project size options: 175 hours and 350 hours. We have
|
||||
designed all our projects to have incremental milestones that can be
|
||||
completed throughout the summer. Consequently, all Zulip projects
|
||||
described below are compatible with either project size. Of course,
|
||||
the amount of progress you will be expected to make depends on whether
|
||||
you are doing a 175-hour or 350-hour project.
|
||||
This section contains the seeds of project ideas; you will need to do research
|
||||
on the Zulip codebase, read issues on GitHub, and talk with developers to put
|
||||
together a complete project proposal. It's also fine to come up with your own
|
||||
project ideas. As you'll see below, you can put together a great project around
|
||||
one of the [area labels](https://github.com/zulip/zulip/labels) on GitHub; each
|
||||
has a cluster of problems in one part of the Zulip project that we'd love to
|
||||
improve.
|
||||
|
||||
**Note: The project ideas on this page are from summer 2022.** In the future, we
|
||||
will update them with details for 2023. You can expect the updated list to look
|
||||
similar to what you'll find below.
|
||||
|
||||
### Full stack and web frontend focused projects
|
||||
|
||||
|
@ -604,25 +408,3 @@ Experts: Rein Zustand, Steve Howell
|
|||
communities. 175 or 350 hours; medium difficulty.
|
||||
**Skills useful**: Python 3, reading feedback from users, CSS,
|
||||
GitHub Actions.
|
||||
|
||||
## Circulating proposals (March to April)
|
||||
|
||||
If you're applying to GSoC, we'd like you to publicly post a rough draft of
|
||||
a few sections of your proposal at least one week before the application
|
||||
deadline. That way, the whole development community has a chance to give you
|
||||
feedback and help you improve your proposal.
|
||||
|
||||
- **What to post:** Please include (1) Links to your contributions
|
||||
to Zulip (or other projects), and (2) a paragraph or two explaining
|
||||
what you plan to work on.
|
||||
- **How to post:** We generally prefer Dropbox Paper or Google
|
||||
Docs, since those platforms allow people to look at the text without
|
||||
having to log in or download a particular app, and you can update the
|
||||
draft as you improve your idea.
|
||||
- **How to ask for feedback:** Please post a link to your draft in the
|
||||
[#GSoC](https://chat.zulip.org/#narrow/stream/14-GSoC) stream in the [Zulip
|
||||
development community](https://zulip.com/development-community/).
|
||||
|
||||
Thanks for being interested in Zulip! We're always happy to help volunteers get
|
||||
started contributing to our open-source project, whether or not they go through
|
||||
GSoC. We hope to hear from you soon!
|
|
@ -0,0 +1,13 @@
|
|||
# Outreach programs
|
||||
|
||||
```{toctree}
|
||||
---
|
||||
maxdepth: 3
|
||||
---
|
||||
|
||||
overview
|
||||
apply
|
||||
experience
|
||||
gsoc
|
||||
mentoring
|
||||
```
|
|
@ -0,0 +1,100 @@
|
|||
# Mentoring
|
||||
|
||||
Mentoring an outreach program participant is a great way to help bring up the
|
||||
next generation of open-source contributors and support the Zulip community. The
|
||||
experience of watching your mentee's skills develop can be truly rewarding, and
|
||||
we encourage you to give it a try.
|
||||
|
||||
Signing up to mentor means committing to being reliable source of support on your
|
||||
mentee's open-source journey over the course of the program. By signing up,
|
||||
you're committing to dedicating roughly 3-5 hours a week to the program.
|
||||
|
||||
Mentors generally have weekly calls with their mentees to answer any questions
|
||||
and help make sure that everything is on track. You are also expected to help
|
||||
program administrators keep an eye on your mentee's progress, and flag any
|
||||
concerns you might have.
|
||||
|
||||
## Who can mentor
|
||||
|
||||
In order to mentor with Zulip, you need to have spent significant time working
|
||||
on Zulip yourself. You need to be familiar with what it takes to get work
|
||||
integrated, so that you can help your mentee with this process. We encourage
|
||||
anyone who has successfully completed a mentorship program with Zulip as a
|
||||
participant to give mentorship a try!
|
||||
|
||||
Note that you do _not_ need to have any expertise in the part of the
|
||||
codebase that your mentee is working in. We have seen many successful
|
||||
mentor-mentee relationships where the mentor was new to the parts of
|
||||
the codebase that were the focus of the project.
|
||||
|
||||
You also do not need to be a currently active contributor to Zulip. Our
|
||||
expectations and patterns of getting work done have been quite consistent over
|
||||
time, and it should be easy for you to catch up on anything that's changed since
|
||||
you were actively involved.
|
||||
|
||||
## Supporting your mentee
|
||||
|
||||
At the start of the program, please read our [guide](experience.md) for program
|
||||
participants to understand Zulip's expectations for your mentee.
|
||||
|
||||
What exactly you focus on in your mentorship will vary from week to week, and
|
||||
will depend on what your mentee needs. It might be any combination of:
|
||||
|
||||
- Helping your mentee plan, chunk, and prioritize their work.
|
||||
|
||||
- [Manually testing](../contributing/code-reviewing.md#manual-testing) UI
|
||||
changes and helping find bugs or identify corner cases needing
|
||||
further discussion.
|
||||
|
||||
- Providing early feedback on visual and technical design questions.
|
||||
|
||||
- Helping your mentee figure out how to test their changes.
|
||||
|
||||
- Helping your mentee break their PRs into [coherent
|
||||
commits](../contributing/version-control.md#commit-discipline).
|
||||
|
||||
- Doing [code review](../contributing/code-reviewing.md) of your
|
||||
mentee's work.
|
||||
|
||||
- Helping with the technical design of projects and making sure
|
||||
they're aware of useful and relevant reference materials.
|
||||
|
||||
- Pair programming with your mentee to share useful tricks.
|
||||
|
||||
- Emotional support when things feel like they aren't going well.
|
||||
|
||||
It might seem challenging to review code if you're not an expert on
|
||||
your mentee’s focus area. Don't let yourself be intimidated!
|
||||
Reviewing changes to code your don't fully understand is a common
|
||||
experience in software development, and you can still provide valuable
|
||||
feedback.
|
||||
|
||||
If you don’t understand something about the changes being made, there
|
||||
is a good chance others would also find it confusing. Asking your
|
||||
mentee for an explanation will itself be valuable feedback on what
|
||||
parts of the PR need to be commented or rewritten in a more clear way.
|
||||
|
||||
## Managing challenges
|
||||
|
||||
We rely on you to proactively flag your concerns to Zulip's program
|
||||
administrators as early as possible. Situations you should bring up include:
|
||||
|
||||
- Lack of communication from your mentee, e.g., missing a scheduled call,
|
||||
missing multiple [check-ins](./experience.md#communication-and-check-ins), lack
|
||||
of response to PR reviews, etc.
|
||||
|
||||
- If your mentee's rate of progress on their projects is not commensurate with
|
||||
the hours of work they are supposed to be dedicating to the project.
|
||||
|
||||
- If you are not seeing improvement in response to the feedback you give.
|
||||
|
||||
- If your mentee seems to be struggling, deeply frustrated, or otherwise is not
|
||||
having a good experience with the program.
|
||||
|
||||
- Any significant questions or concerns raised by your mentee that you cannot
|
||||
resolve, which for some reason your mentee cannot raise directly.
|
||||
|
||||
- If it turns out that cannot dedicate sufficient time to support your mentee
|
||||
for all or part of the remaining duration of the program. As long as Zulip's
|
||||
program administrators are informed, we can make sure someone else covers for
|
||||
you.
|
|
@ -0,0 +1,74 @@
|
|||
# Outreach programs overview
|
||||
|
||||
This page describes what it's like to participate in a Zulip outreach program,
|
||||
such as [Google Summer of Code (GSoC)](https://summerofcode.withgoogle.com/) or
|
||||
[Outreachy](https://www.outreachy.org/).
|
||||
|
||||
## About Zulip
|
||||
|
||||
[Zulip](https://zulip.com) is the only modern team chat app that is ideal for both
|
||||
live and asynchronous conversations. Zulip has a web app, a cross-platform
|
||||
mobile app for iOS and Android, cross-platform desktop and terminal apps, and
|
||||
over 100 native integrations. The entire Zulip codebase is 100% open source.
|
||||
|
||||
Zulip has been gaining in popularity since it was [released as open source
|
||||
software][oss-release] in late 2015, with code contributions from [over 1000
|
||||
people](https://zulip.com/team) from all around the world. Thousands of people
|
||||
use Zulip every day, and your work on Zulip will have meaningful impact
|
||||
on their experience.
|
||||
|
||||
[oss-release]: https://blogs.dropbox.com/tech/2015/09/open-sourcing-zulip-a-dropbox-hack-week-project/
|
||||
|
||||
As an organization, we value engaged, responsive mentorship and making sure our
|
||||
product quality is extremely high. You can expect to receive disciplined code
|
||||
reviews by highly experienced engineers. Since Zulip is a team chat product,
|
||||
your internship experience with the Zulip project will be highly interactive.
|
||||
|
||||
> _“The experience of working with Zulip for the summer was really phenomenal and
|
||||
> taught me a lot about software development and working with a community. Zulip
|
||||
> has one of the best open source communities out there who are super friendly
|
||||
> and welcoming. You learn a lot just by watching others work and talk.”_ – Sai
|
||||
> Rohitth Chiluka, Zulip GSoC 2021 participant
|
||||
|
||||
As part of our commitment to mentorship, Zulip has over 160,000 words of
|
||||
[documentation for
|
||||
developers](../index.md#welcome-to-the-zulip-documentation), much of it
|
||||
designed to explain not just how Zulip works, but why Zulip works the way that
|
||||
it does. To learn more about our mission and values, check out [this blog
|
||||
post](https://blog.zulip.com/2021/04/28/why-zulip-is-on-github-sponsors/)!
|
||||
|
||||
## Outreach program experience
|
||||
|
||||
Zulip has been a [GSoC](https://summerofcode.withgoogle.com/) mentoring
|
||||
organization since 2016, and we accept 15-20 GSoC participants each summer. We
|
||||
have also mentored several interns through the
|
||||
[Outreachy](https://www.outreachy.org/) program, and hundreds of Google Code-In
|
||||
participants.
|
||||
|
||||
Zulip operates under a **group mentorship** model. While you will have an
|
||||
assigned mentor, you will also get lots of feedback from other members of the
|
||||
[Zulip development community](https://zulip.com/development-community/) by
|
||||
posting your questions and ideas in public streams. We encourage outreach
|
||||
program participants to help each other out as well!
|
||||
|
||||
Program participants work on a variety of issues in their areas of interest,
|
||||
from major features to small bugs. You will see your work integrated into Zulip
|
||||
throughout the program, and even experience the impact of the changes yourself
|
||||
in the [development community chat](https://zulip.com/development-community/).
|
||||
|
||||
Many program participants stay involved with the project past the
|
||||
official end of the program. A number of folks who get started as participants
|
||||
go on to mentor the next cohort, and several have joined Zulip's team of core
|
||||
maintainers.
|
||||
|
||||
To learn more about the experience of doing an outreach program with Zulip,
|
||||
check out our [Zulip's Google Summer of Code 2021 blog
|
||||
post](https://blog.zulip.com/2021/09/30/google-summer-of-code-2021/). Our [guide
|
||||
for having an amazing experience with Zulip](experience.md) will also give you a
|
||||
feel for what it's like to do an internship with us.
|
||||
|
||||
> _“It has been the best summer I've ever had! I'm thankful to my mentors, my
|
||||
> peers, Zulip, and Google for providing me an opportunity of getting involved
|
||||
> in the community! You have helped and supported me to become a better software
|
||||
> developer and a passionate open-source contributor.”_ – Sarthak Garg, Zulip
|
||||
> GSoC 2021 participant
|
Loading…
Reference in New Issue