Skip to content

Commit

Permalink
Add a draft roadmap doc.
Browse files Browse the repository at this point in the history
  • Loading branch information
timabbott committed Apr 10, 2016
1 parent fcced95 commit ec34f29
Show file tree
Hide file tree
Showing 2 changed files with 268 additions and 0 deletions.
1 change: 1 addition & 0 deletions docs/index.rst
Expand Up @@ -20,6 +20,7 @@ Contents:
queuing
schema-migrations
front-end-build-process
roadmap

Indices and tables
==================
Expand Down
267 changes: 267 additions & 0 deletions 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

This comment has been minimized.

Copy link
@lfaraone

lfaraone Apr 10, 2016

It'd be great to provide a CTA here. Where should I speak up?

purpose of this document is ultimately to provide you an opportunity
to speak up about your ideas for where Zulip should be going.

This comment has been minimized.

Copy link
@lfaraone

lfaraone Apr 10, 2016

"speak up" used twice in this bullet, consider "provide your input as to where"


* 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

This comment has been minimized.

Copy link
@lfaraone

lfaraone Apr 10, 2016

Documentation generally shouldn't use first person.

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

This comment has been minimized.

Copy link
@lfaraone

lfaraone Apr 10, 2016

"free and open source" for RMS-compliance.

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

This comment has been minimized.

Copy link
@lfaraone

lfaraone Apr 10, 2016

s/project/place/

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

This comment has been minimized.

Copy link
@lfaraone

lfaraone Apr 10, 2016

"hoping to set a goal" reads like planning to plan.

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

This comment has been minimized.

Copy link
@wdaher

wdaher Apr 10, 2016

👍


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 comment has been minimized.

Copy link
@wdaher

wdaher Apr 10, 2016

If I had to prioritize this list, I'd do it in this order:

  1. IRC-style mode. There are tons of people out there looking for a good, robust, open-source alternative to Hipchat, Slack, etc., that they can run on-premise, and Zulip could totally fit the bill. It's a substantial UX change, but if it could be an optional one that users could enable

Admittedly, this is a pretty meaty UX issue (because you sort of want to figure out how to do it without wrecking the value of subjects for people that use them), but I think it could make the offering fairly compelling to users who would not otherwise use Zulip today.

.2. * Improve missed message notifications to make "reply" work nicely

This is huge for re-engaging users, so it's worth prioritizing.

.3. * Add support for showing "user is typing" notifications

Relevant because of engagement — makes the service feel snappier

Everything else:
Candidly, none of this stuff is going to make or break the user experience, but it's nice to have. It's in the rough priority I think it should take, based on my feel for # of users affected. Of course, this is just my opinion.

+* Add pretty bubbles for recipients in the compose box
+* Finish and merge support for pinning a few important streams
+* Display stream descriptions more prominently
+* Integration inline URL previews
+* Add support for managing uploaded files

This comment has been minimized.

Copy link
@timabbott

timabbott Apr 10, 2016

Author Owner

@wdaher Can you open a GitHub issue for IRC mode describing what you have in mind?

I think there's a lightweight experimental version of that which would be pretty easy to do (basically don't display "(no topic)" and then change the compose box to not offer a topic box by default). Definitely some issues to think about like how to display things in the left sidebar, but I think that proposal probably deserves its own more permanent thread.

This comment has been minimized.

Copy link
@wdaher

wdaher Apr 11, 2016

Opened as zulip#647

This comment has been minimized.

Copy link
@timabbott

timabbott Apr 12, 2016

Author Owner

Cool, added a link to that to the latest version of the doc


This comment has been minimized.

Copy link
@wdaher

wdaher Apr 10, 2016

Actually, and this is a meaty one, but I might insert into the list above a:

.4. Make bots really really easy to set up and use. e.g. what something like Slack does here is really nice, where it's just a one-click thing to get it set up, as opposed to (like some of our integrations), having to run a cron job and a python script locally somewhere.

Again, not a small project, but it would definitely reduce friction in the onboarding.

This comment has been minimized.

Copy link
@lfaraone

lfaraone Apr 10, 2016

Agreed. An "integration store" as opposed to static documentation would be fabulous.

This comment has been minimized.

Copy link
@timabbott

timabbott Apr 10, 2016

Author Owner

Ultimately a lot of that has to do with what you're integrating with. Most integrations we have involving something you install work that way because the third party software doesn't support a webhook type mechanism.

