Zulip is a proud participant in Outreachy and is currently helping new open source contributors apply to be Outreachy interns for the upcoming Round 13. We'll teach you and pay you to improve Zulip, full-time, between December 6, 2016 and March 6, 2017.
If you're in a group underrepresented in open source communities and you're interested in contributing to Zulip during a paid apprenticeship, please apply by October 17th!
(We already have heard from many people interested in applying; if you're just hearing about Outreachy now, do also consider one of the other mentoring organizations.)
Zulip is a powerful, open source group chat application. Written in Python and using the Django framework, Zulip supports both private messaging and group chats via conversation streams.
Zulip also supports fast search, drag-and-drop file uploads, image previews, group private messages, audible notifications, missed-message emails, desktop apps, and much more.
Zulip has gained a considerable amount of traction since we released it as open source software in September 2015, and is gaining more users at a rapid pace -- every day, at least tens of thousands of people use Zulip. Your work on Zulip will have impact on the daily experiences of a huge number of people.
As an organization, we value high-quality mentorship and making sure our product quality is extremely high -- you can expect to learn a lot from disciplined code reviews by highly experienced engineers. Since Zulip is a group chat product, your Outreachy experience with the Zulip project will be highly interactive, with a real focus on teaching you the concepts and reasoning behind how Zulip is engineered and how to make it better.
We have an easy-to-setup development environment, and a library of tasks that are great for first-time contributors (guide). Take a look at our architectural overview and key concepts.
We'd love for you to drop by our open Zulip livechat at chat.zulip.org (we use Zulip instead of IRC), and introduce yourself -- compose a new stream message to the 'Outreachy 2016-2017' stream with your name as the topic. Please also join our Outreachy round 13 mailing list. Please talk with us about our roadmap or your questions, and consider applying for an Outreachy internship with us!
Our Outreachy application process opens September 12 and closes October 17. You'll follow the instructions here. Applying earlier is better so we have time to give you suggestions for revision.
Your application should include the following:
- Details on any experience you have related to the technologies that Zulip has, or related to our product approach.
- Links to materials to 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 twelve-week 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 the small initial contribution(s) you did.
If you're applying for a coding internship: We expect applicants to either have experience with the technologies relevant to their project or have strong 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.
If you're applying for a writing internship: We expect applicants to be skilled in writing in English for a non-academic audience, and to be interested in getting feedback that will help them write accurately and accessibly about technology.
We would like you to publicly post a few sections of your proposal -- the project summary, list of deliverables, and timeline -- someplace public on the Web, such as on your blog, sometime before October 17th. That way, the whole developer community -- not just the mentors and administrators -- have a chance to give you feedback and help you improve your proposal. See "let's get started publishing drafts of proposals" on our mailing list for more details.
As the application process guide says:
"While only one contribution is required to be considered for the program, we find that the strongest applicants make multiple contributions throughout the application process, including after the application deadline."
We are more interested in candidates if we see them submitting good contributions to Zulip projects, helping other applicants on GitHub and on our mailing lists and on chat.zulip.org, learning from our suggestions, trying to solve their own obstacles and then asking well-formed questions, and developing and sharing project ideas and project proposals that are plausible and useful.
Also, you're going to find that people give you links to pages that answer your questions. Here's how that often works:
- 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
- you ask your question
- someone directs you to a document
- you go read that document, and try to use it to answer your question
- you find you are confused about a new thing
- you ask another question
- now that you have demonstrated that you have the ability to read, think, and learn new things, someone has a longer talk with you to answer your new specific question
- you and the other person collaborate to improve the document that you read in step 3 :-)
This helps us make a balance between person-to-person discussion and documentation that everyone can read, so we save time answering common questions but also get everyone the personal help they need. This will help you understand the rhythm of help we provide in the developers' Zulip livechat -- including why we prefer to give you help in public mailing lists and Zulip streams, instead of in one-on-one private messages or email. We prefer to hear from you and respond to you in public places so more people have a chance to answer the question, and to see and benefit from the answer. If that makes you say "aha", also see these tips for new open source contributors, on how to learn faster and communicate respectfully in open source communities.
We're interested in a variety of coding and writing projects you could do with our web app's back end and front end, our mobile or desktop apps, or other code that integrates with Zulip.
-
Writing bots and integrations -- e.g., a better IRC mirror or Jabber mirror or Mailman integration.
-
Working on engineering for our React Native mobile app for iOS. This is a pressing need for us, since our current iOS app is very out of date. A lot of the UX ideas for Android below also apply to the React Native iOS app, in addition to just getting the app to feature parity.
-
Improving the user experience and design of our Java Android app, which we've been steadily improving and which is much further along than the iOS app. Here's some more concrete ideas:
-
Setting up repeatable Android builds for CI and production releases, that reliably run both Espresso and Unit tests
-
Adding photo uploads and cropping
-
Adding file attachment uploads
-
Implementing a "share to Zulip" functionality to share content from other apps to Zulip
-
Fancier in app notifications
-
Fancy up the homescreen widget
-
Improving and redesigning Zulip's UI/UX. These will include:
- zulip.org
- Zulip's web app
-
Merging some of our Django extensions into upstream -- Zulip has several cool extensions and/or monkey-patchings we do to improve the Django web framework for our users, and several of these would make sense to attempt to contribute to upstream Django (or at least make into reusable Django extension(s)). These include:
- Zulip's cool request parsing library (
zerver/lib/request.py
) JsonableError
exception middleware- Time-tracking of database and memcached profiling data and including in logs, and adding support for doing the same with time spent rendering templates (may be worth looking at https://github.com/dropbox/stopwatch as a potential replacement)
- Zulip’s caching extensions (
zerver/lib/cache*.py
)
-
Writing more development tutorials, and especially testing/documenting/expanding the Zulip API bindings -- we'd probably want to go for an approach that involves auto-generated documentation (etc.).
-
Implementing analytics so we can see how people use Zulip, see which features are valuable, systematically debug performance problems, etc.
-
Frontend analytics visualizations: we store a lot of interesting data about user activity, stream activity, etc. The projects will be around make fun/useful visualizations of the data for users and realm admins.
-
Backend analytics: There is a lot of data in our production tables and server logs that would be nice to aggregate (e.g. info about stream/user activity, or common server errors).
-
Improving our experimental Electron-based desktop client application with better design, notifications, and cooler desktop integrations.
-
Improving and developing @zulipbot, the GitHub workflow bot for the Zulip organization and its repositories, by adding new features, writing unit tests and creating a testing framework, and writing documentation.
Check out our bite-sized bugs. If none of those work for you, drop in on our open livechat and compose a new stream message to the 'Outreachy 2016-2017' stream with your name as the topic, and talk with us about what your skills are -- we'll find something for you.
Our mentors will include Tim Abbott and Rishi Gupta, both of whom work on maintaining Zulip, and both of whom read the mailing list and whom you can ping in our Zulip livechat.
Hope to hear from you!