Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Defining the proposal / GIP process, take 2 #10

Closed
reduz opened this issue Sep 3, 2019 · 61 comments
Closed

Defining the proposal / GIP process, take 2 #10

reduz opened this issue Sep 3, 2019 · 61 comments
Labels

Comments

@reduz
Copy link
Member

reduz commented Sep 3, 2019

Introduction

After the lengthy discussion in #1, and further many discussions among core contributors on IRC, I'm putting together a simpler, yet more refined proposal process, which draws from previous discussions and aims to be simple and take on what we know for certain are problematic areas:

  • The main issue tracker is flooded with feature / enhancement requests that are just too many to be discussed or reviewed.
  • Proposals are, most of the time, too many, too vague and impossible to discuss, we need to change our approach to quality over quantity.
  • External contributors often create feature/enhancement PRs that we don't know if are wanted, whether they solve actual problems, or if the way they are implemented (usability wise) is right. These are very difficult to review because we, as developers, don't even know this most of the time, so we would prefer they go via community filter. It's easier to review, discuss, approve or reject a proposal than a PR.
  • The whole process must not become more bureaucratic for core contributors than it already is. In fact, the goal is to make it less bureaucratic, given that most core contributors are doing this work on their free time.
  • We constantly get asked by potential new contributors what kind of work they can do and it's not always easy to answer. By better filtering proposals, the new system can also be used to better organize new and existing contributors.

With all this in mind, here's the new proposal for the process.

Overview

The idea of this document is to layout a workflow to take off load from core contributors (and Akien) from reviewing enhancement PRs. In most of these situations, enhancement proposals are questionable or debatable and require a large amount of time by core contributors to discuss, when they themselves may not even be sure of what the intended use cases are for them, or whether there is enough interest by the community

The intent is to find a workflow where proposals can be better discussed and prefiltered by the community, and those proposing need to do more work to justify and explain their ideas to make their intent clear not only to contributors but to the community.

This also aims to reduce the amount of proposals and ideas in our issue trackers and filter them. It also makes it easier for new and existing contributors to pick approved proposals to work on, with clear explanations on their use cases.

Following are the step by step process for proposals:

Process

1. Open an enhancement proposal issue:

We will use this repository instead of the main issue tracker. When opening a proposal as a new issue, the user will be first asked to fill a template that will go on top of the proposal, with the following questions on the issue, similar to when reporting an bug:

  1. Do you need this for a project you are working on? If so, please describe your project and how this will help you.
  2. Is this something that you will need to be using often, or that it can’t easily be worked around? (would be useful to more easily discard proposals that don’t need thiscriteria, not sure how to phrase the question better)
  3. Are you able to submit a pull request if this proposal is approved?
  4. Please describe the proposal:
  5. Please describe the use case with a mock-up, video or diagram of examples on how it will be used: (use case and workflow needs to be crystal clear)
  6. If you are a technical person, you may add some technical content on implementation, but use cases and usage will always take priority.

These fields need to be clear for your proposal to be approved. If a proposal is too simple or does not conform to these rules, it will be closed.

2: Get approval for your proposal.

You can seek approval for your proposal in two ways:

  1. Ensure users are interested about discussing it. If you don’t see enough interest, you can try to gather some on social media. If you manage to gather enough discussion and interest, this may be reviewed and approved.
  2. If someone is willing to do a PR, ask a core contributor, who may be interested in fast-tracking your proposal for approval.

If there is not enough community interest and no contributor interest, then the proposal will eventually be closed.

3: Creating a pull request

Whether you wrote the proposal yourself or someone else is interested in actually creating a pull request for an existing proposal, always make sure that the proposal is approved by a core contributor. Make sure all technical details on how it will be implemented are clear before doing this, feel free to ask core contributors for help if you need to.

4. Get your pull request tested

Before having your proposal reviewed, it’s important that other users test your pull request. Make sure to communicate to those who discussed the original proposal issue about it, so they lend a hand. We may also create some sort CI to get those pre-built for users for testing. (is this possible? I remember reading GitHub is adding something like this)

5. Proposal review

Contributors will often meet online to discuss PRs and will try to pick yours. If this does not happen, personally ask core contributors to review your proposal for merging.

Fast Tracking

Core contributors or owners of areas can fast-track this process and also approve external contributors to do it for them, the requirements and use case are clear or they discussed themselves a well understood problem beforehand.

Likewise, PRs opened, but that may need discussion can be closed and asked to open or go back to an issue in the proposal repository to agree on missing details.

Conclusion

This aims to be a system that puts the burden on those proposing instead of those reviewing, so we can better utilize the time and resources kindly donated by the community to the project.

@reduz reduz changed the title Defining the proposal / GPI process, take 2 Defining the proposal / GIP process, take 2 Sep 3, 2019
@NHodgesVFX
Copy link

This seems like a good process. As far as seeing community interest for a proposed feature it seems like the way blender.community on right click select does it would work better then github. This way contributers and core devs can get a idea of what people want just by sorting by upvotes. not sure if godot has the resources to setup a site like this though. Maybe a open source solution is avaible? https://blender.community/c/rightclickselect/

@reduz
Copy link
Member Author

reduz commented Sep 3, 2019

@NATE066 No need to, this github repo will be used for this.

@Ertain
Copy link

Ertain commented Sep 3, 2019

Great start to restructuring for new features or fixes. I hope that when the proposals are written and posted, most are easy to digest, are to the point, and the readers can support the proposals they agree on.

@nathanjwtx
Copy link

What will happen to existing proposals/feature requests? Will they need to be re-submitted?

@willnationsdev
Copy link
Contributor

willnationsdev commented Sep 3, 2019

@reduz

Questions:

  1. Do users who already have pull requests submitted need to create proposals here and gather support/description/etc. before they can expect their existing PR to be accepted? I'm guessing yes.

  2. Should we outline/document/guide users (new and old alike) how they should identify which core contributors to talk to about which type of feature request / enhancement? As I understand it, most core contributors are specialized or more familiar with specific areas of the codebase. How do we guide people from "This is what I want to add to the engine" to "this is who I need to talk to in order to get it approved?"

  3. How should we handle the fact that you ultimately have veto power on Issues, in such a way that we can effectively streamline what stuff you have to look at and figure out as early on as possible whether someone's concept would be approved? I speak on this as I know I've had several proposals that had a positive reception, and so I did the work of implementing them, but then I'd ultimately have to shut down the effort when you informed me that you didn't like the entire proposal.

    • My initial idea would be to have 3 labels in this repository's issues to indicate if they are approved, reduz-approved, and/or tested. You could then filter to only approved ones when examining a list of items and only ones that have all 3 would actually get merged, unless they were fast-tracked.

    I'm late to the conversation, so maybe you guys have already discussed and debunked that idea, idk. My success with using IRC has been hit and miss, so I usually just hang out on Discord, but that's not where all the meetings take place, so I'm pretty much always gonna be out-of-the-loop.

  4. What system would you recommend if someone has a proposal that involves multiple interrelated, but independent features? Create two separate proposals and then have one state that it would rely on the other?

@NATE066

Afaik, you can actually add a filter to GitHub issues to filter based on the number of upvotes they get. Here's an example for this repository.

@reduz
Copy link
Member Author

reduz commented Sep 3, 2019

@nathanjwtx

What will happen to existing proposals/feature requests? Will they need to be re-submitted?

Yes, following proper guidelines, most will be closed and asked to re-open properly here. If some of them have an important discussion they will be directly moved to this repo.

@fire
Copy link
Member

fire commented Sep 3, 2019