Basically all new integrations are webhook-style integrations, because third-party software supports posting webhooks these days. And as you see in the "integrations" section below, there's some projects that would help make more integrations runnable this way. But I guess there's probably something we should add to that list of overhauling the way the integration documentation works to make it feel more like a "setup your integration" flow than documentation (e.g. letting you create the bot on the page that tells you what else you need to do, offering a default avatar, etc.).

This comment has been minimized.

Copy link
@timabbott

timabbott Apr 10, 2016

Author Owner

@wdaher is what I wrote consistent with what you had in mind? If so I can open an issue for that concept and add it into the proposal. Probably belongs under the "Integrations" section?

This comment has been minimized.

Copy link
@wdaher

wdaher Apr 11, 2016

Yes, it sort of is what I have in mind, and I agree that it belongs in the Integrations section.

When I say better integrations flow, I also mean stuff like "Making creating bots less tedious"... i.e. setting up an webhook integration should automatically and transparently make a "bot" for it, rather than your having to worry about it (and worry about its API key)

In short, ==Luke on the concept of an integrations store.

Another piece of this might be figuring out a good system and workflow for our community of contributors to submit new integrations in a way that's easy for us to, well, integrate with. GitHub's own integrations back in the day were a good example of this... you just submitted a pull request with your custom code necessary to make your integration work, and we'd merge it.

(Admittedly, this is a lot easier now that all of Zulip is open-source, but it'd be great if there was some nice documentation around "So, you want to make a nice, first-class integration with Zulip...")

This comment has been minimized.

Copy link
@timabbott

This comment has been minimized.

Copy link
@timabbott

timabbott Apr 11, 2016

Author Owner

I think it covers the documentation front, though I think it could definitely benefit from some optimization and probably some better advertising (e.g. a direct link from the /integrations page).

This comment has been minimized.

Copy link
@wdaher

wdaher Apr 11, 2016

No, I haven't, looks good.

This comment has been minimized.

Copy link
@timabbott

timabbott Apr 12, 2016

Author Owner

OK, cool, based on this thread I expanded the "integrations" section of the latest version of this doc. Thanks folks!

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)

This comment has been minimized.

Copy link
@lfaraone

lfaraone Apr 10, 2016

Would this also cover the single-realm case?

* [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)

This comment has been minimized.

Copy link
@lfaraone

lfaraone Apr 10, 2016

These last two items seem super low-priority. I'm not convinced that Docker support or cleaning up the initial realm state are particularly high-leverage projects, although if people are motivated I wouldn't tell them to sod off.

Unless Docker support makes it easier to add one-click deploys to PaaS providers, which I think will go pretty far towards solving the issue of "get the user from GitHub to working deployment quickly"


## Internationalization

This comment has been minimized.

Copy link
@lfaraone

lfaraone Apr 10, 2016

Perhaps also part of this is a debug locale, so we can see when things aren't correctly translated or imagine the UI when you have really long words (e.g. German)


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

This comment has been minimized.

Copy link
@wdaher

wdaher Apr 10, 2016

I'd sequence this as
+* Make the buddy list work better for large teams
+* Improve @-mentioning syntax based on stronger unique identifiers
+* Show subscriber counts on streams
+* Make the streams page easier to navigate with 100s of streams

This comment has been minimized.

Copy link
@timabbott

timabbott Apr 10, 2016

Author Owner

Ultimately the order that things get done depends more on what decides to work on what, when, but sure, reordered )


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

This comment has been minimized.

Copy link
@lfaraone

lfaraone Apr 10, 2016

A key part of this and the above bullet is making these features also work per-realm, as opposed to per-deployment, right?

This comment has been minimized.

Copy link
@timabbott

timabbott Apr 10, 2016

Author Owner

Yeah, I think that's implied, since the natural way to do it would be to place the configuration in the Realm Admin UI.

* [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.

This comment has been minimized.

Copy link
@lfaraone

lfaraone Apr 10, 2016

s/being run for//


* [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]()

This comment has been minimized.

Copy link
@lfaraone

lfaraone Apr 10, 2016

Perhaps this belongs in "Testing"?

* [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

This comment has been minimized.

Copy link
@lfaraone

lfaraone Apr 10, 2016

What are the pain points here?

This comment has been minimized.

Copy link
@timabbott

timabbott Apr 10, 2016

Author Owner

Probably most important is if we add a new dependency, nothing installs it or warns when you pull your branch forward, so you just get a traceback.

* 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

0 comments on commit ec34f29

Please sign in to comment.