2016-07-06

Thanks for starting this discussion @aturon. I've done some thinking about
this lately so here's a braindump. The scope of this is somewhat
larger than you've brought up - it's not organizing just major
initatives, but the RFC / feature pipeline and more forward-thinking
'on-the-radar' issues.

From my perspective, the most important thing is that the roadmap
reflects what is actually happening in the project at any time. It is
the zeitgeist of Rust, regardless of the process that determines what
the various corners of the project is working on.

To that end I suggest we focus on packaging up the resources we
already have into a coherent top-down window into the whole project,
prefering to nudge everyone into alignment around current practices
rather than make big changes.

I have some bulleted lists for you.

Goals for a project roadmap are:

give users and contributors a picture of what's happening in rust and where it's going

inspire contributors and users with a common vision

progressive detail - on first glance anybody gets a high-level overview of the
project, but you can drill down further to find details of individual work items

link relevant conversations, issues, rfcs

provide entry points for contributors

link to tracking issues for initatives

illuminate current initiatives

illuminate the RFC / feature pipeline

foreshadow future initiatives / "on-the-radar" topics

show progress towards goals

show what's in the next release

living updates - allow multiple people to maintain it, keep it updated as the
project evolves and the zeitgeist changes

The last point, about 'living updates' is in contrast to your primary
thrust, that the roadmap is published on a 12 week cadence. I don't
care about the cadence of the process so much, as long as teams are in
some way generating suitable information to feed into a roadmap and it
is periodically being refreshed. Actually, I worry that attempting to
get every person or team responsible for some major area of the
project to update their plan at the same time will be asking too much.

We can draw from these existing sources of information:

feature pipeline: RFCs, tracking issues, feature names

initatives: tracking issues, milestones

"on-the-radar" subjects: irlo, RFCs, issues

release notes

The tracking issues are key to bringing a roadmap together - they are
something we are already mostly in the habit of making and
maintaining. And they are limited in scope so that those responsible
for each initiative only need to worry about keeping their tracking
issue fresh.

Some current major activities in the project:

rustfmt

IDEs

rustup

language feature pipeline - main focus of lang team

std feature pipeline - main focus of libs team

memory model - on-the-radar

GC - perpetually on-the-radar

MIR

MIR-trans

incremental compilation

cross-compile

error messages

One problem we're going to find is that many of what we think of now
as 'initatives' are quite open ended - IDEs will be a major focus of
the project for years. We'll need to keep such areas fresh and focused
on more limited goals so that we can demonstrate progress.

A hypothetical roadmap outline:

vision statement - what does the product we are delivering ideally look like?
what are the common themes that unite all these initiatives?

current initiatives - 8-12 top-priority rallying points in rust, each with their
own tracking issues, hopefully connected to 'E-help-wanted', 'E-easy' issues

feature pipeline - this is much more fine-grained than the
initiatives, covering every RFC'd (and some un-RFC'd) feature; but
the scope of what might be in the feature pipeline is also much
smaller than what may be in initiatives - consider that most of what
happens outside of the language and std don't go through the RFC
pipeline.

on-the-radar - subjects that the team is thinking about a lot and is
interested in dialog about, in anticipation of launching an
organized effort in the future. an example of this recently might
be the memory model, which many people have been debating, but which as a
project we're not quite actively committed to yet. This is related to the
"problem tracker" you suggest elsewhere, perhaps highlights of.

release history / future - this is the concrete record of what we actually achieved
or are expecting to achieve in the next release

I'm not sure the exact organization of these or how to achieve
'progressive detail'. Certainly you wouldn't want to see the firehose
of everything going on in the feature pipeline upon first glance, for
example. But contributors should be able to drill down into the
feature pipeline to see that, e.g. ? is stalled at stage X and
that work Y is left to do.

Show more