The term in English is "fast-tracking" instead of "sidetracking." This term is the case of allowing core contributors to expedite the process GIP if "requirements and use case are clear or they discussed themselves a well-understood problem beforehand."

I recommend changing the term "sidetracking" to "fast-tracking"

Regarding the three label proposal. 1. approved, 2. reduz-approved, 3. tested.There is a bottleneck on Reduz approving contributions; therefore, I wouldn't create a tag for that. Perhaps the label can be named something else or removed.

I would only have: 1. approved, 2. fast-tracked, 3. tested

  1. archived would match the existing issues workflow.

@reduz
Copy link
Member Author

reduz commented Sep 3, 2019

@willnationsdev

Questions:

  1. Do users who already have pull requests submitted need to create proposals here and gather support/description/etc. before they can expect their existing PR to be accepted? I'm guessing yes.

For enhancement PRs, yes most likely.

  1. Should we outline/document/guide users (new and old alike) how they should identify which core contributors to talk to about which type of feature request / enhancement? As I understand it, most core contributors are specialized or more familiar with specific areas of the codebase. How do we guide people from "This is what I want to add to the engine" to "this is who I need to talk to in order to get it approved?"

Users normally would not need to interact with core contributors (it would make our life impossible). Instead core contributors responsible of approving will check proposals. I think it makes more sense that those willing to create PRs interact with us, and for this they can always come to irc.

  1. How should we handle the fact that you ultimately have veto power on Issues, in such a way that we can effectively streamline what stuff you have to look at and figure out as early on as possible whether someone's concept would be approved? I speak on this as I know I've had several proposals that had a positive reception, and so I did the work of implementing them, but then I'd ultimately have to shut down the effort when you informed me that you didn't like the entire proposal.

Well, if you read again, this is what this system is trying to encourage. Many of your proposals and contributions are great, but a lot of it is just things you wanted to do that nobody asked for, nor it was clear what they would be used for. By discussing proposals first and seeing if there is any interest, we can save the work on rejecting a PR due to core contributors not finding it useful or in demand. This is why so much focus is put on the first question: "describe your project and how this will help you."

  • My initial idea would be to have 3 labels in this repository's issues to indicate if they are approved, reduz-approved, and/or tested. You could then filter to only approved ones when examining a list of items and only ones that have all 3 would actually get merged, unless they were fast-tracked.

Again, I don't think I've ever used veto power (I don't really think I have it either), My responsibility as development leader is to always promote discussion and agreement by community and contributors. If I'm against something, I'll put an argument about why, I won't just go and close a PR.

I'm late to the conversation, so maybe you guys have already discussed and debunked that idea, idk. My success with using IRC has been hit and miss, so I usually just hang out on Discord, but that's not where all the meetings take place, so I'm pretty much always gonna be out-of-the-loop.

Apologies about it, but most of us doing core work use IRC, where we often hold review meetings for all PRs. Many times it may seem like any of us just goes and closes a PR, but most of the time it was discussed with the other peers in a meeting before closing.

  1. What system would you recommend if someone has a proposal that involves multiple interrelated, but independent features? Create two separate proposals and then have one state that it would rely on the other?

I have no idea, let's try and see how it works, but again keep in mind the points that were listed as requirements, the first one is key.

@willnationsdev
Copy link
Contributor

@reduz Got it. Thanks for the detailed feedback!

Users normally would not need to interact with core contributors (it would make our life impossible).

Well, I'm talking about how you specifically mention talking to core contributors directly if you want to add a feature that has not yet garnered a lot of public support:

Ask a core contributor, who may be interested in fast-tracking your proposal for approval.

There isn't a clear way of identifying who would be best to talk to about what type of feature, etc.

Well, if you read again, this is what this system is trying to encourage. Many of your proposals and contributions are great, but a lot of it is just things you wanted to do that nobody asked for, nor it was clear what they would be used for. By discussing proposals first and seeing if there is any interest, we can save the work on rejecting a PR due to core contributors not finding it useful or in demand.

Yeah, I understand. ^_^ Looking forward to the new system. Appreciate you typing this all up.

@reduz
Copy link
Member Author

reduz commented Sep 3, 2019

@willnationsdev

Users normally would not need to interact with core contributors (it would make our life impossible).

Well, I'm talking about how you specifically mention talking to core contributors directly if you want to add a feature that has not yet garnered a lot of public support:

Ah, I mean mostly if you are willing to do a PR. Anyone is welcome to come to irc and ask something, but community feedback will always be more important.

Ask a core contributor, who may be interested in fast-tracking your proposal for approval.

There isn't a clear way of identifying who would be best to talk to about what type of feature, etc.

If you ask in #godotengine-devel who is responsible for some area, you will most certainly get an answer. If you just ask whether anyone would be interested in something, that's something that will not get much enthusiasm because most of us just don't really know or care. It's better for the community to define what they would find something useful for.

@willnationsdev
Copy link
Contributor

FYI, I'd add a GitHub Issue Template sooner rather than later as I'm sure this repo is about to get flooded with new Issues, lol.

@reduz
Copy link
Member Author

reduz commented Sep 3, 2019

@willnationsdev This will happen when we change the issue template in the main repo to specify that only bug reports are allowed, and that proposals will have to come to this repo.

@willnationsdev
Copy link
Contributor

^ Just realized that this means the number of Issues in the godotengine/godot repository will actually reflect the number of bugs that exist in the engine. That should help stop people from being warded away from the project by a nothing but a wayward glance at the Issue count. XD

@KoBeWi
Copy link
Member

KoBeWi commented Sep 3, 2019

Does that apply to ALL enhancement issues? Including usability ones? What if someone suggests a cosmetic change, which isn't a bug report, but could make life a little easier? Like allowing to filter options somewhere, adding an alternate way to do something (e.g. rename scripts from Script Editor) or rearranging some icons/menus?

This would be a good example of such thing: godotengine/godot#24542. It's not a bug report, wasn't really requested, but didn't have much impact either and PR that closed this was literally one line. Will such random and trivial issues have go to this repository and through the whole process too? Or does it apply only to "big" proposals? And where's the line then?

@reduz
Copy link
Member Author

reduz commented Sep 3, 2019

@KoBeWi drawing the line is difficult, so at the beginning yes. We may eventually understand the system better and over the long refine the criteria.

@kone9
Copy link

kone9 commented Sep 3, 2019

A monthly voting system

@reduz
Copy link
Member Author

reduz commented Sep 3, 2019

@kone9 There is not going to be any voting. This is an open source project where everyone does whathever they want, whenever they want, so it's entirely up to contributors to decide which proposals to do.

@vnen
Copy link
Member

vnen commented Sep 4, 2019

@KoBeWi for simple enhancements you can do a proposal and ask a core contributor/code owner to fast-track the process with the argument that it improves usability and it's a small change. If it's really that good and simple I'm sure the owner will see the value and allow the fast-track route.

@aurodev
Copy link

aurodev commented Sep 4, 2019

^ Just realized that this means the number of Issues in the godotengine/godot repository will actually reflect the number of bugs that exist in the engine. That should help stop people from being warded away from the project by a nothing but a wayward glance at the Issue count. XD

Definitely needed!

@follower
Copy link

follower commented Sep 4, 2019

  1. Perhaps a pointer to .github/CODEOWNERS might be helpful for people wanting to know which core contributor(s) are primarily involved with specific areas.

  2. Re: delineation between "enhancement of existing feature"/"feature addition"--it is presumably always going to be a grey line but perhaps we could, for example, look to the criteria used by Python in the PEP process as guidance?

  3. Based in part on my observations from the conversation around the PR to add bbcode font size support to RichTextLabel I get the impression there could be some value to encourage people to try to implement at least an initial proof-of-concept in GDScript rather than jump straight to engine C++ or provide nothing.

    A proof-of-concept requires less work than PR-ready code upfront & gives a concrete implementation to discuss & identify potential issues. It also means that if people need a feature now that they can at least get something.

    And when CoolNewFeature.gd is seen included in 500 real-world projects but there's, say, concerns around performance or need for an in-engine integration hook point, then there is real world usage to guide prioritization/in-engine implementation. (e.g. Maybe rather than adding a "font size tag" feature it's better to add a "GDscript accessible unknown-tag-encountered hook" feature).

    Obviously GDScript can't do everything but particularly since the addition of class_name I think GDScript's capable of a lot more than people realise.

    It would also allow the answer to a proposal to be a more positive "can you or someone else provide a GDScript proof-of-concept" rather than "No" or "Not at the moment".

    Encouraging this would also invite tangible code contributions from a wider group of potential developers.

