-
-
Notifications
You must be signed in to change notification settings - Fork 3.5k
Discussion: Best Approach for Managing Blocker/Dependent Issues? #7870
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
Comments
Wow, thanks for the great ideas and write-up @perminder-17! There's a lot to process here, and I haven't looked into it carefully, but I had a few ideas that may be helpful. 1. Manual “Blockers” list in our planning documentsI like that this is simple, and a manual approach offers some flexibility for unplanned scenarios. On the other hand, I suppose it adds some maintenance overhead, and outdated lists might cause a bit of trouble. 2. Lightweight GitHub Action that watches for “waiting for #” commentsThis seems like a great idea, and I'd add that we might want to consider more than one type of comment, to account for common scenarios, like the following:
Optionally, we might create a "waiting" label covering both of the scenarios above. It could be added automatically when a comment with a "blocked by #" type of tag is included, and the actions above could remove it. If contributors want to work on something immediately, they can skip over waiting issues when visually scanning the full issue list; alternatively, if they want to help resolve bottlenecks, they can specifically look for waiting issues (or filter for them). Note: For sensitive actions triggered by a comment, a security measure might be worth considering, since anyone on GitHub can make a comment. Closing someone else's issue might be a sensitive action in this sense, although I'm not sure how much of a concern it is. 3. Feature-dependency blockers surfaced from inline TODOsInteresting! Proposed idea: "Writability" advantage If we go this route, maybe we could use the JSDoc Alternative: "Readability" advantage Another possible advantage is that it'd give more visibility to blocked issues. Then, if an issue is blocked but no one can currently work on it, or a contributor needs to stop working for some reason, others can more easily discover the issue and its dependencies, so they can help out. They may also be able to understand the nature of the dependency more easily, if an explanation is described in Markdown in a GitHub issue, rather than in a code comment. 4. Sub-issues
Great point. After considering this a bit more, the main use case for sub-issues appears to be planning out large chunks of work. Although it is possible to add existing issues as sub-issues of other issues, it won't be possible in general to model unplanned dependencies with GitHub sub-issues, due to the single-parent requirement. SummaryMy initial thinking is that we could use GitHub Actions for managing unplanned dependencies in a couple common scenarios, and we could use sub-issues to plan out and manage large issues. Caveats: I haven't done any significant research on standard practices. There might be relevant design criteria I'm overlooking. Etc. I'm curious to hear what others think! |
Using something like jsdoc-todo seems very useful. I was wondering if a combined approach would be feasible by creating issues which are labeled as I am not familiar with github's sub-issue feature and can't tell if it accomplishes the same |
Really exciting discussion, thanks for your thoughts everyone! A couple comments based on a few of the topics above. Using jsdoc-todo for inline TODOsThanks for bringing up jsdoc-todo @GregStanton @error-four-o-four ! I looked into it a little more, and I like the tooling that people have built around it. Seems worth exploring for @perminder-17 's point 3. A couple of things I found as I was looking into it - not directly related but maybe something nice to try out on a one-time basis to tidy up all the inline TODOs.
For context, the "todos" are pretty varied in style in the 1.x branch, including but not limited to There is a marketplace action for TODO to issue, so maybe worth checking if this can be customized to meet the needs of original point 3 ("Feature-dependency blockers surfaced from inline TODOs") without triggering too many false positives.
I think this could be considered, especially as a longer-term goal/practice, though I'm keeping in mind that currently there are >300 issues (core and website), and >300 inline TODOs. So either manually or automatically (as with above tools) opening issues for inline TODOs would be an undertaking. Label-gated automation@GregStanton and @error-four-o-four 's point about permissions is also valuable. Right now, maintainer and triage role can add/remove labels; though some contributors do have this role granted on a case-by-case basis, it's not widely used. Even if it's more systematically given, this permission would still be given mindfully, so I think "locking" the logic with a label would meet the security concern. I.e., The automation only triggers when the appropriate label is present on the issue, which mitigates abuse. Possible labels: "umbrella" (above comment), "dependency" (confusing), "waiting" (per @GregStanton's suggestion) or "blocking" on the issue that is being waited for, which is where gating matters most. I don't have a very precise idea right now, but using labels as a control mechanism seems like a way to keep the system flexible and easy (comments) but a bit more secure. EDITED TO ADD: example user flow:
|
Uh oh!
There was an error while loading. Please reload this page.
Topic
Hello, community family,
While working on PR #848 (p5.js-website) I realized that it will be fully resolved the moment issue #7722 (p5.js) is closed. I applied a small workaround for now, but this highlighted a broader question: What is the best, most maintainable way for us to handle blocker / dependent relationships across our issues? Below are four possible approaches drawn from recent discussions. I would appreciate everyone’s thoughts, additional ideas, on which direction we should adopt. Thanks to @ksen0 and @GregStanton for their inputs for the ideas.
1. Manual “Blockers” list in our planning documents
If the number of dependencies remains small, we can simply add the blocking issue numbers (for example, #7722) to the Blockers section of the p5.js development-planning document. If it's a handful of things, manual is the best option.
2. Lightweight GitHub Action that watches for “waiting for #” comments
A GitHub Action can watch for any issue being closed and then look for open issues or PRs that contain “waiting for #7722” (or whatever issue number). As soon as #7722 is closed, the Action automatically closes (or locks) all items that have that exact comment. In other words, you add a small script or YAML workflow that listens to the issues.closed event, searches for “waiting for #” in open issues/PRs, and closes them. You don't have to manually remember all the issues needs to be closed and github actions will do for you.
3. Feature-dependency blockers surfaced from inline TODOs
Some dependencies live inside the codebase rather than in the issue tracker. A good example is the planned 2D-only build of p5.js, which cannot be shipped until the GPU-accelerated
filter()
renderer (PR #7409) is finished.For this scenario, Our code should contain inline TODOs such as
// TODO: implement 2D build once filter() runs on GPU
We could run a periodic Action that scans for such annotated TODOs, detects when their prerequisites have landed, and then opens a fresh issue (“Implement 2D build”), this will let us know that we can work on this part now. This approach is more complex but helps surface hidden technical debt.
4. GitHub’s new Parent / Sub-Issue hierarchy
GitHub now lets us attach sub-issues to a parent and shows live progress bars. This is excellent for large, multi-step tasks where everything lives in the same repository or where cross-repo links can be attached manually.
What it does not provide is automatic closing of a dependent issue, I also think this probably only applies to new issues and hierarchical tasks, and the hardest dependencies are historical and may have more complex interconnections. However, it is a good idea imo to use existing features / supported process where it is possible
So, I would like to invite everyone here to share their preferences or suggest alternative strategies. Maybe someone has ideas to improve / knows tools that can be used for this. Thanks a lot :)
The text was updated successfully, but these errors were encountered: