Open rsc opened 5 years ago
I'd like to echo an idea that was widely discussed at GopherCon - these large changes tend to attract lots of attention, so the issue threads become unbearably long to the point that they can't be loaded all at once easily.
To expand on @mvdan's point: I think it would be helpful to split the discussion threads for large changes into a main “process and draft updates” issue (with discussion locked) and separate per-topic issues referencing that issue (with discussion unlocked).
For designs with multiple interlocking features, it might also be helpful to split the proposal into separate issues for the overall problem and overall approach and specific sub-proposals that can be adopted or rejected independently.
Some examples:
Main issue: “Interpreting errors is hard. Let's add more structure to the errors
package.”
Sub-proposals:
errors.{Unwrap,Is,As}
errors.Is
for syscall
types.%w
and an error-formatting interface.fmt
and errors
.Or, one closer to me personally: Main issue: “Overflow is error-prone. Let's make it explicit.” Sub-proposals:
, ok
forms for arithmetic expressions.int
.Or build a slightly fancier version of what Russ made for the try
proposal, namely a better presentation layer. Two possible features: (1) Instead of being purely readonly, allow sentiments/votes to be added directly (writing back through to the underlying GitHub issue). (2) Instead of Russ categorizing comments, use hash tags in the comments to organize. When manual categorization is needed, gardeners can edit the comments to add/remove/edit tags.
Another pattern I've noticed for a few large changes (particularly #6977 and #30228) is that the update comments from associated CLs can easily swamp out the discussion thread on GitHub.
It might help to split out a separate tracking issue for associated changes, so the mention-noise can go there instead of to the proposal issue itself.
The proposal process was designed in 2015, when the language was effectively frozen and we were not making large changes. Even now, the vast majority of proposed changes are small. But some are large.
The lightweight process we have works well for small changes, and we wouldn't want to add unnecessary process to those. But if we can reliably identify large changes then we can think about adding extra process for those.
One way to identify large changes is with a simple checklist of how much impact it would have. For example:
Once a change has been identified as large, we could add more process, although we need to decide exactly what that is too. One idea is to keep iterating on design drafts before making an official proposal. Another is to require an experimental prototype be available. And so on. We can collect those ideas here too.