@golddotasksquestions
Copy link

golddotasksquestions commented Sep 4, 2019

KoBeWi for simple enhancements you can do a proposal and ask a core contributor/code owner to fast-track the process with the argument that it improves usability and it's a small change. If it's really that good and simple I'm sure the owner will see the value and allow the fast-track route.

I am concerned this process will further diminish involvement of users who are not contributors themselves or much involved in the community but just USE the engine for their purposes (aka by far the vast majority of Godot users).
Getting more of those users involved should be at the forefront of concerns for any open source project imho, because once a user has submitted an proposal even of the smallest kind, they will immediately feel a lot more invested into the project as a whole. This then in turn can lead to more bug reports from this user, more involvement in the community and discussions and maybe even someday a PR from that person.
For this reason I think we should establish the most accessible structure possible, that encourages people to submit proposals for small enhancements, not make it harder for them by requiring a social media rally (not everyones cup of tea), or to research to code owners.
If I as general user who is not involved yet and does not care much about involving myself yet, seen good proposals for small enhancements closed, just because they ran out of time and apparently been opened by someone who is not as well connected as a hand full of other users, I would really hesitate to involve myself too. Because why? Only to see my spark of concerns/ideas/improvements/enthusiasm die or forgotten?

I liked the sound of @akien-mga s summery in #1 better, where he stated:

Proposals for substantial changes have to go through the GIP process.

    "Substantial" is the key here. Consensual proposals which don't require a substantial amount of code/design discussion can go from the "approved issue" to a PR on the code repository directly.

In the long run, setting up a website like https://blender.community/c/rightclickselect/ as @NATE066 suggested might be a very good idea.

For now, I think making it as clear as possible to a general user (who is not necessarily a CS student) how to differentiate between a bug or a feature request and examples for substantial vs minor feature proposals within the issue submit form would be necessary.

TL;DR:
To facilitate involvement and therefore Godot's growth:

  • make it as easy and accessible as possible for literally any Godot user to submit small ideas to improve Godot, help them understand what is "small" and let this information flow to code owners and contributors in that area
  • make sure those Godot users feel heard and validated when they do so

@reduz
Copy link
Member Author

reduz commented Sep 4, 2019

@golddotasksquestions The problem is that the amount of content in this regard submitted daily is enormous, and it is only going to get worse. Allowing users to easily express what they want, without going into detail, only results in nobody having the time and interest to check and discuss all those proposals. In the end also, contributors just do whatever they want because this is an open source project, not a company, so there is a complete disconnect.

The point of all this is that, proposals need to be less and more detailed, this will considerably increase the chances of them being actually discussed and approved, so contributors can tell more easily what they can pick up and contribute with.

We are also not going to use any external site for this, because for organizational purposes, GitHub allows much better cross referencing of issues.

@KoBeWi
Copy link
Member

KoBeWi commented Sep 4, 2019

The only disadvantage of GitHub is that you need an account. Not only to create proposals, but also to upvote them. Not everyone has an account here, which might be a problem when trying to get bigger community input.

@girng
Copy link

girng commented Sep 4, 2019

I personally think the main issue tracker should be for bugs/issues that make Godot unstable. I really like the concept of GIP.

@golddotasksquestions
Copy link

golddotasksquestions commented Sep 4, 2019

@reduz
I understand what is being discussed here. I read everything and over at #1 and share your reasoning and intentions. I made my comment because it might be easy for people who engage with one another here, who had a Github account for a long time or use it daily, to forget how if is for people who don't have a Github account, who are not engaging in such a community already, who first and foremost want to use software. These people are very valuable. Their opinions are as well. The are the majority after all (Just compare the download numbers, or Discord and subreddit members to the people who regulary engage here on Github)

I would like to bring attention to the question how we can include those people who first and foremost use Godot (and not contribute as of yet).

This GIP process here and Godot as a whole seems like a very democratic form of collaboration which aimed to cater to all it's users needs.
"What users want ...", "If there is enough support ...", "If enough users express the need ..."
That's all great and really beautiful, but devs will also get a skewed image of those wants and needs if only a small group of hardcore users and contributes are actually participating. Naturally, users who contribute engine code and who are very active here often often have a strong "backend" focus in their interest, while users who do not participate have their focus on using the tools provided to create a game. Those groups don't always have the same needs or understanding of issues. For better games, for a better tool, the barrier between them needs to be as thin as possible.

