diff --git a/docs/index.rst b/docs/index.rst index 3ef038cb9628a5..52205eac6eb9d8 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -20,6 +20,7 @@ Contents: queuing schema-migrations front-end-build-process + roadmap Indices and tables ================== diff --git a/docs/roadmap.md b/docs/roadmap.md new file mode 100644 index 00000000000000..c9b62824054e25 --- /dev/null +++ b/docs/roadmap.md @@ -0,0 +1,267 @@ +Zulip 2016 Roadmap +================== + +## Notes on the state of this document + +* This is a first draft, developed to get feedback from the Zulip user + and developer community on what is important. If there's something + that you think is important but isn't on here, speak up! The + purpose of this document is ultimately to provide you an opportunity + to speak up about your ideas for where Zulip should be going. + +* The plan is to have ~all the items link to the corresponding bugs in + the Zulip bug tracker, as they do in the "Core User Experience" + section. I haven't taken the time to track down all the links (and + open issues where one doesn't exist) yet. I'm also imagining we'll + tag the issues in this document with a milestone on GitHub so it's + easy to check in on progress as we go. + +* This may end up being a living document where we add new things that + we realize are important but weren't on here, or it may be something + where we generate a new one every N months. We'll figure that over + the coming months. + +## Introduction + +Zulip has received a great deal of interest and attention since it was +released as open source software by Dropbox. That attention has come +with a lot of active development work from members of the Zulip +community. From when Zulip was released as open source in late +September 2015 through today (mid-April, 2016), over 300 pull requests +have been submitted to the various Zulip repositories (and over 250 +have been merged!). The vast majority of these pull requests were +written by users from all around the Zulip community, making Zulip in +many ways a community-driven, distributed-development, open source +project. + +In any project, there can be a lot of value in periodically putting +together a roadmap detailing the major areas where the project is +hoping to improve. This can be especially important in an open source +project like Zulip, since it can help contributors looking for a +project to focus their efforts. This roadmap is intended to organize +a list of the most important improvements that should to be made to +Zulip in the relatively near future. We are hoping to set a goal of +completing most of these improvements in 2016. + +This document is not meant to constrain in any way what contributions +to Zulip will be accepted; instead, it will be used by the Zulip core +team to prioritize our efforts, measure progress on improving the +Zulip product, hold ourselves accountable for making Zulip improve +rapidly, and celebrate members of the community who contribute to +projects on the roadmap. + +If you're someone interested in making a larger contribution to Zulip +and looking for somewhere to start, this roadmap is the best place to +look for substantial projects that will definitely be of value to the +community (if you're looking for a starter project, the bite-size +project label on GitHub Issues is a great source for those). + +Without further ado, below is the (proposed) Zulip 2016 roadmap. + +## Burning problems + +Our opinion is that the top problem for the Zulip project is the state +of the mobile apps. The Android app has started rapid progress thanks +to a series of contributions by Lisa Neigut of Recurse Center, and we +believe to be on a good path. The iOS app has fewer features than +Android and has more bugs, but more importantly is in need of an +experienced iOS developer who can drive the project. + +## Core User Experience + +This category includes important improvements to the core user +experience that will benefit all users. + +* [Add pretty bubbles for recipients in the compose box](https://github.com/zulip/zulip/issues/595) +* [Finish and merge support for pinning a few important streams](https://github.com/zulip/zulip/issues/285) +* [Add support for showing "user is typing" notifications](https://github.com/zulip/zulip/issues/150) +* [Display stream descriptions more prominently](https://github.com/zulip/zulip/issues/164) +* [Integration inline URL previews](https://github.com/zulip/zulip/issues/406) +* [Add support for managing uploaded files](https://github.com/zulip/zulip/issues/454) +* [Improve missed message notifications to make "reply" work nicely](https://github.com/zulip/zulip/issues/612) + +## Ease of setup and onboarding issues + +This category focuses on issues users experience when installing a new +Zulip server or setting up a new Zulip realm. + +* [Create a web flow for setting up a new realm (currently, it's a command-line process)](https://github.com/zulip/zulip/issues/260) +* [Document or better script solution to rabbitmq startup issues](https://github.com/zulip/zulip/issues/465) +* [Merge a supported Docker in production implementation](https://github.com/zulip/zulip/pull/450) +* [Add a mechanism for deleting early test messages](https://github.com/zulip/zulip/issues/135) + +## Internationalization + +The core Zulip UI has been mostly translated into 5 languages; +however, more work is required to make those translations actually +displayed in the Zulip UI for the users who would benefit from them. + +* [Merge support for using translations in Django templates](https://github.com/zulip/zulip/pull/607) +* Add text in handlebars templates to translatable string database +* Add text in error messages to translatable string database +* Merge support for translating text in handlebars +* Merge support for translating text in error messages + +## User Experience at scale + +There are a few parts of the Zulip UI which could benefit from +overhauls designed around making the user experience nice for large +teams. + +* [Show subscriber counts on streams](https://github.com/zulip/zulip/pull/525) +* [Make the buddy list work better for large teams](https://github.com/zulip/zulip/issues/236) +* Make the streams page easier to navigate with 100s of streams +* [Improve @-mentioning syntax based on stronger unique identifiers](https://github.com/zulip/zulip/issues/374) + +## Administration and management + +Currently, Zulip has a number of administration features that can be +controlled only via the command line. + +* Make default streams web-configurable +* Make [realm emoji](https://github.com/zulip/zulip/pull/543) web-configurable +* Make [realm filters](https://github.com/zulip/zulip/pull/544) web-configurable +* Enhance the LDAP integration and make it web-configurable +* Add a SAML integration and make it web-configurable +* [Improve administrative controls for managing streams](https://github.com/zulip/zulip/issues/425) + +## Scalability + +Zulip should support 10000 users in a realm and also support being run +for small realms in resource-constrained environments. + +* [Make the Zulip Tornado service support horizontal scaling](https://github.com/zulip/zulip/issues/445) +* Make presence system scale well to 10000 users in a realm. +* [Support running queue workers multithreaded in production to + decrease minimum memory footprint](https://github.com/zulip/zulip/issues/34) + +## Performance + +Performance is essential for a communication tool. While some things +are already quite good (E.g. narrowing and message sending perf), +Zulip could definitely use some work on loading more quickly. + +* [Migrate to faster jinja2 templating engine](https://github.com/zulip/zulip/issues/620) +* Optimize the performance of loading the Zulip webapp + +## Technology improvements + +Zulip should be making use of the best Python/Django tools available. + +* [Add support for Zulip running on Python 3](https://github.com/zulip/zulip/issues/256) +* [Add Python static type-checking to Zulip]() +* [Add support for changing users' email addresses]() +* [Automatic thumbnailing of uploaded images](https://github.com/zulip/zulip/issues/432) +* Upgrade Zulip to use Django 1.10 once it is released. The patches + needed to run Zulip were merged into mainline Django in Django 1.10, + so this will mean we don't need to use a fork of Django anymore. + +## Technical Debt + +While the Zulip server has a great codebase compared to most projects +of its size, it takes work to keep it that way. + +* [Migrate most web routes to REST API](https://github.com/zulip/zulip/issues/611) +* [Finish purging global variables from the Zulip javascript](https://github.com/zulip/zulip/issues/610) +* Finish deprecating and remove the pre-REST Zulip /send_message API +* Split Tornado subsystem into a separate Django app; this should + substantially improve the code organization. +* Clean up clutter in the root of the zulip.git repository +* Refactor zulip.css to be broken into components + +## Deployment and upgrade process + +* Retool the way upgrades work to easily support + backwards-incompatible upgrades to Python libraries +* Optimize the static asset building process to make triggering code + deploys on git pushes practical again (currently takes over 1m to + build static assets even on a very fast machine). +* [Minimize the downtime required in Zulip upgrade process]() + +## Security + +* [Add support for 2-factor authentication on all platforms](https://github.com/zulip/zulip/pull/451) +* [Add a retention policy feature that automatically deletes old messages](https://github.com/zulip/zulip/issues/106) +* Upgrade every Zulip dependency to a modern version +* [The LOCAL_UPLOADS_DIR file uploads backend only supports world-readable uploads](https://github.com/zulip/zulip/issues/320) +* Add support for stronger security controls for uploaded files + +## Testing + +* Extend Zulip's automated test coverage to include all API endpoints +* Build automated tests for the client API bindings +* [Improve the runtime of Zulip's backend test suite](https://github.com/zulip/zulip/issues/441) +* Use caching to make Travis CI runtimes faster +* [Add automated tests for the production upgrade process](https://github.com/zulip/zulip/issues/306) +* [Improve Travis CI "production" test suite to catch more regressions](https://github.com/zulip/zulip/issues/598) + +## Development environment + +* [Migrate from jslint to eslint](https://github.com/zulip/zulip/issues/535) +* Decide whether to replace pyflakes linter +* Figure out a nice upgrade process for Zulip Vagrant VMs +* Have well-documented process for new contributors for all apps. +* Continue improving linters and tests to catch common mistakes before + code review. + +## Documentation + +* Significantly expand documentation of the Zulip API and integrating + with Zulip. +* Expand library of documentation on Zulip's feature set. Currently + most documentation is for either developers or system administrators. +* Expand developer documentation with more tutorials explaining how to do + various types of projects. +* Overhaul new contributor documentation, especially on coding style, + to better highlight and teach the important pieces. + +## Community + +* Setup a Zulip server for the Zulip development community +* Expand the number of core developers able to do code reviews +* Expand the number of contributors regularly adding features to Zulip + +## Integrations + +Integrations are essential to Zulip. While we currently have a +reasonably good framework for writing new webhook integrations for +getting notifications into Zulip, it'd be great to streamline that +process and make bots that receive messages just as easy to build. + +* Build a framework for writing integrations that receive messages +* Build tools for sending messages from fixtures into Zulip to support + taking screenshots for webhook integrations + +## Android app + +The Zulip Android app is ahead of the iOS app in terms of feature set, +so this section serves to document the goals for Zulip on mobile. + +* [Support using a non-zulip.com server](https://github.com/zulip/zulip-android/issues/1) +* Support having multiple Zulip realms open simultaneously +* Support Google authentication with a non-Zulip.com server +* Build a slick development login page to simplify testing (similar to + the development homepage on web) +* [Improve the compose box to let you see what you're replying to](https://github.com/zulip/zulip-android/issues/8) +* [Make it easy to compose messages with mentions, emoji, etc.](https://github.com/zulip/zulip-android/issues/11) +* Display unread counts and improve navigation +* [Hide messages sent to muted topics](https://github.com/zulip/zulip-android/issues/9) +* [Fill out documentation to make it easy to get started]() + +## iOS app + +Most of the projects listed under Android apply here as well, but it's +worth highlighting some areas where iOS is substantially behind +Android. The top priority here is recruiting a lead developer for the +iOS app. + +* iOS app crashes at startup on latest iOS +* APNS notifications are broken + +## Desktop apps + +* Desktop app doesn't recover well from entering the wrong Zulip server +* Support having multiple Zulip realms open simultaneously +* Migrate platform from QT/webkit to Electron +* Build an efficient process for testing and releasing new versions of + the desktop apps