Separating bugs from features is definitely a good, probably very overdue, step forward. I think also separating minor improvement requests (like these for instance: godotengine/godot#27782 , godotengine/godot#27276) to bigger feature proposals is a good approach. GIP makes a lot of sense for such bigger proposals.

@reduz
Copy link
Member Author

reduz commented Sep 4, 2019

@golddotasksquestions As I mentioned before, the intention here is to make things easier for developers, not users. This puts more burden on users and it's completely intended, simply because most of our contributors don't have the time and resources to interact with every little thing the community does.

Also, drawing the line on "minor improvement requests" is grey and debating what constitutes "minor" would end up being a major discussion. This is why I prefer there is no such distinction at the beginning and, once the system is working we can see how to improve it.

@golddotasksquestions
Copy link

golddotasksquestions commented Sep 4, 2019

I completely agree the focus here is to make things easier for developers and contributors, having a "burden of prove" and everything else discussed here is good.

Ways to archive more oversight and less work for could be a better form to submit such proposals. Separation in different categories. Helping users to self-seperate in broader categories (and let issue wranglers worry about odd cases), and therefore help contributors to find issues they have feel responsible for or have interest in. Maybe allow contributers to "subscribe" to certain categories.

But I don't think these improvements should happen on the cost of accessibility for anyone participating by making code-owners persuasion a requirement, actively discouraging participation via auto-closing after a period of time or punishing a users lack of social media presence.

@reduz
Copy link
Member Author

reduz commented Sep 7, 2019

@golddotaskquestions More or less, yeah.

Unfortunately it's the only realistic way proposals can be filtered, evaluated and prioritized, else the alternative is them being outright ignored like now.

@LikeLakers2
Copy link

LikeLakers2 commented Sep 10, 2019

As mentioned in the referenced PR just above this comment, as well as a comment from earlier in this issue, I'm unsure if I should be making a proposal issue on this repo for the sort of PR that could qualify as both a bugfix and an enhancement. Would anyone here be able to help me on that matter?

@Eoin-ONeill-Yokai
Copy link

I have some reservations about this new design for Godot proposals.

While I understand and sympathize with the problems that existed in the previous pipeline and the intent behind this new system, the current idea of routing all proposals to a separate repository raises a few questions. Looking at each of the old pipeline's stated problems, does this new pipeline adequately solve them?

1. Too many issues.

Does this actually reduce the number of issues that Godot currently has or will receive, and is that actually a good thing? Simply moving proposals from one repository to another won't decrease the number of proposals that people submit--like moving books from one shelf to another, it only changes the location and organization. It also doesn't guarantee that proposals are submitted to the right place or less likely to need filtering by core team members. On top of that, since github can already isolate bugs from proposals (for example) using labels, how does adding a second repository benefit organization?

I also find myself unsure whether "too many issues" is actually a correct assessment of the problem. From my experience so far, bug reports, feature ideas, pull requests and other [high-quality] forms of community contributions are not only a good thing, but a very necessary component of prosperous open source projects. Is the problem really the quantity of these things, is it the organization, or is it the quality?

2. Too many shallow issues.

If the problem is actually too many shallow, vague, or generally low-effort proposals, then I think that this may not be very effective. First off, having rules and guidelines is absolutely a good thing and makes a lot of sense. However, this is the internet, and (for a variety of reasons) simply having rules doesn't mean that they will be followed, and it'll still be up to the core team to review, filter, move, and close shallow issues.

The second, and in my opinion more pressing, issue has to do with the concept of upstreaming, which is at the heart of almost all open source projects. Whether you're a solo developer or a game studio, one of the big benefits of an engine like Godot over something like Unity (for example) is being free to make changes to the engine that you personally see as beneficial to what you're doing or how you work. Sometimes, these changes are specific to a certain project or workflow, and that's fine. However, other times, you may feel that some change that you've made may be beneficial upsteam--that is to say, Godot Engine itself and its users in this case. This raises two, very fundamental questions: (a) does Godot Engine want upstream patches from individuals and studios? And, if so, (b) what does the upstreaming process look like under this new system?

If I work for "Studio X", and I have a patch in my own fork of Godot that is already designed, implemented, and (I think) quite good. Should I attempt to submit this patch upstream and how? My understanding of the new proposals repository leads me to think that you (the core Godot team) want to be involved as early as possible, from the design to the implementation. Does that mean that you are no longer interested in upstream patches? Or does that mean that people with concrete, and in some cases, complete implementations simply need to go through the motions of submitting an abstract proposal before submitting their patch?

If so, then I have a few concerns. (a) Making it harder to upstream patches means that people are less likely to do it, which ultimately means that Godot may potentially lose out on high-quality upstream feature submissions. (b) People with concrete ideas and working implementations who still want to upstream may need to "pretend" that their features aren't implemented, and, in lieu of concrete PRs, you end up with more issues that are abstract or vague.

3. Unsure about PR usefulness and quality.

This might work. If the only ideas that make it to the PR stage of the pipeline are ideas that have been co-developed by the core team and the community, then I think that you will feel that the general usefulness and quality of PRs is high. Proposals that you don't like will not advance, while the ones that you do like will advance under your guidance.

However, I'm personally not sure how that's different to the old process of receiving a PR, reviewing it, discussing it, developing it, and eventually accepting or rejecting it. This leads to the next point...

4. Harder to review patches (PRs) than proposals (issues).

Is this really the case? Proposals are essentially ideas, and ideas are (at face value) very hard to accurately qualify to the point that they can be accepted or rejected early. Sometimes even "good" ideas are held back by a poor implementation, and (outside of some very extreme cases) it can hard to fairly judge an idea to be "bad" outright. If we were scientists, we would call a proposal an "hypothesis"--something that can't be qualified without some degree of testing or further exploration. To put it another way, how do we know when a proposal is good enough to be greenlit? And, when it comes to closing issues, how do we know when a proposal is not good enough to keep open?


Some other questions that may be worth consideration: (a) Does this speed up or facilitate the process of integrating patches? (b) Does this make people (from hobbyists and hackers, to professionals and studios) more or less likely to contribute? (c) Will this make people whose patches or ideas are rejected less salty or less likely to take things personally? I have some thoughts on these too, but I'll save it for another time...

So, I know this is long, but as someone who likes Godot, wants to contribute to it more in the future, and wants to see it continue to thrive and grow, I felt like it was worth taking some time on a rainy Sunday afternoon to express myself. I'd like to say that my few experiences contributing to Godot so far have been very positive, and I hope that the types of patches that I've been contributing have been net positive for Godot as well.

@aaronfranke
Copy link
Member

does that mean that people with concrete, and in some cases, complete implementations simply need to go through the motions of submitting an abstract proposal before submitting their patch?

As I understand it, yes, but the proposal doesn't have to be abstract and can/should mention actual use cases. Features should be discussed to see if it would be beneficial for everyone. A concrete and fully complete implementation of a feature doesn't mean it's useful to others, and if it's not useful to others then it's not worth upstreaming and continually maintaining. It's also possible that a feature designed for one use case could be made to work with many more use cases if it's generalized.

@willnationsdev
Copy link
Contributor

willnationsdev commented Sep 16, 2019

@Eoin-ONeill-Yokai

I'm not a core contributor exactly, but here are my thoughts on things based on my observations so far:

Does this actually reduce the number of issues that Godot currently has or will receive, and is that actually a good thing?

If the rate at which proposals are submitted is too high, then core contributors won't even have time to address them. They will be struggling simply to triage them accurately, let alone actually get any work done. As such, none of the Issues will actually get worked on by anyone which, by default, makes the creation of Issues at that rate a bad thing. The new system is designed to reduce the volume of incoming Issues which directly counteracts this effect (meaning it is a "good" thing).

How does it help reduce the load? By precluding the creation of proposals that will not lead to an engine source code change.

The changes also affect another important change: when examining a PR, the use case and community-support of a proposal are not always clearly defined. The new template demands more information from the proposal creator, clarifying the context, requirements, implementation details, and benefits of the proposal.

By disregarding the vast majority of Issues in godotengine/godot and instead only addressing the proposals in the new repository using the new template, core contributors are relieved of the burden of needing to identify all of this information for the poorly backgrounded proposals in the old repo.

like moving books from one shelf to another, it only changes the location and organization.

Rather than just moving a book, it's like someone is re-organizing their shelves by taking a book down from the old shelf, reading it, adding notes, underlines, and tabs everywhere with a summary and analysis attached, and then placed the now-updated book in the "Annotated" shelf. Only, the core team aren't the ones doing that work anymore. Now they need only read the summary/analysis.

From my experience so far, bug reports, feature ideas, pull requests and other [high-quality] forms of community contributions are not only a good thing, but a very necessary component of prosperous open source projects.

I don't think anyone on the core team disagrees. The problem is that most Issues are not high-quality and submitted PRs don't always provide adequate background.

I can speak from my own experience here. I have written some VERY hefty PRs that I believed solved various problems very well, but which were never thoroughly peer-reviewed properly at the Issue stage. The result was that the PRs I worked on were often more complex than necessary or just completely useless when no one stepped forward to say that they actually would use the features the PR added. The use case in actual live projects wasn't clear. How much people actually wanted the changes wasn't clear. Whether alternative solutions/designs even existed or were being worked on wasn't clear (is this really the best solution?). All the core team's work in reading the PR and evaluating it ended up being a waste of time because all of this important information just wasn't there.

Is the problem really the quantity of these things, is it the organization, or is it the quality?

The quantity and quality are both a problem. And the hope is that by enforcing a high quality (and auto-closing ones with low quality), the quantity will remain sustainable for the limited bandwidth of the core team.

However, this is the internet, and (for a variety of reasons) simply having rules doesn't mean that they will be followed, and it'll still be up to the core team to review, filter, move, and close shallow issues.

Of course, rules may not be followed, but now there is a proper pretense to close issues early if the user hasn't done the front-work of making a detailed and relevant proposal. The team will be able to tell, at a glance, if a proposal has enough information (if not, and the user doesn't respond soon to requests for a more thorough proposal, then it gets cut), and the wording of the template itself deters people from making frivolous proposals.

does Godot Engine want upstream patches from individuals and studios?

Of course. That'd be great.

what does the upstreaming process look like under this new system?

They should open a Proposal for what their changes to upstream would look like, give a description of the context of the program they were writing, what problem they ran into, how their changes helped fix that problem, why it couldn't just be solved with a simple script, why it is necessary in the main engine repository (instead of just as an external addon), and provide a visual example of the changes in action.

This vastly speeds up the core team's ability to evaluate whether a PR submitted by this Studio X developer should actually be merged or not.

Just because you solved a problem for your project and like the way those changes affected your Godot build doesn't mean other people concur (or that other people don't have better approaches in mind for solving the same problem). Everyone should go through the official proposal process.

If I work for "Studio X", and I have a patch in my own fork of Godot that is already designed, implemented, and (I think) quite good. Should I attempt to submit this patch upstream and how?

See above.

Or does that mean that people with concrete, and in some cases, complete implementations simply need to go through the motions of submitting an abstract proposal before submitting their patch?

This, except for the abstract bit. The more specific they can get, the better.

Making it harder to upstream patches means that people are less likely to do it, which ultimately means that Godot may potentially lose out on high-quality upstream feature submissions.

I suspect that the core team would say, "So be it. It's better for us to verify that the changes are desired rather than merging code willy-nilly. But if the people believe that strongly in it, they can always contact us directly on IRC and discuss having us fast-track their changes."

People with concrete ideas and working implementations who still want to upstream may need to "pretend" that their features aren't implemented, and, in lieu of concrete PRs, you end up with more issues that are abstract or vague.

No need to pretend. In fact, having the feature already implemented in their Godot version makes demonstrating the usefulness and mockup portions of the proposal a heck of a lot easier. XD Just show a before/after with a latest stable build and their build for the usefulness part and take screenshots for a "mockup". They can also give much more detail about the relevant code changes involved which helps a lot in dissecting whether it's a good approach.

If the only ideas that make it to the PR stage of the pipeline are ideas that have been co-developed by the core team and the community, then I think that you will feel that the general usefulness and quality of PRs is high.

This is the idea. I've already covered how this is different from the old process (bookshelf transfer analogy).

Proposals are essentially ideas, and ideas are (at face value) very hard to accurately qualify to the point that they can be accepted or rejected early.

They are ideas, yes, but they are ideas without context. They simply say, "I have this change I would like to make. There is some problem I've dealt with and this fixes it. Here you go." Rather than, "Here is a documented case of a real task not performable due to a problem. Here are my changes. They fix the problem exactly in the way that has been previously discussed at length by the community. The community approves of these changes and has already had plenty of time to digest and debate them. All you need to do is verify that the code is correct, rather than figuring out all this other stuff that's not relevant to the code itself."

it can hard to fairly judge an idea to be "bad" outright.

When an idea is just an idea without the accompanying context, it amounts to clutter that slows down the work of core contributors. Ideas should go somewhere else (#47 hint, hint core contributors!) so that people who aren't actively working on the engine can have a place to track them, not slow core devs down, but also develop those ideas into full-blown proposals if they ever get to that point.

To put it another way, how do we know when a proposal is good enough to be greenlit?

When people have spent a reasonable amount of time discussing a properly detailed proposal. I did suggest the creation of an approved label, but never heard back on that idea.

And, when it comes to closing issues, how do we know when a proposal is not good enough to keep open?

If a core contributor requests that the proposal be updated with more information and the person doesn't follow through with the request within a few days. I would guess anyway. Sounds about right.

Does this speed up or facilitate the process of integrating patches?

Tremendously. Have already stated as much in prior answers though.

Does this make people (from hobbyists and hackers, to professionals and studios) more or less likely to contribute?

My guess is that it would make people less likely to contribute by a small margin as those who are tentative about getting involved with an open source project in the first place - with little experience contributing to anything - would likely feel intimidated by the amount of information being requested of them. And hey, those people might have good ideas, who knows? But if people wouldn't have had time to hear them out anyway, then all that would be happening is everyone involved wasting their time.

Will this make people whose patches or ideas are rejected less salty or less likely to take things personally?

I have most certainly gotten salty, even with the existing system. I don't think these changes will necessarily make someone more or less salty (so long as #47 is dealt with so that addon/plugin/module changes have a place to live properly). If you are asked to provide the necessary information, and don't, then that is your own fault for not providing the context of your request adequately. I think that core devs will be lenient with those who actively update their information appropriately and less lenient with people who make a one-off, low-effort suggestion and then barely respond to replies.

I'd like to say that my few experiences contributing to Godot so far have been very positive, and I hope that the types of patches that I've been contributing have been net positive for Godot as well.

Glad to hear that, and I'm guessing they have been, based on your thoughtfulness and depth here. :-)

I myself have had a, what I perceived to be, a very mixed bag of reception for PRs, mostly because I fell victim to being exactly the kind of person whose requests they rejected. And in retrospect, I can see exactly why they rejected every one of the PRs they did. I was blind to my own desire for these features without the preparedness to back them up in terms of use-case, benefits, and/or mockups. I see better ways of doing things now and have become more active in engine changes again after, for a long time, relegating myself to plugins, not wanting to be very involved in engine changes. Then I found that much of the plugin work I'd done was chump change compared to the effect a proper engine change would've made for solving those problems.

And while in some sense, it might have felt like wasted effort, on the contrary I have now done the work of verifying whether the stuff is doable from a scripting side and have a better understanding of the problem domain, how the engine needs to change to enable better scripting solutions, and can provide examples/mockups of what the changes could look like if implemented. This process has made me need to do the work of proving the effectiveness of my changes and go into more detail about why it's important. And all of that helps give context to any PRs that would be associated with them, increasing the chance that they get accepted (so work actually gets done).

@kone9

This comment has been minimized.

@willnationsdev
Copy link
Contributor

@kone9 Did you perhaps mean to create an Issue? What you commented has little relevance to this Issue. You should make a new one that fills out the Issue Template so that the community can review your proposal more effectively. Thank you for your suggestion though.

@Eoin-ONeill-Yokai
Copy link

As I understand it, yes, but the proposal doesn't have to be abstract and can/should mention actual use cases.

By abstract I don't really mean vague, poorly-formed, or like a Picasso; I mean to say abstract as opposed to concrete. I should also mention that concrete doesn't mean inherently good or worthy of acceptance, nor does abstract mean inherently bad. Code and design are concrete, ideas and are abstract. Generally speaking, it's much easier to make objective judgements of concrete things than abstract ones.

By virtue of the fact that proposals (issues) do not contain actual code, they are inherently less concrete than even a work-in-progress or proof-of-concept patch (PR). Thus, in the very common case of upstreaming, where an individual or studio already has a patch ready for submission, asking them to first submit a proposal is going from something concrete to something abstract.

Of course, whether it's via an issue or PR, ideas should be well reasoned and explained, but that's not really what I'm alluding to.

Features should be discussed to see if it would be beneficial for everyone.

Agreed. But, whether that happens as an issue on this repository, or a PR on the actual repository is the crux of this change, and I'm not sure that doing it here makes anything faster or easier for anyone. 'Bad' proposals will still need to be triaged, reviewed, asked for changes or closed. 'Good' proposals will now need to be, somehow, greenlit so that whoever is responsible for implementing that change can know to submit a PR.

If 5000+ issues come in, whether it's here or there, there is still an associated maintenance burden, and if every patch needs to have two rounds of approval (proposal first, PR second), the maintenance burden may actually become worse. That's assuming, of course, that contribution doesn't decline in general, which we all hope to be the case, because a general decline in contribution would definitely be a bad thing.

A concrete and fully complete implementation of a feature doesn't mean it's useful to others, and if it's not useful to others then it's not worth upstreaming and continually maintaining. It's also possible that a feature designed for one use case could be made to work with many more use cases if it's generalized.

This is also totally right, and the opposite is also true. There are occasions in every open source project when a patch request comes in that is useful to others almost right away, or close enough that a simple request for changes is adequate in getting it where it needs to be.

In these cases somebody submits a PR, reviewer asks for a few changes, submitter makes those changes, and when everything looks good and meets approval requirements, the patch is merged. Those are "good patches", and one my main concerns is that, by introducing more steps, this system will make it harder for people to submit (and therefor, for Godot to receive) good, useful and desired patches.

(Keep in mind that we're not talking about random "hey I unilaterally rewrote the entire node system, plz pull" type of PRs that can be easily rejected outright for obvious reasons. Because, from the sounds of it, even small, reasonable patches and minor feature submissions will become a multi-step process for both the submitter and the reviewers.)

@vnen
Copy link
Member

vnen commented Sep 16, 2019

Well, @willnationsdev addressed very well the points of @Eoin-ONeill-Yokai. I still want to add a bit of my opinion on the points, which are all valid concerns.

Does this actually reduce the number of issues that Godot currently has or will receive, and is that actually a good thing?

Yes. It's not only moving. Godot is now requesting a higher quality barrier for feature and enhancement proposals, so this will diminish the volume of new issues in the main repository and it's natural that issues here are rarer (or they can be insta-closed by not following the template).

It is a good thing because less issues means more time per issue that a contributor can give attention. There was a time when I read every single issue and comment in the repository, so I could easily pinpoint duplicates. Now there's no way I'm gonna clear my over 7000 notifications any time soon and I can barely pay attention to the ones I'm actually participating. Reducing the number of new issues is a good thing (just because Godot has too many issues and too few people).

If the problem is actually too many shallow, vague, or generally low-effort proposals, then I think that this may not be very effective. First off, having rules and guidelines is absolutely a good thing and makes a lot of sense. However, this is the internet, and (for a variety of reasons) simply having rules doesn't mean that they will be followed, and it'll still be up to the core team to review, filter, move, and close shallow issues.

People won't follow the rules. But if Godot has a clear ruleset of how to present a proposal, then they can politely ignore anything that doesn't follow the rules. Honestly, I think it's okay even to setup a bot that automatically closes issues without the template. If people want to be heard, they have to follow the rules. I know this will generate backlash, but I believe that being obviously ignored is better than being implicitly ignored just by the sheer amount of new stuff that buried your idea.

However, I'm personally not sure how that's different to the old process of receiving a PR, reviewing it, discussing it, developing it, and eventually accepting or rejecting it. This leads to the next point...

Problem is the time. Reviewing a PR today means trying to discuss whether or not it is wanted and if the API is generic enough to be useful for many projects and if the implementation is okay in terms of design (and, of course, in terms of actual code). This means core contributors spend a lot of time in PR review meetings discussing those things, and there's a lot of new PRs being opened at the same time.

At the same time, the PR author will receive many comments that "there's a style error", "there's a typo here", "this variable could have a better name", "this could be extracted to a new function", "it needs to fix a conflict", "it needs to rebased on master", and a lot more that is related to details of the implementation before the feature was accepted in general. PR authors tend to fix those small issues quite quickly, but then have to wait for a PR review meeting for the core contributors to see and then decide that "the design is not the Godot-way and should be written in a different way". PR authors definitely get upset when this happens (and understandably so), since they worked on maintaining and rebasing their fork for quite some time and they discovered that the code wasn't going to be used.

With the proposal system, a PR won't be open (or won't remain open) before the feature itself was discussed in depth with the community and core contributors. So when a PR shows up, Godot can tell it follows the wanted design and the contributors can simply see if the code is functional and performant enough.

This will save time (and frustration) from both core contributors and PR authors. Even if it means less pull requests in quantity, it will increase the merged PR ratio and decrease the time a PR remains open. IMO that's better than what Godot has now.

4. Harder to review patches (PRs) than proposals (issues).

As a said above, reviewing a PR is more than just looking whether it's functional, there's a need to see if the proposal is really wanted and follow a generic design that can be clear and useful to many people.

Is this really the case? Proposals are essentially ideas, and ideas are (at face value) very hard to accurately qualify to the point that they can be accepted or rejected early.

It is hard to reject or reject ideas early. That's why there are open PRs that are almost two years old. The problem of having them there is that they take space of new stuff and there's the obvious question that's hard to answer: "when are they going to be reviewed again?"

Sometimes even "good" ideas are held back by a poor implementation, and (outside of some very extreme cases) it can hard to fairly judge an idea to be "bad" outright. If we were scientists, we would call a proposal an "hypothesis"--something that can't be qualified without some degree of testing or further exploration. To put it another way, how do we know when a proposal is good enough to be greenlit? And, when it comes to closing issues, how do we know when a proposal is not good enough to keep open?

I understand the point of these questions but they are valid with or without a proposal system. What the system wants to mitigate is the subjectiveness of it all. If Godot has clear and detailed guidelines for proposals, it should be easier to see whether or not each proposal is a good fit.

The system provides a set of questions that can easily (well, at least easier than the current system) discard proposal. If it's a project-specific thing, or if it's not used often, Godot can relegate that to a plugin and not create a new feature in the engine.

OTOH, Godot will know about the good proposals, They will be heavily upvoted and a core contributor will approve it when that happens.

Some other questions that may be worth consideration: (a) Does this speed up or facilitate the process of integrating patches?

Yes. When a proposal becomes a PR, the review will be faster than it is now, because only the actual code needs to be reviewed, not the design decisions. It also means that PR for bugfixes can be looked faster, since the review is more streamlined, less stuff will be left behind.

Of course, making a proposal and getting enough rep to be able to create a PR might make it slower in general from time of creation to the time of merge. But IMO it will save time of both PR authors and mergers as I stated above.

(b) Does this make people (from hobbyists and hackers, to professionals and studios) more or less likely to contribute?

Probably, yes. Honestly, I don't think Godot lacks in proposals though. Also, remember that bugfixes can be solved directly by a PR, it doesn't need a proposal. For bug reports, they are much more simple than a proposal, so it's much more approachable. Less issues with higher quality is better in my view, since it makes easier for them to actually being seen.

(c) Will this make people whose patches or ideas are rejected less salty or less likely to take things personally?

I think so. As I said above, many PR authors get frustrated when their code change is rejected a month after it was opened, after they solved conflicts and made small corrections. Those are less likely to open a new PR.

An idea that is rejected has a lower effect, because the work is more about the semantics of the proposal and the author only needs to argument their idea. No need to be doing small maintenance on work that won't be accepted. Also, rejection and acceptance will mostly come from the community, not from the core contributors. People are more likely to accept that the community don't want what they propose than when there's one guy with a Member tag rejecting it. The process makes it less personal.


We do have to see if this is a benefit, so the questions are valid. But I don't think what Godot has currently is sustainable, so there's definitely some change needed. I believe that the system proposed here is a good starting point.

@Eoin-ONeill-Yokai
Copy link

@willnationsdev Hey Will, thanks for the detailed reply! I'll reply to as much as I can.

How does it help reduce the load? By precluding the creation of proposals that will not lead to an engine source code change.

But how? I'm not sure I understand how pushing ideas from one github repo to a different repo actually does that. It's still going to be possible for people to freely submit ideas as issues (which don't carry any code), and those ideas still need to be triaged, organized, and generally vetted by the core Godot team. Nor does it reduce the likelihood that proposals (even those that start strong) get held up, stalled or abandoned before ever being made concrete, let alone being merged.

...when examining a PR, the use case and community-support of a proposal are not always clearly defined.

Sure, but why not simply improve the template for the PR process and require these sort of base-level things from submissions? If somebody submits a patch and they fail to make it clear what it is, who it's for, and why Godot Engine would benefit from merging it, they could simply be asked to refine their PR and provide more information.

Unless something is going over my head here, the new system doesn't seem to make it any less possible to write a bad proposal than writing a bad PR under the old system.

By disregarding the vast majority of Issues in godotengine/godot and instead only addressing the proposals in the new repository using the new template

Do you mean to say that the backlog of proposals in the old repo are just going to be disregarded in an attempt to wipe the slate clean? I'm not so sure about that...

The more specific they can get, the better.

Ok, but assuming they've taken the steps to adequately explain and justify their submission, what's more specific than an actual patch?

As the old saying goes "the proof is in the pudding". People can talk back and forward online for days, weeks, or years about whether a proposal might work or what ramifications it might have, but in many cases a patch (which shows, very concretely, what will change and how) is the best way to convey an idea--because people can take screenshots of it, because they can review the code, and because anybody can build and run it for themselves. As such, even the best proposal won't be as specific or concrete as a PR.

I suspect that the core team would say, "So be it. It's better for us to verify that the changes are desired rather than merging code willy-nilly. But if the people believe that strongly in it, they can always contact us directly on IRC and discuss having us fast-track their changes."

Well, nobody's talking about "merging code willy-nilly", and to say that some people will be having patches fast-tracked kind of contradicts the "everybody should need to submit a proposal" statement from before. Frankly, that does sound a bit bureaucratic, and avoiding that was one of the explicit goals of this change.

I myself have had a, what I perceived to be, a very mixed bag of reception for PRs, mostly because I fell victim to being exactly the kind of person whose requests they rejected. And in retrospect, I can see exactly why they rejected every one of the PRs they did.

Everybody has code rejected in open source, it comes with the territory and I try to never take it personally. Not every idea is a good one, nor every implementation, and sometimes good ideas and implementations are rejected simply because the project doesn't think they're a good fit for their overall strategy. That's Ok, and I respect the right of people who maintain and lead open source software projects to make the decisions that they believe are in the best interest of their project! :)

At any rate, I've run out of time today and I know I didn't respond to everything that you wrote, but I really appreciate your input.

Honestly, I'm still not totally convinced, but that's fine and I'm happy to try to work within whatever framework the core team decides to go with. I just hope that things work out for the better and that the result is net-positive for Godot and the surrounding community.

@vnen
Copy link
Member

vnen commented Sep 17, 2019

How does it help reduce the load? By precluding the creation of proposals that will not lead to an engine source code change.

But how? I'm not sure I understand how pushing ideas from one github repo to a different repo actually does that. It's still going to be possible for people to freely submit ideas as issues (which don't carry any code), and those ideas still need to be triaged, organized, and generally vetted by the core Godot team. Nor does it reduce the likelihood that proposals (even those that start strong) get held up, stalled or abandoned before ever being made concrete, let alone being merged.

It's not only moving, it's requiring a higher quality for them to even be considered. Proposals that don't follow the template can just be closed. Yes, someone will have to do it, but it's easier than having to decide up-front whether the proposal is feasible or not (with the alternative being letting it to rot like happened to a lot of old proposals in the main repo).

Stale proposals can be closed. If they gain traction again they can be reopened. Some of those things can be automated, even.

...when examining a PR, the use case and community-support of a proposal are not always clearly defined.

Sure, but why not simply improve the template for the PR process and require these sort of base-level things from submissions? If somebody submits a patch and they fail to make it clear what it is, who it's for, and why Godot Engine would benefit from merging it, they could simply be asked to refine their PR and provide more information.

Unless something is going over my head here, the new system doesn't seem to make it any less possible to write a bad proposal than writing a bad PR under the old system.

Because it gets in the way by cluttering the PR queue. Even with labels it gets harder to manage. Also, PRs contain code, and as I said in the other post, other people will comment on code details before the proposal is even considered. by the core team. By having only the proposal, the focus can be directed.

By disregarding the vast majority of Issues in godotengine/godot and instead only addressing the proposals in the new repository using the new template

Do you mean to say that the backlog of proposals in the old repo are just going to be disregarded in an attempt to wipe the slate clean? I'm not so sure about that...

No, see @reduz's comment up there: #10 (comment)

Proposals that have a discussion and reactions will be moved to this repo. Is likely that most will be closed, but they can be reopened here following the guidelines.

The more specific they can get, the better.

Ok, but assuming they've taken the steps to adequately explain and justify their submission, what's more specific than an actual patch?

As the old saying goes "the proof is in the pudding". People can talk back and forward online for days, weeks, or years about whether a proposal might work or what ramifications it might have, but in many cases a patch (which shows, very concretely, what will change and how) is the best way to convey an idea--because people can take screenshots of it, because they can review the code, and because anybody can build and run it for themselves. As such, even the best proposal won't be as specific or concrete as a PR.

I don't see why a patch can't be part of a proposal. A reference implementation is a great guide. But it tends to move the focus from the actual usefulness/design of a proposal to the actual code. A PR is just too concrete and discussion is often derailed.

I suspect that the core team would say, "So be it. It's better for us to verify that the changes are desired rather than merging code willy-nilly. But if the people believe that strongly in it, they can always contact us directly on IRC and discuss having us fast-track their changes."

Well, nobody's talking about "merging code willy-nilly", and to say that some people will be having patches fast-tracked kind of contradicts the "everybody should need to submit a proposal" statement from before. Frankly, that does sound a bit bureaucratic, and avoiding that was one of the explicit goals of this change.

The thing is that core contributors (i.e. people who contributed a lot over a long period of time) have "earned" the right to skip this process. It should be less bureaucratic for core contributors. Even they must submit a PR which will be reviewed and may be rejected by the others. They just can skip the proposal step, and allow others to do the same. If someone has a lot of good proposals Godot may also want to "promote" this person to a core contributor.

Maybe there should be a list of who is or isn't a "core contributor", but OTOH we don't them to be harassed by everyone wanting to get attention for a proposal.

@golddotasksquestions
Copy link

golddotasksquestions commented Sep 17, 2019

The thing is that core contributors (i.e. people who contributed a lot over a long period of time) have "earned" the right to skip this process.

I find this problematic and very much contradicting the idea of Godot being community driven if this community is split in two.
It creates a strong impression of "first class citizen". Unfortunately the perception is already tainted for some. See this thread: https://www.reddit.com/r/gamedev/comments/d5d0uu/foss_game_engine_godot_is_less_than_400_on/
Please don't make this worse by increasing hierarchy here instead of leveling it down.

@willnationsdev
Copy link
Contributor

willnationsdev commented Sep 17, 2019

@golddotasksquestions

I find this problematic and very much contradicting the idea of Godot being community driven if this community is split in two.

I mean, what are you proposing? What we have are "regular Godot contributors" and "core contributors that have done a lot and been around a long time" so they are trusted to change the source code without supervision. If we removed that difference, then it would mean letting anyone approve their own changes to Godot at their whim. And if they ever allowed that to happen, then the master branch would very quickly become an unmaintainable mess.

If a more "community" approach you are thinking of is some kind of community voting system to approve PRs, that again would not be a good idea. For the same reason you pay a specialist to do a job (plumber, landscaper, computer scientist, architect, lawyer), you wouldn't want to rely on an average joe, or worse a mass of average joes, making whatever policy changes they want just because it sounds good. You'd want people with the knowledge, experience, skills, and engine familiarity to make informed decisions about whether to merge in code. That's exactly what the core contributors are.

As for the extremely downvoted people in the linked reddit post, most of their complaints revolve around Godot not using modern C++ systems in full (and they are biased against it for that alone) or they have a large number of very valid obstacles that they experienced with Godot and don't plan on using it until it has had more time to mature and overcome those issues (speaking of MysteryGM's comments there). But removing this "first class citizen" effect for core contributors would make contributions descend into chaos rather than improving the situation.

@golddotasksquestions
Copy link

golddotasksquestions commented Sep 17, 2019

I think you completely missed my point, Will. I'm not talking about a PR voting system, and I'm not talking about letting letting anyone approve their own PRs. Pardon my French, but such a proposal would be rather stupid.

Of course long time contributors know their ways around the engine better and also know better how to implement stuff correctly. There is nothing wrong with trusting their experience, expertise and judgement on that.

I was referring to them having the right to skip the whole GIP process. This includes the discussion about if a feature is even wanted or needed by the community. One of the most common arguments for not accepting a proposal or feature is to minimize bloat, or that there is no demand for a feature. It's so common it has become a recognizable meme. If long time core contributors are excluded from need to have their proposals examined publicly under these rigorous criteria, then it will do nothing but poor fuel into the smoldering sense of an arbitrary first and second class contribution system. It will drive people who want to be, and can be be a positive force in this community, away.

@willnationsdev
Copy link
Contributor

willnationsdev commented Sep 17, 2019

@golddotasksquestions Ahhh, ok. You meant going the other direction, my bad.

I can see where you're coming from. In some respect, the current system encourages people to cater to individuals who are higher up in the system in order to fast-track changes rather than likewise having work peer-reviewed (and gives the core team the power to do the same). So, in a way, their privilege could cause other people to become frustrated with a biased system that seemingly works against them ("We both have changes, but I'm locked behind an approval board and they have free access. This is unfair. I'm outta here!").

However, I can also see this sort of thing from the other side too. If these people are to be trusted for their experience, expertise, and judgment, then we likewise can trust their judgment in regard to what changes should actually be fast-tracked, if any. The ability to fast-track something helps make the process less bureaucratic, even if it isn't used often. If someone were to abuse that power, then that person's privileges would likely be revoked.

And if I recall correctly, one of the other objections that could push someone away that @Eoin-ONeill-Yokai mentioned (and that you upvoted) was to say that upstreaming contributors might not want to go through the laborious proposal process. For which, the only alternative (if the change is small, useful, and might not - in the previous Issue system - warrant a fully detailed proposal) is to simply discuss it with a trusted core contributor and have them fast-track it. Do you have an alternative to answer his objection?

Edit: Also, even if I were a core contributor, I'd likely still go through this proposal system the vast majority of the time. I feel that the core contributors are the same, relying on the existing proposals to dictate which things they commit directly to the repo versus merging in a peer-reviewed PR.

@golddotasksquestions
Copy link

golddotasksquestions commented Sep 17, 2019

However, I can also see this sort of thing from the other side too. If these people are to be trusted for their experience, expertise, and judgment, then we likewise can trust their judgment in regard to what changes should actually be fast-tracked, if any.

Sure, but my comment is about whether the core contributors own proposals have to meet the same criteria and therefore follow the same approval process as those of non core contributors. (I say yes).
My comment is not about if something that already undergone the scrutinizing "is this bloat or not, do we need this feature or not, what does it do?" discussion and already has been green lit by the community of users (not just core contributors) and then is fast tracked. It it makes sense, and core contributors are not just fast tracking each other, then that's totally fine.

Upstreaming like Eoin-ONeill-Yokai has described is a special kind of case. I upvoted not because I think they would not have to go through the same process, but because I think we have to find a way to make people like that want to submit the solutions they have found to existing problems without discouraging them. just because I gave my thumbs up to his comment does not mean I think these PR should all be automatically pulled. I do agree though that already existing code is a great basis for a discussion. More so if also the other GIP criteria are met. Like mock-ups (in this case screenshots), explanation of usecases ect.

@girng
Copy link

girng commented Sep 18, 2019

But how? I'm not sure I understand how pushing ideas from one github repo to a different repo actually does that.

I made an illustration that might help. I'm not good with words so figured I'd draw it.

@girng
Copy link

girng commented Oct 4, 2019

This word is super important when proposals are being created: Conciseness! IMHO, it will help everyone in the long run. I'm at fault at being verbose all the time, one trick I learned is before I submit a issue, I skim through every sentence and reduce, reduce, and reduce. It helps so much.

@willnationsdev
Copy link
Contributor

@girng I feel personally targeted by this statement. :-P Perhaps some Issue rewordings are in order...

@Xrayez
Copy link
Contributor

Xrayez commented Dec 11, 2019

Regarding Rules for Submitting a Proposal requirement №5 currently present at README and in the spirit of discussion from #10 (comment) (3 and 4 claims specifically):

  1. You can make a PR implementing the feature in the main repository before making a proposal. However, if it is a large change, a core developer may require that you make a proposal before your PR can be merged. It is always better to make and discuss a proposal before spending your time implementing a new feature.

and the OP claim:

These are very difficult to review because we, as developers, don't even know this most of the time, so we would prefer they go via community filter. It's easier to review, discuss, approve or reject a proposal than a PR.

I find myself doing PR's anyway even if I do make a proposal. I don't feel like my time is wasted because I can always adapt my particular implementation via modules/plugin etc even if a PR is rejected: I don't believe the argument that "if something can be implemented via script it shouldn't be part of the core" is valid per se as I feel like a lot of the core functionality can already be re-implemented via script, in fact I've already started doing so for variety of reasons: godot-extended-libraries/godot-gdscript-ports.

Describe implementation detail for your proposal (in code), if possible:

That's the question which basically asks you to make a PR...

So, in my eyes that's even more work for Godot members to organize the discussion despite the requirements, isn't it? Should PR's for major features be forbidden to further decrease the clutter of PR's for the sake of supporting proposals?

@aaronfranke
Copy link
Member

aaronfranke commented Dec 11, 2019

@Xrayez: That's the question which basically asks you to make a PR...

Not necessarily, it could also be how you use the feature in GDScript/etc.

Perhaps "Show a mock up screenshots/video or a flow diagram explaining how your proposal will work" and "Describe implementation detail for your proposal (in code), if possible" should be merged. If it's a feature used in code, then I don't know if screenshots or a flow chart are relevant, let alone necessary. If it's a graphical feature, then the details of the implementation in code usually aren't important (and are basically asking the user to write (pesudo)code for what would be in a PR).

Something like "Describe how your proposal will work, with pseudocode and/or mockups".

@aaronfranke
Copy link
Member

I'm closing this issue as solved, as the proposal / GIP process has been well defined by a combination of this issue, #1, the PRs to this repo, and many of the other meta proposals, plus those linked above (and in the future, below) this comment. This issue has served its purpose, and further discussion on the proposal process should be done in other meta issues and PRs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests